L293D et Arduino forment un duo solide pour commander un moteur DC avec un pont en H, sans entrer immédiatement dans l’électronique de puissance complexe. Entre tensions d’alimentation, pertes dans le circuit et gestion thermique, plusieurs paramètres orientent la fiabilité de votre montage.
En comprenant comment câbler chaque broche, structurer le code et dimensionner les composants périphériques, vous obtenez un pilotage moteur précis, réversible et stable, prêt à intégrer un robot mobile, un chariot motorisé ou un système d’ouverture automatisé.
| Élément | Rôle dans le pilotage | Points essentiels à retenir |
|---|---|---|
| L293D | Driver de moteur basé sur un double pont en H | Permet inversion de polarité, isolement Arduino/moteur, supporte jusqu’à 600 mA par canal. |
| Arduino | Envoie les signaux logiques de commande | Ne peut pas alimenter un moteur directement; fournit uniquement les impulsions de contrôle. |
| Moteur DC | Actionné via le pont en H pour tourner dans les deux sens | Nécessite une alimentation séparée; attention au courant maximum. |
| Broches Enable (EN1/EN2) | Activation des canaux moteur | Peut être relié au PWM pour gérer la vitesse du moteur. |
| Alimentation moteur (Vs) | Alimente directement le moteur via le L293D | Dépend du moteur utilisé (souvent 6 à 12 V). |
| Masse commune (GND) | Référence électrique entre Arduino, L293D et alimentation moteur | Indispensable pour un fonctionnement stable et éviter les comportements aléatoires. |
Caracteristiques cles du L293D – Pont en H pour moteur DC

Principe du L293D et fonctionnement du pont en H
Le L293D est un circuit intégré de commande moteur basé sur une architecture double pont en H. Il contient en réalité quatre demi-ponts, regroupés par paire pour former deux ponts H complets. Ce composant gère la commutation de la polarité appliquée au moteur et permet de contrôler le sens de rotation à partir de simples signaux logiques issus de la carte Arduino.
En interne, chaque canal comporte des transistors de puissance, des diodes de roue libre intégrées et une logique de commande. Le L293D supporte des tensions d’alimentation moteur VS de 4,5 V à 36 V, et une alimentation logique VSS de 5 V max (avec tolérance jusqu’à 7 V). Cette séparation entre l’alimentation de puissance et l’alimentation logique sécurise les circuits de commande et limite les perturbations sur Arduino.
Concept de pont en H pour un moteur DC
Le pont en H repose sur quatre interrupteurs électroniques (transistors ou MOSFET) disposés en forme de H. En activant deux interrupteurs opposés, le courant traverse le moteur dans un sens ou dans l’autre. L293D automatise ce schéma et se charge du routage de puissance en respectant des seuils de tension et de courant précis.
Le contrôle se fait ainsi :
- Rotation dans un sens : un côté du moteur relié au +VS, l’autre à la masse.
- Rotation dans l’autre sens : inversion des connexions, le premier côté à la masse, le second au +VS.
- Arrêt : les deux côtés du moteur sont au même potentiel (masse ou +VS) ou le pont est désactivé.
« Un pont en H permet de changer le sens de rotation d’un moteur DC en inversant simplement la polarité, sans modifier le câblage physique du moteur. »
Caractéristiques électriques clés du L293D
Pour un montage fiable, la compréhension des limites électriques reste primordiale. Le L293D gère un courant continu d’environ 0,6 A par canal et une pointe jusqu’à 1,2 A sur moins de 2 ms. La fiche technique indique également un courant de sortie maximum de l’ordre de 0,65 A par canal. Ces données imposent de choisir des moteurs DC en conséquence, surtout pour les applications de robotique mobile ou de petites motorisations.
ArduinoArduino et domotique : automatiser sa maison pour pas cherUne perte de tension de 1,3 V à 1,4 V survient typiquement dans le pont en H. Par exemple, avec une alimentation moteur de 12 V, le moteur reçoit plutôt autour de 10,6 V à 10,7 V. Ce delta influe sur la vitesse et le couple. La température de fonctionnement reste spécifiée de 0 °C à 70 °C, avec une température maximale de jonction proche de +150 °C avant déclenchement de la protection thermique.

