Comment faire pour contrôler facilement un moteur avec un arduino ?
Un moteur à courant continu peut consommer beaucoup d’intensité et nécessite souvent une grosse tension d’alimentation.
De plus l’algorithme nécessaire à sa mise en oeuvre peut vite devenir compliqué (pour moi du moins :p ).
Pour pouvoir résoudre tous ces problèmes nous allons utiliser le Shield Moteur L298N V3.
Il permet de contrôler 2 moteurs en utilisant au maximum 46V et 2A .
Pour utiliser ce shield, il faut d’abord le plugger sur l’arduino (sisi c’est vrai).
Ensuite on remarque la présence de 3 boutons:
VM (Voltage Motor) Vex/Vin :Permet de choisir si la source d’alimentationdes moteurs:Soit le pin Vin de l’arduino soit source extérieure qui sera connecté au domino du shied..
VLO(Voltage Logic Onboard) On/Off :Pour fonctionner ce shield a besoin de 2 tensions: une pour piloter la rotation du moteur et une autre ,la tension logique, de 5V.Le fait d’activer VLO permet d’utiliser un circuit adaptateur de tension, intégré au shield, pour obtenir la tension logique dont il a besoin à partir de la source extérieure (le Vex).Ce mode ne fonctionne que si : 6V<Vex<20v.
VLC(Voltage Logic Connected) On/Off :Ce mode permet au shield de récupérer la tension logique directement sur l’arduino.C’est très pratique dans les cas où le Vex ne permet pas d’utiliser le VLO.
Donc si on souhaite piloter un rover avec des moteurs peu puissants (ce qui est mon cas), alors plusieurs solutions sont possibles:
La solution optimale serait d’alimenter l’arduino par une pile 9V et de fournir
une autre alimentation qui serait réservée au shield.
Sur la photo le shield est alimenté par 6 piles en série.
Dans ce cas, VM=Vex VLC=On VLO=Off
.
.
.
.
On peut utiliser 6 piles AA montées en série et les connecter au Vex.
Cela servira d’alimentation à la fois au shield et à l’arduino.
La config sera: VM=Vex VLC=On VLO=On
.
.
.
.
.
Ou bien on peut directement utiliser une pile 9V pour peu que l’on ait l’adaptateur.
Dans ce cas : VM:Vin VLC:On VLO:Off
.
.
.
.
Passons maintenant au code qu’il va falloir envoyer à l’arduino pour contrôles les 2 moteurs.
Les moteurs seront contrôlés selon 3 paramètres: la direction sens 1, la direction sens 2 et la vitesse de rotation.
Pin 13 du shield : direction 1 du moteur A
Pin 12 du shield : direction 2 du moteur A
Pin 10 du shield : Vitesse de rotation du moteur A
Pin 11 du shield : direction 1 du moteur B
Pin 8 du shield : direction 2 du moteur B
Pin 9 du shield : Vitesse de rotation du moteur B
Pour faire tourner un moteur A dans la direction 1 on utilisera:digitalWrite()
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
Pour régler la vitesse de rotation du moteur on utilisera analogWrite();
analogWrite(vitessePinA, 255);
Note: la vitesse varie de 0 à 255
Exemple de code pour faire tourner les 2 moteurs dans le même sens et à la vitesse maximale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// moteur A int dir1PinA = 13; int dir2PinA = 12; int vitessePinA = 10; // moteur B int dir1PinB = 11; int dir2PinB = 8; int vitessePinB = 9; void setup() { //définition des pin en sortie pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(vitessePinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(vitessePinB, OUTPUT); } void loop() { //vitesse de rotation des moteurs maximale analogWrite(vitessePinA, 255); analogWrite(vitessePinB, 255); //faire tourner les 2 moteurs dans le même sens digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } |