> >

logo Arduino Utiliser un L293D pour moteur DC avec une Arduino

Si vous voulez contrôler un moteur à courant continu de faible puissance (max 0,6 A) dans les deux sens de rotation et faire de la variation de vitesse le shield moteur L293D est une bonne solution. L'interface moteur est équipée d'un circuit intégré L293D permettant de piloter deux moteurs à courant continu dans les deux sens de rotation ou pour réduire ou accélérer la vitesse du moteur. Voyons en détail les possibilités de ce module avec l'utilisation d'une carte de développement Arduino.


1. Inversion du sens de rotation d'un moteur à courant continu
2. Inversion du sens de rotation avec Shield L293D
3. Variation de vitesse d'un moteur à courant continu (DC)
4. Projet simplifié : Porte de poulailler

Arduino 1. Inversion du sens de rotation d'un moteur à courant continu :

La problématique de l'inversion du sens de rotation du moteur à courant continu est qu'elle nécessite inverser le sens de la tension d'alimentation aux bornes directes du moteur.
Mais comment peut-on inverser l'alimentation d'un moteur de façon automatique et simple ?

Pour commander un moteur à courant continu dans les deux sens de rotation il suffit d'inverser le sens de son alimentation aux bornes du moteur.
Alimentation normale du moteur
Alimentation normale du moteur
Inversion de l'alimentation du moteur
Inversion de l'alimentation du moteur


Une solution est d'utiliser des relais permettant d'obtenir l'inversion, cette option est envisageable mais présente 3 inconvénients :
  • Le premier est que cette solution nécessite 4 relais pour inverser l'alimentation du moteur.
  • Le second est qu'il n'est pas possible de faire de la variation de vitesse avec les relais.

Le montage ci-contre permet de commander dans les deux sens de rotation un moteur à courant continu, on l'appelle le pont en H.
Pourquoi ce nom, tout simplement par la forme du circuit de commande en forme de lettre H (relais+moteur).
Pont en H avec relais
Origine du nom pont en H

Le montage fonctionne de la manière suivante :
• Pour être à l'arrêt il faut que tous les relais soient ouverts.
• Pour le sens de marche normal il faut fermer les relais K1 et K4.
• Pour le sens inverse il faut fermer les relais K2 et K3.
Commande moteur courant continu avec relais
Inversion du sens de rotation du moteur à courant continu avec relais
Attention !! Une mauvaise gestion des relais peut provoquer un court-circuit de l'alimentation , si les relais K1 et K2 sont fermés en même temps ou les relais K3 et K4.

Afin de faciliter la commande d'un moteur à courant continu (sens et vitesse) je vais utiliser un module contenant le composant L293D : Mini 4-Channel Motor Drive Shield L293D.

Le module est équipé d'un circuit intégré L293D. Ce dispositif permet de piloter 2 moteurs à courant courant continu dans les deux sens de rotation et pour faire de la variation de vitesse.
Cette interface accepte une tension d'alimentation allant de 4,5V à 25V et une intensité maximale par moteur de 0,6A (600mA).
Il est équipé de diodes de roue libres (anti retour) permettant de protéger les transistors servant à la commande du ou des moteurs.
Si le moteur à courant continu n'est pas suffisament précis pour votre application, vous pouvez opter pour l'utilisation d'un moteur pas à pas (voir tutoriel du moteur pas à pas).
Shield moteur à courant continu L293D
Module pour deux moteurs à courant continu L293D.

Le circuit intégré L293D permet la commande de deux moteurs, il est équipé de 16 broches.
Circuit intégré L293D
Circuit intégré L293D.
Broches du circuit intégré L293D
Broches du CI L293D
Il est équipé d'un pont en H permettant l'inversion de sens de rotation du moteur n°1 avec les bornes IN1, IN2 et IN3, IN4 pour le moteur n°2.
Des bornes EN1 et EN2 permettent de recevoir les informations de vitesse pour réaliser une la variation de vitesse des moteurs n°1 et n°2.
Il faut au préalable enlever les cavaliers présents sur les les bornes EN1 et EN2 pour faire de la variation de vitesse et les raccorder à des bornes PWM d'une Arduino.
Schémas pour raccorder les moteurs
Schéma de raccordement des moteurs

Repérage borniers du Shield moteur DC L293D
Borniers du module L293D.

Datasheet du circuit intégré L293D :

Le shield motor intégre un circuit intégré L293D, vous trouverez ci-dessous le L293D Datasheet complet téléchargeable au format pdf :


Arduino 2. Inversion du sens de rotation avec Shield L293D :

Nous avons vu dans le chapitre précédent que le module L293D permettait d'inverser le sens de marche du moteur à courant continu.
Comment utiliser le Shield moteur L293D, le câbler au moteur, le raccorder à l'Arduino pour inverser le sens de rotation du moteur DC ?
Quel programme doit-on écrire dans l'Arduino pour provoquer cette inversion de rotation du moteur à courant continu ?

comment programmer et raccorder un Shield motor L293D ?

    2.1. Matériel nécessaire :

Pour l'étude je vais utiliser divers matériel et composants, vous pouvez les retrouver sur la boutique partenaire vs-elec.fr.
• Une Arduino Mega (la version Uno suffira mais j'utilise ce que j'ai déjà) et son câble USB.
• Un module L293D (Mini 4-Channel Motor Drive Shield L293D).
• Des conducteurs pour plaque d'essai ou fils de prototypage (mâle/mâle, mâle/femelle, femelle/femelle).
• Un moteur à courant continu récupéré dans une vieille imprimante à jet d'encre HP.
• Une pile 9V pour l'alimentation.
• Un adaptateur de Pile 9V.
• Une platine d'expérimentation ou plaque d'essai breadboard (Optionnel).
Matériel nécessaire pour réaliser l'inversion du sens de rotation du moteur
Matériel nécessaire pour l'expérimentation.


    2.2. Câblage du L293D pour l'inversion du sens de rotation :

Pour commander le moteur dans les deux sens de marche (normal et inverse) seulement les bornes (VIN, GND, A+, A-, VCC, IN1 et IN2) du module L293D seront utilisés.

Vue de dessus du L293D - Repérage des bornes pour l'inversion :

Repérage des bornes utilisées sur le L293D pour inverser la rotation moteur DC
L293D : Bornes utilisées pour faire l'inversion du sens de rotation du moteur


Schéma électrique du L293D pour l'inversion du sens :

Le schéma électrique ci-dessous présente les différentes bornes de câblage du module L293D et le moteur à courant continu repéré M1.
Schéma du circuit intégré L293D pour un seul moteur
L293D : Schéma électrique pour un seul moteur

Schéma de raccordement pour le câblage du L293D et de l'Arduino :

Pour les schémas de raccordement j'utilise une carte Arduino Mega, mais le principe reste le même avec tout autre version.
Pour le câblage, j'ai besoin de 8 conducteurs y compris l'adaptateur pour la pile 9V. J'utilise 3 couleurs du Rouge et Noir pour les différentes polarités (alimentations 5V, 9V et GND, sens rotation moteur) et deux conducteurs marrons pour la commande du moteur dans les deux sens.
Plan de raccordement de l'Arduino du CI L293D et du moteur
Plan de raccordement électrique


Programme de l'Arduino :

Le code ci-dessous est à taper dans le logiciel Arduino.exe.
Le programme permet de réaliser indéfiniment le cycle suivant :
• Le moteur tourne pendant 3 secondes dans le sens normal.
• Le moteur s'arrête pendant 3 secondes.
• Le moteur tourne pendant 3 secondes dans le sens inverse.