Brochage du L293D et architecture interne
Le L293D se présente le plus souvent dans un boîtier DIP 16 broches. Il embarque 4 canaux de sortie utilisables pour piloter jusqu’à 4 moteurs DC unidirectionnels ou 2 moteurs DC bidirectionnels. Il accepte également la commande de moteurs pas à pas unipolaires ou bipolaires en utilisant les sorties par paires.
Le circuit intègre aussi des diodes de roue libre, utiles pour évacuer l’énergie de l’inductance lors de la coupure du courant dans les enroulements moteur. Cette fonction réduit les surtensions et protège la structure interne.
Vue synthétique du brochage
Voici un aperçu de la répartition des broches, utile pour le câblage avec Arduino :
| Broche L293D | Rôle | Connexion typique Arduino / moteur |
|---|---|---|
| 1 (Enable 1) | Activation canal 1 et 2 (moteur 1) | PWM Arduino (contrôle de vitesse) |
| 2 (Input 1) | Entrée logique sens A moteur 1 | Sortie digitale Arduino |
| 3 (Output 1) | Sortie vers borne moteur 1 | Borne moteur 1 |
| 4 (GND) | Masse puissance / logique | GND commun Arduino + alim moteur |
| 5 (GND) | Masse puissance / logique | GND commun Arduino + alim moteur |
| 6 (Output 2) | Sortie vers autre borne moteur 1 | Seconde borne moteur 1 |
| 7 (Input 2) | Entrée logique sens B moteur 1 | Sortie digitale Arduino |
| 8 (VS) | Alimentation moteur (4,5 V à 36 V) | Alimentation externe dédiée aux moteurs |
| 9 (Enable 2) | Activation canal 3 et 4 (moteur 2) | PWM Arduino (optionnel pour second moteur) |
| 10 (Input 3) | Entrée logique sens A moteur 2 | Sortie digitale Arduino |
| 11 (Output 3) | Sortie vers borne moteur 2 | Borne moteur 2 |
| 12 (GND) | Masse puissance / logique | GND commun Arduino + alim moteur |
| 13 (GND) | Masse puissance / logique | GND commun Arduino + alim moteur |
| 14 (Output 4) | Sortie vers autre borne moteur 2 | Seconde borne moteur 2 |
| 15 (Input 4) | Entrée logique sens B moteur 2 | Sortie digitale Arduino |
| 16 (VSS) | Alimentation logique (5 V) | 5 V Arduino |
Ce brochage autorise plusieurs scénarios : un seul moteur DC avec deux sens de rotation, deux moteurs DC indépendants, ou un moteur pas à pas contrôlé à partir de quatre sorties.

