Notre kit contient trois différents types de moteurs :
Le servomoteur est adapté si on veut bouger a un angle spécifique. Il est généralement contrôle par un signale PWM.
Le moteur pas à pas bouge, comme le nom suggère, avec des pas distincts. L'angle atteint dépend du nombre le pas parcouru. On peut faire tourner un moteur pas à pas en permanence comme un moteur DC (pourtant avec une vitesse plus faible) ou on peut le bouger à un certain angle comme un servomoteur. Le moteur pas à pas nécessite une séquence d'impulsion pour tourner.
Le kit WeMos contient un moteur DC 3V-6V contrôlé avec un contrôleur pour moteur DC, tandis que le kit Freenove fourni un moteur 9V qui est mise en route avec un relais. Si la vitesse du moteur WeMos est contrôlable par son module de contrôle, le moteur DC du kit Freenove tourne à vitesse constante.
![]() |
![]() |
Moteur du kit WeMos | Contrôleur du moteur DC |
![]() |
![]() |
![]() |
Moteur du modèle de robot | le contrôleur L298N | le contrôleur L293D |
Voici les feuilles techniques des contrôleurs : L298N and L293D
Pour contrôler un moteur à courant continu avec le L298N les connexions suivantes sont faites (Les connexions pour le chip L293D sont similaires) :
L298N | L293D | WeMos ESP32 | batterie externe 9V | moteur | commentaires |
12V | Vcc2 | pole + | alimentation du moteur (et du contrôleur pour le L298N) | ||
Vcc1 | 5V | alimentation du contrôleur | |||
GND | GND, pins 4,5,12,13 | GND | pole - | ||
OUT1 | 1Y | pole + | |||
OUT2 | 2Y | pole - | |||
IN1 | 1A | D1: GPIO 22 | défini la direction du mouvement | ||
IN2 | 2A | D2: GPIO 21 | |||
EN1 | 1,2EN | D0: GPIO 26 | contrôle la vitesse |
Le pin EN1 peut être utilisé pour changer la vitesse du moteur. Dans ce cas, il doit être programmé en PWM (Pulse Width Modulation : modulation de largeur d'impulsion). Avec un cycle de service (duty cycle) de « 1 » (signal toujours à « 1 »), le moteur tourne à vitesse maximum. Avec un cycle de service 1/2 il marche à la moité de sa vitesse maximum et avec un cycle de service de zéro, il est à l’arrêt.
Bien sûr les pins IN3,IN3,EN2,OUT3,OUT4 ont la même signification pour le deuxième moteur, qui peut être contrôlé par le L298N.
Le servomoteur est contrôlé par un signal PWM, qui défini l'angle du moteur. Les connexions sont spécifiées dans le tableau suivant :
Câble du servomoteur | Couleur du câble | Pin du ESP32 |
GND | brun | GND |
Vcc | rouge | 5V |
Signal | orange | D0 = GPIO 26 |
Ce pilote est déjà intégré dans l'interpréteur MicroPython et la classe "Servo" peut être appelé directement.
Le moteur pas à pas que nous utilisons est du type 28BYJ-48. Puisque il demande un courant plus élevé qu'un pin GPIO ne peut fournir, un module amplificateur ULN-2803
est livré avec.
Ce vidéo YouTube (en anglais) donne une excellente introduction du fonctionnement d'un moteur pas à pas. L'auteur ouvre un moteur 28BYJ-48 pour montrer le détail de ces pièces. Voir aussi les transparents du cours "systèmes embarqués" (aussi en anglais).
Le moteur que nous utilisons fait un tour complet en 32 pas, mais il possède une boite de vitesse, qui réduit le mouvement d'un facteur 64. Pour cette raison, l'arbre moteur fait un tour complet avec 64*32=2048 pas.
Le moteur possède deux rangés à 32 dents qui travaillent comme petits aimants et qui peuvent être polarisé en pôle nord ou pôle sud par un courant. Quatre pins sont nécessaires pour l'alimentation de spires pour cette polarisation. Le rotor consiste en 16 petits aimants polarisés en alternance.
Le rotor | Les deux rangées de dents aimantées |
![]() |
![]() |
On appelle ce type de mouvement du moteur : mode monophasé avant.
![]() |
![]() |
![]() |
![]() |
Si le pin "Red" est connecté à la masse et le pin "Pink" est alimenté, un courant passe à travers la spire. Si par contre le pin Orange est alimenté, ce courant est reversé. Ceci résulte à reversé la polarité d'une série de dents.
Voilà les connexions de la carte contrôleur du moteur pas à pas :
Contrôleur moteur pas à pas | ESP32 WeMos D1 Mini CPU |
---|---|
5V + | 5V |
5V - | GND |
IN1 | D0, GPIO 26 |
IN2 | D5, GPIO 18 |
IN3 | D6, GPIO 19 |
IN3 | D7, GPIO 23 |
Le contrôleur possède 4 LED qui montre l'état des lignes GPIO. Pour faire marcher le moteur en mode monophasé avant, on doit programmer les pins GPIO dans une séquence comme suit :
IN1 | IN2 | IN3 | IN4 | |
---|---|---|---|---|
Pas 1 | 1 | 0 | 0 | 0 |
Pas 2 | 0 | 1 | 0 | 0 |
Pas 3 | 0 | 0 | 1 | 0 |
Pas 4 | 0 | 0 | 0 | 1 |
Si on traverse la table du bas vers le haut, le moteur tourne en sens inverse : mode monophasé arrière
On peut aussi faire marcher le moteur en aliment toujours les deux séries de dents :
![]() |
![]() |
![]() |
![]() |
Voici le tableau avec la séquence des états GPIO:
IN1 | IN2 | IN3 | IN4 | |
---|---|---|---|---|
Pas 1 | 1 | 1 | 0 | 0 |
Pas 2 | 0 | 1 | 1 | 0 |
Pas 3 | 0 | 0 | 1 | 1 |
Pas 4 | 1 | 0 | 0 | 1 |
En combinant les deux modes décrits en haut, on peut faire marche le moteur en demi pas et augmenter la résolution du mouvement ainsi.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
IN1 | IN2 | IN3 | IN4 | |
---|---|---|---|---|
Pas 1 | 1 | 0 | 0 | 0 |
Pas 2 | 1 | 1 | 0 | 0 |
Pas 3 | 0 | 1 | 0 | 0 |
Pas 4 | 0 | 1 | 1 | 0 |
Pas 5 | 0 | 0 | 1 | 0 |
Pas 6 | 0 | 0 | 1 | 1 |
Pas 7 | 0 | 0 | 0 | 1 |
Pas 8 | 1 | 0 | 0 | 1 |
I | Attachment | History | Action | Size | Date![]() |
Who | Comment |
---|---|---|---|---|---|---|---|
![]() |
l298.png | r1 | manage | 187.0 K | 2021-06-30 - 08:37 | UliRaich | |
![]() |
moteurDC.png | r1 | manage | 47.7 K | 2021-06-30 - 08:37 | UliRaich | |
![]() |
motorShieldFront.png | r1 | manage | 170.7 K | 2021-06-30 - 08:37 | UliRaich | |
![]() |
robotMotor.png | r1 | manage | 56.9 K | 2021-06-30 - 08:37 | UliRaich | |
![]() |
servo.png | r1 | manage | 143.0 K | 2021-06-30 - 13:02 | UliRaich | |
![]() |
stepping.png | r1 | manage | 182.9 K | 2021-06-30 - 13:02 | UliRaich | |
![]() |
steppingMotorDiagram.png | r1 | manage | 29.9 K | 2022-03-09 - 08:56 | UliRaich | |
![]() |
l293d.png | r1 | manage | 230.1 K | 2022-03-12 - 17:37 | UliRaich | |
![]() |
gears.png | r1 | manage | 104.0 K | 2022-03-14 - 20:07 | UliRaich | |
![]() |
doubleStep1.png | r1 | manage | 5.3 K | 2022-03-16 - 08:20 | UliRaich | |
![]() |
doubleStep2.png | r1 | manage | 5.6 K | 2022-03-16 - 08:20 | UliRaich | |
![]() |
doubleStep3.png | r1 | manage | 5.2 K | 2022-03-16 - 08:20 | UliRaich | |
![]() |
doubleStep4.png | r1 | manage | 5.5 K | 2022-03-16 - 08:20 | UliRaich | |
![]() |
rotor.png | r1 | manage | 39.5 K | 2022-03-16 - 08:16 | UliRaich | |
![]() |
step1.png | r1 | manage | 4.8 K | 2022-03-16 - 08:19 | UliRaich | |
![]() |
step2.png | r1 | manage | 4.7 K | 2022-03-16 - 08:19 | UliRaich | |
![]() |
step3.png | r1 | manage | 4.8 K | 2022-03-16 - 08:19 | UliRaich | |
![]() |
step4.png | r1 | manage | 4.6 K | 2022-03-16 - 08:19 | UliRaich | |
![]() |
theeth3.png | r1 | manage | 256.3 K | 2022-03-16 - 08:16 | UliRaich |