int Moteur_sens1 = 4; // Pin 4 Arduino vers broche A+ du L293D
int Moteur_sens2 = 5; // Pin 5 Arduino vers broche A- du L293D
void setup() {
// On définit les bornes 4 et 5 de l'Arduino en sorties digitales
pinMode(Moteur_sens1, OUTPUT); // Pin 4 Arduino en sortie digitale
pinMode(Moteur_sens2, OUTPUT); // Pin 5 Arduino en sortie digitale
}
void loop() {
// Le moteur tourne dans le sens normal
digitalWrite(Moteur_sens1, HIGH); // Activation de la broche A+ du L293D
digitalWrite(Moteur_sens2, LOW); // Désactivation de la broche A- du L293D
delay( 3000 ); // Attendre 3 secondes
// Le moteur est à l'arrêt
digitalWrite(Moteur_sens1, LOW); // Désactivation de la broche A+ du L293D
digitalWrite(Moteur_sens2, LOW); // Désactivation de la broche A- du L293D
delay( 3000 ); // Attendre 3 secondes
// Le moteur tourne dans le sens inverse
digitalWrite(Moteur_sens1, LOW); // Désactivation de la broche A+ du L293D
digitalWrite(Moteur_sens2, HIGH); // Activation de la broche A- du L293D
delay( 3000 ); // Attendre 3 secondes
// Le moteur est à l'arrêt
digitalWrite(Moteur_sens1, LOW); // Désactivation de la broche A+ du L293D
digitalWrite(Moteur_sens2, LOW); // Désactivation de la broche A- du L293D
delay( 3000 ); // Attendre 3 secondes
}
Grafcet de l'inversion du sens de rotation du moteur à partir du L293D
Grafcet de l'inversion du sens de rotation du moteur à partir du L293D

Commande du moteur dans les deux sens par deux boutons poussoirs

Ce scénario nécessite deux boutons poussoirs qui seront relisés aux entrées digitales 11 et 12.
• Lorsque le premier bouton poussoir est appuyé, on fait tourner le moteur dans le sens normal, quand il est relâché on arrête le moteur.
• Lorsque le second bouton poussoir est appuyé, on fait tourner le moteur dans le sens inverse, quand il est relâché on arrête le moteur.
La vitesse du moteur est réglée selon la consigne PWM = 128 soit une diminution de 50%.

Programme correspondant :
int commande_gauche=11; // Bouton Gauche
int commande_droite=12; // Bouton Droit
int Moteur_sens1 = 4; // Pin 4 Arduino vers broche A+ du L293D
int Moteur_sens2 = 5; // Pin 5 Arduino vers broche A- du L293D
boolean etat_bp_g,etat_bp_d; // Déclaration des variables droite et gauche
boolean mem_g,mem_d; // Déclaration des mémoires gauche et droite
void setup()
{
pinMode(commande_gauche, INPUT_PULLUP); // On définit la broche 11 en entrée digitale
pinMode(commande_droite, INPUT_PULLUP); // On définit la broche 12 en entrée digitale
pinMode(Moteur_sens1, OUTPUT); // Pin 4 Arduino en sortie digitale
pinMode(Moteur_sens2, OUTPUT); // Pin 5 Arduino en sortie digitale
Serial.begin(9600); //Initialisation de la liaison série à 9600 bauds
}
void loop()
{
etat_bp_g=!digitalRead(commande_gauche); // Inverse de la lecture sur entrée BP gauche
etat_bp_d=!digitalRead(commande_droite); // Inverse de la lecture sur entrée BP droit
if(etat_bp_g!=mem_g)// Changement d'état du bouton poussoir gauche (front montant ou descendant)
{
if(etat_bp_g && !etat_bp_d) // Appui sur BP Gauche mais pas sur le droit
{
Rotation_Sens_1(); // Lancer la fonction sens normal
}else{
Arret(); // Lancer la fonction arrêt du moteur
}
}
mem_g=etat_bp_g; // Mémorisation du nouvel état du bouton gauche
if(etat_bp_d!=mem_d) // Changement d'état du bouton poussoir droit (front montant ou descendant)
{
if(etat_bp_d && !etat_bp_g) // Appui sur BP Droit mais pas sur le gauche
{
Rotation_Sens_2(); // Lancer la fonction sens inverse
}else{
Arret(); // Lancer la fonction arrêt du moteur
}
}
mem_d=etat_bp_d; // Mémorisation du nouvel état du bouton droit
delay(100); // Attendre 100ms
};
void Rotation_Sens_1() {
digitalWrite(Moteur_sens1, HIGH); // Activation de la broche A+ du L293D
digitalWrite(Moteur_sens2, LOW); // Désactivation de la broche A- du L293D
Serial.println("Moteur marche avant");
}
void Arret()
{
digitalWrite(Moteur_sens1, LOW); // Désactivation de la broche A+ du L293D
digitalWrite(Moteur_sens2, LOW); // Désactivation de la broche A- du L293D
Serial.println("Moteur arrêt");
}
void Rotation_Sens_2()
{
digitalWrite(Moteur_sens2, HIGH); // Activation de la broche A+ du L293D
digitalWrite(Moteur_sens1, LOW); // Désactivation de la broche A- du L293D
Serial.println("Moteur marche arrière");
}