Câblage d’un moteur DC avec Arduino et L293D
Le câblage respecte quelques règles simples mais strictes. Une erreur de masse commune ou de polarité met rapidement en défaut la carte Arduino ou l’alimentation. La structure suivante concerne un montage type pour un moteur DC bidirectionnel.
Schéma de câblage de l’alimentation
Le L293D dispose de deux alimentations séparées :
- VSS (broche 16) reliée au 5 V d’Arduino pour la logique.
- VS (broche 8) reliée à une alimentation moteur de 4,5 V à 36 V.
Les masses sont interconnectées sur plusieurs broches :
- GND broches 4, 5, 12, 13 reliées entre elles et connectées à la masse Arduino et à la masse de l’alimentation moteur.
Ce lien de masse commune reste impératif pour que les niveaux logiques définis par Arduino soient correctement interprétés par le L293D et pour que les références de tension coïncident.
Connexion du moteur DC sur les sorties du pont en H
Pour un moteur DC unique, les sorties s’emploient par paire :
- Output 1 (broche 3) vers la première borne du moteur.
- Output 2 (broche 6) vers la seconde borne du moteur.
L’ordre de câblage n’est pas critique. Le sens de rotation associé aux états logiques In1/In2 s’inverse simplement si les fils du moteur sont permutés. Le moteur recevra une tension proche de VS, minorée par la chute de 1,3 V à 1,4 V due au pont interne.
Câblage détaillé avec Arduino : broches de commande
Un schéma fréquemment utilisé avec Arduino repose sur la configuration suivante :
- Enable 1 (broche 1) reliée à une sortie PWM Arduino pour gérer la vitesse du moteur (par exemple D9).
- Input 1 (broche 2) connectée à une sortie digitale (par exemple D7).
- Input 2 (broche 7) connectée à une autre sortie digitale (par exemple D8).
Les broches VS et VSS suivent le schéma précédent, tout comme les masses. Ce montage offre :
- Un contrôle précis du sens de rotation via Input 1 et Input 2.
- Un contrôle de la vitesse via modulations PWM sur Enable 1.
- La possibilité de freiner activement ou de laisser le moteur en roue libre selon les états logiques choisis.
Logique de commande : sens de rotation, arrêt et freinage
La commande d’un moteur DC avec L293D repose sur une logique simple de niveau haut / bas. En pratique, un niveau High correspond à 5 V environ, fourni par une sortie digitale Arduino en mode HIGH.
Table de vérité pour un canal de pont en H
Voici un schéma de commande typique pour un moteur branché sur les sorties 1 et 2 :
| Enable | Input 1 | Input 2 | État du moteur | Commentaire |
|---|---|---|---|---|
| High | Low | High | Rotation sens horaire | Polarité définie, courant dans un sens |
| High | High | Low | Rotation sens anti-horaire | Polarité inversée |
| High | Low | Low | Arrêt (roue libre) | Les deux bornes au même potentiel bas |
| High | High | High | Arrêt (freinage) | Les deux bornes en état haut, effet de freinage |
| Low | X | X | Arrêt (pont désactivé) | Le pont H n’achemine plus le courant |
Pour un usage simple, trois modes se révèlent suffisants :
- Marche avant : Enable = High, Input 1 = Low, Input 2 = High.
- Marche arrière : Enable = High, Input 1 = High, Input 2 = Low.
- Arrêt : Enable = Low (peu importe Input 1/2) ou Enable = High avec les deux entrées identiques.
« Pour un pilotage robuste, mieux vaut toujours définir une combinaison de niveaux cohérente sur les entrées, même lorsque le pont est désactivé, afin d’éviter les états flottants et les changements de sens involontaires. »
Code Arduino de base pour piloter un moteur DC avec L293D
Une fois le câblage établi, la partie logicielle sur Arduino consiste à initialiser les broches, définir des fonctions utilitaires et orchestrer la séquence de mouvement dans la boucle principale. Le code suivant illustre un exemple complet.
Exemple de code minimal pour un moteur DC
Dans cet exemple, le moteur :
- Tourne dans un sens à vitesse moyenne.
- S’arrête momentanément.
- Redémarre dans l’autre sens à pleine vitesse.
// Définition des broches utilisées
const int EN1 = 9; // Enable 1 (PWM)
const int IN1 = 7; // Input 1
const int IN2 = 8; // Input 2
void setup() {
pinMode(EN1, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// Arrêt initial du moteur
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(EN1, 0);
}
// Fonction marche avant
void moteurAvant(int vitesse) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(EN1, vitesse); // 0 à 255
}
// Fonction marche arrière
void moteurArriere(int vitesse) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(EN1, vitesse);
}
// Fonction arrêt moteur
void moteurStop() {
// roue libre
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(EN1, 0);
}
void loop() {
// Marche avant vitesse moyenne
moteurAvant(150);
delay(3000);
// Arrêt
moteurStop();
delay(1000);
// Marche arrière pleine vitesse
moteurArriere(255);
delay(3000);
// Arrêt
moteurStop();
delay(2000);
}
Ce code illustre l’usage combiné de digitalWrite() et analogWrite() pour gérer simultanément le sens de rotation et le rapport cyclique PWM, donc la vitesse moyenne du moteur.
Gestion de plusieurs moteurs DC avec un seul L293D
Le L293D autorise la commande de jusqu’à 2 moteurs DC bidirectionnels, ou de 4 moteurs DC unidirectionnels si l’on n’utilise qu’un seul sens pour chacun. L’exploitation des quatre canaux demande une organisation rigoureuse des broches Arduino.
Configuration typique pour deux moteurs DC
Pour piloter deux moteurs (gauche et droit, par exemple pour un robot différentiel), le câblage suit généralement ce schéma :
- Moteur A : sorties 1 et 2 (broches 3 et 6), commandes via Enable 1 (broche 1), Input 1 (broche 2), Input 2 (broche 7).
- Moteur B : sorties 3 et 4 (broches 11 et 14), commandes via Enable 2 (broche 9), Input 3 (broche 10), Input 4 (broche 15).
Côté Arduino, deux broches PWM se réservent aux signaux Enable, et quatre broches digitales contrôlent les entrées de direction. Cela permet un pilotage indépendant de la vitesse et du sens pour chaque moteur.
Exemple de code pour deux moteurs
L’exemple suivant illustre la gestion d’un châssis à deux roues motrices :
// Moteur A
const int ENA = 9;
const int IN1A = 7;
const int IN2A = 8;
// Moteur B
const int ENB = 10;
const int IN1B = 5;
const int IN2B = 6;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1A, OUTPUT);
pinMode(IN2A, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1B, OUTPUT);
pinMode(IN2B, OUTPUT);
}
void moteurA(int vitesse, bool avant) {
if (avant) {
digitalWrite(IN1A, LOW);
digitalWrite(IN2A, HIGH);
} else {
digitalWrite(IN1A, HIGH);
digitalWrite(IN2A, LOW);
}
analogWrite(ENA, vitesse);
}
void moteurB(int vitesse, bool avant) {
if (avant) {
digitalWrite(IN1B, LOW);
digitalWrite(IN2B, HIGH);
} else {
digitalWrite(IN1B, HIGH);
digitalWrite(IN2B, LOW);
}
analogWrite(ENB, vitesse);
}
void stopMoteurs() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void loop() {
// Avance tout droit
moteurA(180, true);
moteurB(180, true);
delay(2000);
// Tourne sur place à gauche
moteurA(180, true);
moteurB(180, false);
delay(1500);
stopMoteurs();
delay(2000);
}
Ce type de code s’emploie couramment pour des robots suiveurs de ligne, des mini-plateformes d’exploration ou de petits rovers éducatifs.
Gestion thermique, pertes et dimensionnement
Le L293D dissipe une partie de la puissance électrique sous forme de chaleur. Les pertes en conduction, liées à la chute de 1,3 V à 1,4 V dans le pont en H, s’ajoutent aux pertes de commutation. Le courant circulant dans chaque canal se transforme donc en élévation de température dans le boîtier DIP.
La température de fonctionnement spécifiée entre 0 °C et 70 °C impose une certaine prudence lors du choix de la charge. Le circuit dispose d’une protection thermique intégrée qui limite les dégâts en cas de surchauffe, mais la répétition de déclenchements thermiques fragilise l’ensemble, surtout si la ventilation et la dissipation restent insuffisantes.
Condensateurs de découplage et antiparasitage moteur
Les moteurs DC génèrent des perturbations électromagnétiques lorsque les balais commutent les enroulements. Ces impulsions se propagent dans l’alimentation et influencent directement le comportement d’Arduino et des capteurs environnants. Une stratégie de découplage et de filtrage améliore nettement la stabilité.
Condensateurs autour du L293D
Pour limiter les chutes de tension et les pics de courant, le montage intègre généralement :
- Un condensateur électrolytique de 10 µF minimum à proximité de l’alimentation logique VSS.
- Un condensateur de 33 µF ou 47 µF entre VS et GND, proche du L293D, pour absorber les appels de courant des moteurs.
Ces valeurs offrent une réserve d’énergie locale. La réponse de l’alimentation reste plus stable lors des démarrages et des inversions de sens. Le risque de reset Arduino se trouve ainsi réduit.
Condensateurs sur le moteur
Sur certains moteurs DC, en particulier ceux équipés de balais visibles, l’ajout de condensateurs céramiques de 220 nF directement aux bornes du moteur améliore nettement le bruit électromagnétique. Plusieurs configurations existent :
- Un condensateur entre les deux bornes du moteur.
- Deux condensateurs, un entre chaque borne et la masse (châssis ou GND).
Ces composants d’antiparasitage réduisent les pointes de tension et limitent les perturbations susceptibles d’influencer les capteurs analogiques, les modules radio ou la stabilité d’Arduino.
Précautions de câblage et problèmes fréquents
Un montage moteur avec Arduino et L293D reste sensible à certaines erreurs d’assemblage. Plusieurs symptômes récurrents reviennent lors des premiers essais : reset d’Arduino, moteur qui ne tourne pas, inversions de sens ou échauffement rapide du driver.
Masse commune et alimentation distincte
La masse commune constitue le socle de référence pour les niveaux logiques. Sans ce lien, la tension mesurée par le L293D entre ses entrées et sa propre masse ne correspond pas à celle calculée par Arduino. Un seul câble GND partagé suffit souvent, à condition que la section de fil supporte le courant cumulé.
Dans les installations où cohabitent moteurs et dispositifs plus sensibles, l’usage d’une alimentation dédiée pour les moteurs améliore la fiabilité. Arduino alimente la partie logique en 5 V, une alimentation séparée fournit VS au L293D. Les deux masses restent toutefois interconnectées.
Risques de reset Arduino lors des démarrages moteur
Lorsqu’un moteur démarre, le courant d’appel dépasse le courant nominal. Cette pointe se traduit parfois par une chute brutale de la tension 5 V. La carte Arduino redémarre alors, surtout si le décrochage intervient sous le seuil de stabilité du microcontrôleur.
« Un découplage insuffisant de l’alimentation provoque souvent des resets intempestifs d’Arduino lorsque plusieurs moteurs démarrent simultanément ou lorsqu’un robot se bloque contre un obstacle. »
Pour limiter ce phénomène :
- Prévoir des condensateurs de capacité suffisante près de VS et VSS.
- Limiter les accélérations brutales en rampe d’accélération PWM.
- Utiliser une alimentation plus robuste en courant, voire une source distincte pour les moteurs.
Utilisation du L293D avec des moteurs pas à pas
Le L293D ne se limite pas aux moteurs DC classiques. Il commande également des moteurs pas à pas unipolaires ou bipolaires en exploitant ses quatre sorties par séquences logiques. Chaque demi-pont gère un enroulement ou un demi-enroulement du moteur.
Pour un moteur pas à pas bipolaire, deux paires de sorties (par exemple Output 1–2 et Output 3–4) pilotent respectivement les deux bobines. La séquence d’activation des entrées Input 1 à 4 détermine le sens de rotation, le pas entier, le demi-pas ou le micro-pas en combinaison avec une modulation plus complexe.
Comparaison L293D, L298 et variantes modernes
Dans de nombreux tutoriels, L293D et L298 apparaissent côte à côte. Les deux composants reposent sur le concept de pont en H, mais leurs caractéristiques diffèrent.
| Caractéristique | L293D | L298 / L298P |
|---|---|---|
| Tension logique | 5 V (VSS) | 5 V |
| Tension moteur (VS) | 4,5 V à 36 V | jusqu’à environ 50 V selon versions |
| Courant par canal | 0,6 A continu / 1,2 A pointe < 2 ms | courant plus élevé selon édition (souvent autour de 2 A crête avec refroidissement adapté) |
| Nombre de canaux | 4 demi-ponts (2 ponts H) | 2 ponts H |
| Diodes intégrées | Oui (roue libre) | Selon la carte, parfois diodes externes nécessaires |
| Format courant | DIP 16 facile à breadboarder | Boîtier multi-broches, souvent en module shield |
Une variante comme L298P se trouve fréquemment intégrée dans des shields moteurs Arduino pré-câblés. Ces modules simplifient le câblage mais imposent la topologie de la carte. L293D, lui, laisse davantage de liberté de routing sur breadboard ou PCB personnalisé.
Intégration dans un projet global et liens avec la sécurité électrique
Dans un projet final, le L293D s’insère dans une chaîne plus large : alimentation secteur, transformateur, régulation de tension, protections contre les surintensités, voire boîtier de protection. La partie électronique basse tension interagit avec des circuits susceptibles de relever de normes plus structurantes.
ArduinoPiloter un relais 230 V avec Arduino en sécurité : 5 erreurs à éviterLorsqu’un projet quitte le cadre du simple prototype éducatif pour se rapprocher d’une installation fixe ou d’un dispositif plus pérenne, un regard vers la norme électrique NFC 15‑100 contribue à sécuriser la distribution de l’énergie, la mise à la terre et la protection contre les courts-circuits côté alimentation principale.
En environnement résidentiel ou tertiaire, un contrôle de l’installation électrique garantit que la ligne d’alimentation qui fournit les alimentations de vos circuits Arduino respecte les exigences de protection et de section de câbles. En cas d’évolution du projet vers un système plus intégré, une mise aux normes électrique permet d’aligner la partie puissance de l’installation avec les exigences réglementaires en vigueur.
En reliant ces aspects normatifs à la conception du driver moteur autour du L293D, vous obtenez une base technique cohérente, capable de passer du prototype expérimental à un système plus structuré, tout en conservant la maîtrise du comportement des moteurs DC grâce au contrôle précis du pont en H.




