Le shield moteur L293D est une carte d’extension qui s’empile directement sur un Arduino Uno ou un Arduino Mega et transforme la carte en centrale de commande de moteurs. Deux circuits L293D, soit quatre ponts en H, y cohabitent avec un registre à décalage 74HC595 : ce dernier concentre les huit ordres de sens sur quelques fils, ce qui laisse presque toutes les broches du microcontrôleur libres pour les capteurs du montage. Quatre moteurs à courant continu, deux moteurs pas à pas ou deux servomoteurs s’y raccordent par simple serrage de vis, sans une seule soudure.
Caractéristiques techniques
| Circuits embarqués | deux L293D, soit quatre ponts en H, et un registre à décalage 74HC595 |
|---|---|
| Moteurs acceptés | jusqu’à quatre moteurs à courant continu dans les deux sens, ou deux moteurs pas à pas unipolaires ou bipolaires, ou une combinaison des deux |
| Servomoteurs | deux en-têtes trois broches, reliés aux broches 9 et 10 de l’Arduino |
| Tension moteur | 4,5 V à 25 V par le bornier d’alimentation de la carte ; le circuit L293D supporte jusqu’à 36 V |
| Courant | 600 mA en continu par pont, 1,2 A en pointe, avec coupure thermique et diodes de roue libre intégrées |
| Réglage de vitesse | modulation de largeur d’impulsion sur 256 niveaux, moteur par moteur |
| Broches occupées | 4, 7, 8 et 12 par le registre à décalage ; 9 et 10 si les servomoteurs servent |
| Raccordement des moteurs | deux borniers à vis pour les sorties M1 à M4, plus un bornier à deux vis pour l’alimentation des moteurs |
| Compatibilité | Arduino Uno, Arduino Mega et cartes au même format |
Alimentation : deux sources à ne jamais confondre
La carte a besoin de deux tensions différentes. La partie logique, qui commande, fonctionne en 5 V et se contente du courant déjà présent sur la carte Arduino. Les moteurs, eux, demandent beaucoup plus de courant que ce que le régulateur d’un Arduino peut fournir : ils sont alimentés par le bornier à deux vis de la carte. Le cavalier marqué PWR, juste à côté, décide qui alimente les moteurs.
- cavalier en place : les moteurs prennent leur énergie sur l’alimentation de l’Arduino, celle de la prise jack. Un seul bloc d’alimentation suffit alors, à condition de rester sous 12 V ;
- cavalier retiré : les moteurs tirent leur courant du bornier d’alimentation de la carte, entre 4,5 V et 25 V, pendant que l’Arduino est alimenté de son côté par USB ou par sa propre prise. C’est le montage recommandé, car les appels de courant des moteurs ne viennent plus perturber le microcontrôleur ;
- jamais les deux à la fois : une alimentation branchée sur le bornier alors que le cavalier est en place met les deux sources en parallèle et peut détruire la carte Arduino comme le shield.
Un moteur de robot de 6 V se nourrit d’un support de piles, un moteur de 12 V d’une alimentation de paillasse ou d’un bloc secteur. Dans tous les cas, les masses des deux sources doivent être communes.
Brochage et broches occupées
Chaque couple de vis correspond à un moteur, et la polarité n’a qu’un effet : elle fixe le sens de rotation. Si un moteur tourne à l’envers de ce que le programme demande, il suffit d’inverser ses deux fils dans le bornier.
- M1 et M2 forment le premier moteur pas à pas ou les deux premiers moteurs à courant continu, sur le premier L293D ;
- M3 et M4 forment le second, sur le second L293D ;
- sur les borniers de sortie, la vis du milieu est reliée à la masse : le fil commun d’un moteur pas à pas unipolaire s’y raccorde ;
- les broches 4, 7, 8 et 12 dialoguent avec le registre à décalage : elles ne sont plus disponibles pour un capteur ;
- les broches 9 et 10 pilotent les deux servomoteurs, sur leurs en-têtes dédiés, et restent libres tant qu’aucun servo n’est branché ;
- toutes les autres entrées et sorties, y compris les entrées analogiques, restent disponibles pour les capteurs.
Applications
- Robot roulant : quatre roues motrices, ou deux roues et une roue libre, pilotées depuis un joystick analogique ;
- Direction ou bras articulé : un servomoteur SG90 sur l’un des en-têtes servo oriente un capteur ou une pince ;
- Robot suiveur de ligne ou éviteur d’obstacles : les capteurs occupent les broches libres pendant que la carte gère la motricité ;
- Petite machine à axe mobile : un convoyeur, une porte automatique ou un plateau tournant, entraînés par deux moteurs pas à pas.
Mini-projet : un robot à deux roues qui avance et recule
Matériel
- un shield moteur L293D ;
- un Arduino Uno et son câble USB ;
- deux moteurs à courant continu avec roue ;
- un support de piles pour l’alimentation des moteurs ;
- un châssis et des vis de fixation.
Câblage
- empiler le shield sur l’Arduino : les longues rangées de broches de la carte entrent dans les barrettes femelles du microcontrôleur, sans forcer et sans décaler les rangées ;
- serrer les deux fils du moteur gauche dans les vis M1, ceux du moteur droit dans les vis M2 ;
- retirer le cavalier PWR, puis relier le plus et la masse du porte-piles au bornier d’alimentation, en respectant la polarité ;
- relier la masse de l’alimentation moteur à la masse de l’Arduino : c’est ce qui donne un niveau de référence commun aux signaux ;
- alimenter l’Arduino par USB, ou par sa prise jack si le montage doit fonctionner sans ordinateur.
Bibliothèque
Le shield se programme avec la bibliothèque AFMotor, celle du Motor Shield d’Adafruit en version 1. Dans l’IDE Arduino, l’ouvrir par le gestionnaire de bibliothèques, chercher Adafruit Motor Shield et installer la version 1 : la version 2 correspond à un autre shield à transistors et ne fonctionne pas ici. C’est la confusion la plus fréquente devant un programme qui refuse de compiler. Écrire le pilotage du registre à décalage à la main reste possible, mais long et sans intérêt pour une première mise en route.
Programme
/*
* Mini-projet : faire avancer puis reculer un robot a deux roues
* monte sur un Arduino Uno equipe du shield moteur L293D.
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "AFMotor.h"
AF_DCMotor roueGauche(1); // moteur branche sur les bornes M1
AF_DCMotor roueDroite(2); // moteur branche sur les bornes M2
void setup() {
roueGauche.setSpeed(180); // vitesse de 0 a 255
roueDroite.setSpeed(180);
}
void loop() {
roueGauche.run(FORWARD); // les deux roues avancent
roueDroite.run(FORWARD);
delay(2000);
roueGauche.run(RELEASE); // arret : le moteur est relache
roueDroite.run(RELEASE);
delay(1000);
roueGauche.run(BACKWARD); // les deux roues reculent
roueDroite.run(BACKWARD);
delay(2000);
roueGauche.run(RELEASE);
roueDroite.run(RELEASE);
delay(1000);
}La vitesse se règle par setSpeed, de 0 à 255, moteur par moteur : c’est ce qui permet de faire tourner un robot sur place en donnant des vitesses différentes aux deux roues, ou de compenser un moteur plus rapide que l’autre. La commande RELEASE coupe l’alimentation du moteur et le laisse tourner librement ; pour un freinage net, il faut passer par un court changement de sens, aux dépens de la mécanique.
Variante : deux moteurs pas à pas
Le même shield fait tourner deux moteurs pas à pas unipolaires ou bipolaires, un sur les bornes M1-M2, l’autre sur M3-M4. La bibliothèque expose pour cela la classe AF_Stepper, à laquelle on indique le nombre de pas par tour et le numéro du port, 1 ou 2 selon le bornier utilisé. Le câblage ne change pas : les deux bobines d’un moteur sur les quatre vis d’un port. Les pas entiers et les demi-pas suffisent pour un convoyeur, une porte motorisée ou un axe qui n’a pas besoin d’être précis au centième de millimètre. Un moteur pas à pas de forte intensité, qui réclame plus de 600 mA par bobine, sort en revanche du domaine de cette carte : un driver dédié est alors nécessaire.
Points d’attention
- Ne jamais alimenter les moteurs par la sortie 5 V de l’Arduino. Le régulateur de la carte ne débite que quelques centaines de milliampères : les moteurs s’arrêtent, la carte chauffe ou redémarre. C’est le bornier d’alimentation qui s’en charge.
- Le cavalier d’alimentation ne se met pas au hasard. Une alimentation branchée sur le bornier avec le cavalier en place relie deux sources entre elles : le montage recommandé est cavalier retiré, chacune des deux alimentations de son côté.
- Les moteurs de 1,5 V à 3 V ne fonctionnent pas. Le circuit ne descend pas sous 4,5 V : ces moteurs vibrent ou restent immobiles, quelle que soit la valeur envoyée par le programme.
- 600 mA par moteur, pas plus. Au-delà, la protection thermique coupe. Une astuce connue des roboticiens consiste à empiler un second L293D sur le premier pour doubler le courant admissible ; au-delà, il faut un module de puissance extérieur.
- Aucune modification de câblage sous tension. Débrancher un moteur qui tourne, c’est exposer l’étage de puissance à une surtension. Alimentation coupée avant toute intervention.
- Un moteur qui siffle sans tourner a le plus souvent une alimentation trop faible ou une masse manquante : vérifier la tension entre les deux vis du bornier d’alimentation avant de suspecter le programme.
Questions fréquentes
Le programme se téléverse mais les moteurs ne tournent pas, pourquoi ?
Trois causes reviennent : l’alimentation des moteurs n’est pas branchée sur le bornier, la bibliothèque AFMotor est absente, ou les moteurs sont trop petits en tension. Un moteur branché directement sur une pile, hors du shield, permet de trancher en dix secondes : s’il tourne, le défaut est côté carte ; s’il ne tourne pas, il est côté moteur.
Quelle différence avec le module L298N ?
Le module L298N se câble à l’extérieur, chaque entrée de direction rejoignant une broche de l’Arduino : il consomme davantage de broches mais se dépanne plus facilement, parce que tout est visible. Le shield, lui, s’empile, ne réquisitionne que quatre broches et accepte quatre moteurs au lieu de deux. Le L298N encaisse en revanche un courant plus élevé et se refroidit sur son dissipateur.
Le shield fonctionne-t-il sur un Arduino Mega ?
Oui, la carte se monte sur les deux formats avec le même brochage, et le programme ne change pas. Sur Mega, les broches laissées libres sont simplement plus nombreuses, ce qui permet d’ajouter des capteurs sans manœuvre particulière.
Les circuits chauffent, est-ce normal ?
Un L293D qui débite du courant chaudit, c’est son fonctionnement. Tiède est ordinaire, brûlant ne l’est pas : dans ce cas, réduire la tension des moteurs, alléger la charge mécanique, ou coller un petit dissipateur sur les boîtiers. Un moteur qui force, par exemple sur un châssis mal aligné, consomme bien plus de courant qu’un moteur libre.
À combiner avec
- Roue voiture 4WD 2WD — pour équiper les moteurs d’un robot roulant, en montage 2 ou 4 roues ;
- Support de moteur TT — le support qui fixe un moteur de robot sur un châssis en plaque perforée ;
- Roue libre pivotante — la troisième roue qui stabilise un châssis à deux moteurs.