À partir de cette expérience, nous maîtrisons la commande dans les deux sens de marche du moteur à courant continu.
La prochaine étape si on veut gagner en précision de déplacement d'un objet va être de réaliser une variation de vitesse, pour augmenter ⬆️ ou diminuer ⬇️ la vitesse de rotation du moteur à courant continu.



Arduino 3. Variation de vitesse d'un moteur à courant continu (DC) :

Maintenant que vous savez inverser le fonctionnement du moteur à courant continu. Il peut vous être nécessaire de faire de la variation de vitesse pour gagner en précision lors du déplacement d'un objet, ou pour éviter les démarrages trop brusques afin de ne pas détériorer les mécanismes. Le module moteur L293D propose cette possibilité vous permettant d'accélérer et de décélerer le moteur.
Comment câbler le Shield motor L293D et l'Arduino pour réaliser cette variation de vitesse ?
Quelle programme faut-il créer pour obtenir la variation de vitesse moteur à courant continu ?

moteur courant continu c2162-60006
Moteur à courant continu C2162-60006
Imprimante HP démontée
Chariot de déplacement des cartouches de l'imprimante.

    3.1. Matériel nécessaire :

Pour cette partie nous aurons besoin d'utiliser quasiment le même matériel que pour l'inversion du sens de marche du moteur, seuls quelques conducteurs supplémentaires seront à prévoir.
• Une Arduino et son câble USB.
• Un module L293D (Mini 4-Channel Motor Drive Shield L293D).
• Des conducteurs pour plaque d'essai ou fils de prototypage (mâle/mâle, mâle/femelle, femelle/femelle).
• Un moteur à courant continu.
• Une pile 9V pour l'alimentation.
• Un potentiomètre rotatif permettant de faire varier la résistance.
• Un adaptateur de Pile 9V.
• Une platine d'expérimentation ou plaque d'essai breadboard.
Matériel nécessaire pour faire varier la vitesse du moteur à courant continu
Matériel nécessaire pour l'expérimentation.


    3.2. Câblage du L293D pour la variation de vitesse :

Pour commander la vitesse de rotation du moteur, on utilisera la borne EN1 qui permettra d'augmenter ⬆️ ou de diminuer ⬇️ la vitesse du moteur quand elle sera reliée à une borne PWM de l'Arduino.
Pour avoir accès à cette borne et la relier à l'Arduino, il faut au préalable enlever le cavalier qui était présent, ce qui permettra de gérer la vitesse du moteur.

Vue de dessus du L293D - Repérage des bornes pour la vitesse :

Repérage des bornes utilisées sur le L293D pour la variation de vitesse
L293D : Bornes utilisées pour faire la variation de vitesse du moteur
Pour vous faire découvrir le principe de variation de la vitesse d'un moteur à courant continu, j'utilise donc le Shield moteur L293D qui enverra le signal électrique permettant de réduire ou d'augmenter la vitesse de rotation du moteur DC. Le signal électrique est envoyé par les bornes A+ et A- du circuit L293D.

Retrouver le tutoriel explicatif pour faire de la variation de vitesse sur un moteur à courant continu et avec le Shield L293D ainsi qu'une Arduino.
Variation de vitesse d'un moteur à courant continu avec le Shield L293D et le PWM d'une Arduino

Arduino 4. Projet simplifié : Porte de poulailler :

    4.1. Présentation :

Mon projet est de réaliser une porte automatique pour un poulailler.

Préparation du projet d'automatisation d'une porte de poulailler

TP BAC PRO MELEC Préparation U2 automatiser la porte d'un poulailler en Bac pro MELEC ou BAC PRO SEN Préparation à l'automatisation d'une porte de poulailler avec un moteur à courant continu.

Tutoriel fabrication d'une porte de poulailler automatique

Utilisation du contrôleur moteur L293D pour la réalisation d'une porte de poulaille automatique.





Si vous aimez les articles, n'hésitez pas à faire vos achats sur Amazon via ce lien, ils me permettront de recevoir une commission grâce au programme Partenaires Amazon EU.