[Arduino] Contrôler des moteurs DC avec le composant L293D

l293d dc motor

Cela fait maintenant plusieurs semaines que je suis à fond sur le monde Arduino et j’ai pour projet la réalisation d’un petit robot (rassurez-vous quand tout fonctionnera vous aurez droit à un beau tutoriel 🙂 ).

Les robots utilisent un certain nombre de composants: microcontrôleur (arduino dans mon cas), de servos et de moteurs. Dans cet article, nous allons voir comment faire pour piloter des moteurs DC (à courant continu) via un arduino.

Fonctionnement d’un moteur DC

Il existe des dizaines de moteurs DC différents: taille, voltage, ampérage, …

moteur dc

moteur dc

Un moteur DC est un convertisseur électromécanique permettant la conversion bidirectionnelle d’énergie entre une installation électrique parcourue par un courant continu et un dispositif mécanique ; selon la source d’énergie (merci Wiki :p). Pour faire simple, cela signifie qu’un moteur à courant continu va pouvoir convertir de l’électricité en énergie mécanique. Les moteurs DC ont ainsi la particularité de pouvoir fonctionner dans les 2 sens, suivant la manière dont le courant lui est soumis.

Le schéma suivant explique le fonctionnement d’un moteur à courant continu:

Electric DC Motor

Electric DC Motor

Les moteurs à courant continu se trouve relativement facilement et sont peu chers. J’ai réussi à m’en procurer plusieurs pour à  peine 10$  sur ebay. Vous verrez on prend vite goût à les utiliser et cela vous donnera probablement des idées de projets 🙂

Un premier test pour vous faire comprendre le fonctionnement d’un moteur DC  est de connecter la borne +du moteur à la borne + d’une pile 9V et la borne – du moteur à la borne – de la pile. Le moteur se mettra alors à tourner dans le sens horaire.

Maintenant,vous pouvez inverser les branchements et vous verrez que le moteur se mettra à tourner dans le sens anti-horaire. Si vous utiliser une pile plus ancienne vous verrez également que le moteur tourne moins vite: nous allons donc pouvoir régler la vitesse de fonctionnement du moteur DC.

Nous allons chercher à faire tourner un moteur DC dans les 2 sens grâce à un Arduino. Pour nous aider, nous allons utiliser un composant pas cher et simple à utiliser: le composant L293D.

Comprendre le composant L293D

Le composant L293D est un pont de puissance composé de plusieurs transistors et relais qui permet d’activer la rotation d’un moteur. Ce composant se trouve facilement sur Ebay et ne coûte pas très cher.

Le L293D est un double pont-H, ce qui signifie qu’il est possible de l’utiliser pour commander quatre moteurs distincts (dans un seul sens) grâce à ses 4 canaux.
Il est également possible de constituer deux pont-h afin de piloter deux moteurs distincts, dans les deux sens et indépendamment l’un de l’autre.

Il est important de noter que le L293D peut délivrer au maximum 600mA, veuillez donc choisir vos moteurs en conséquence.

Si vous avez besoin de plus d’informations, n’hésitez pas à consulter la documentation technique du composant L293D disponible ici.

Caractéristiques techniques du L293D

Voici les caractéristiques techniques du composant L293D:

  • Nbre de pont-H: 2
  • Courant Max Régime continu: 600mA (x2)
  • Courant de pointeMax < 2ms: 1200mA
  • VS Max Alim moteur: 36v
  • VSS Max Alim logique: 7v
  • Nbre de Broches: 16 DIP
  • Perte de tension: 1.3v

Branchement du L293D

Le schéma suivant détaille les différentes broches du composant L293D:

l293d pins

l293d pins

  1. Enable1: permet d’envoyer (ou pas) la tension sur les sorties du moteur via OUTPUT1 et OUTPUT2 et commande l’activation/désactivation du premier Pont-H. Si ENABLE1 = GND, le pont-H est déconnecté et le moteur ne fonctionne pas. Si ENABLE1 = VSS, le pont-H est connecté aux sorties et le moteur fonctionne dans un sens ou l’autre ou pas en fonction des tensions appliquée sur INPUT1 & INPUT2.
  2. Input1: avec Input 2, sont les broches de commande du Pont-H Output1/Output2. Il sera directement brancher à votre Arduino pour commander le sens du courant entre Output 1 et Output 2.
  3. Ouput1: avec Output 2, sera branché directement sur le moteur.
  4. GND: qui doit être raccorder à la masse de la source d’alimentation de puissance VS et à la masse de la source d’alimentation de la logique “VSS” (donc GND Arduino).
  5. Ouput2: avec Output 1, sera branché directement sur le moteur.
  6. Input2: avec Input 1, sont les broches de commande du Pont-H Output1/Output2. Il sera directement brancher à votre Arduino pour commander le sens du courant entre Output 1 et Output 2.
  7. VS: Alimentation de puissance des moteurs.
  8. Enable2: commande l’activation du second pont-H constitué de Output3/Output4
  9. Input3: avec Input 4, sont les broches de commande du Pont-H Output3/Output4. Il sera directement brancher à votre Arduino pour commander le sens du courant entre Output 3 et Output 4.
  10. Ouput3: avec Output 4, sera branché directement sur le moteur.
  11. GND
  12. GND
  13. Ouput4: avec Output 3, sera branché directement sur le moteur.
  14. Input4: avec Input 3, sont les broches de commande du Pont-H Output3/Output4. Il sera directement brancher à votre Arduino pour commander le sens du courant entre Output 3 et Output 4.
  15. VSS: Alimentation de la logique de commande (5V). A raccorder à la borne +5V de votre Arduino.

Veuillez noter que les pins Enable1 et Enable2  permettent moduler la vitesse du moteur en utilisant des broches PWM de votre Arduino. Si vous ne souhaitez pas moduler la vitesse du moteur DC, ilvous suffit de brancher Enable1 sur la broche VSS de votre Arduino.

Fonctionnement du L293D

Le tableau suivant vous permettra de faire fonctionner votre moteur DC en utilisant le composant L293D:

L293D Commands

L293D Commands

Utilisation du L293D avec Arduino et 2 moteurs DC

Avec un seul pont L293D et un arduino on va être capable de piloter 2 moteurs à courant continu indépendamment l’un de l’autre. Si la puissance de vos moteurs est faible vous pourrez même utiliser le 5V en sortie de votre arduino pour alimenter vos moteurs DC.

Brochage du L293D avec 2 moteurs sous Arduino

L293D arduino motor

L293D arduino motor

Schéma pour brancher 2 moteurs à un arduino

Arduino DC Motor

Arduino DC Motor

Code Arduino pour contrôler 2 moteurs

int motor1_enablePin = 11; //pwm
int motor1_in1Pin = 13;
int motor1_in2Pin = 12;
 
int motor2_enablePin = 10; //pwm
int motor2_in1Pin = 8;
int motor2_in2Pin = 7;
 
void setup()
{
  //on initialise les pins du moteur 1
  pinMode(motor1_in1Pin, OUTPUT);
  pinMode(motor1_in2Pin, OUTPUT);
  pinMode(motor1_enablePin, OUTPUT);
 
  //on initialise les pins du moteur 2
  pinMode(motor2_in1Pin, OUTPUT);
  pinMode(motor2_in2Pin, OUTPUT);
  pinMode(motor2_enablePin, OUTPUT);
 
}
 
void loop()
{
 
  SetMotor2(175, true);
  SetMotor1(255, false);
 
}
 
//Fonction qui set le moteur1
void SetMotor1(int speed, boolean reverse)
{
  analogWrite(motor1_enablePin, speed);
  digitalWrite(motor1_in1Pin, ! reverse);
  digitalWrite(motor1_in2Pin, reverse);
}
 
//Fonction qui set le moteur2
void SetMotor2(int speed, boolean reverse)
{
  analogWrite(motor2_enablePin, speed);
  digitalWrite(motor2_in1Pin, ! reverse);
  digitalWrite(motor2_in2Pin, reverse);
}

Voila bon amusement avec les moteurs à courant continu  et Arduino 🙂 Vous verrez c’est marrant à utiliser.

 

40 Responses to [Arduino] Contrôler des moteurs DC avec le composant L293D

  1. PoussinJ says:

    Merci! Très bon tutoriel! 🙂

  2. VOYER says:

    est ce que c’est normale que le L293D chauffe??

  3. qerboz says:

    Bonjour

    Ce tutoriel est très bien expliqué, j’ai malgré tout une petite question.
    Comment faut-il faire pour relier 4 moteurs au L293D ?
    Merci d’avance

  4. Thekieff says:

    Merci beaucoup sur ce tuto qui m’a beaucoup aidé ! Néanmoins il y a quelque chose qui reste flou pour moi car dans la partie “void loop”:
    -Que veut dire “boolean reverse” ?
    -Pourquoi faire comprendre à Arduino que “Setmotor1” est vrai alors que “Setmotor2” est faux ? Que signifie 175 et 255 ?
    Enfait j’ai l’impression de n’avoir pas compris grand chose de la 2eme partie du code…

  5. Lotulio says:

    Salut merci beaucoup pour ce tuto mais je ne comprend pas un truck tu dis qu’il faut brancher la broche 16 (Vss) du L293D sur 5v mais tu l’as branche sur la pile de 9v et tu n’as pas expliqué pourquoi tu as relier Vin à ta breadboard, je n’ai encore jamais utiliser ce pin Vin ..

    • jhd says:

      Vin sert a alimenter la carte

      • amel says:

        slt. merci beaucoup pour ce tutoriel. j’ai fait un montage de moteur + L293D+ potentiomètre + arduino et j’ai alimenter le moteur avec 6V qui a été insuffisant pour déplacer un mécanisme de translation est ce que je peut alimenter avec 12V et est ce que la puissance de l’allimentation endomage la carte. je serai très agréable s vous me repondre

        • jhd says:

          Il faut utiliser 2 sources d’alimentation:
          * une de 5v pour la carte Arduino
          * une de 12v pour vos besoins

          Il suffit de relier les masses des 2 alimentations et tout fonctionnera 🙂
          Il ne faut jamais alimenter en 12v un arduino car c est trop

  6. AMEL says:

    merci.je cherche de changer la vitesse en entrant des valeurs sur pc donc ne plus changer la vitesse manuellement avec un potentiomètre.

  7. oumaima says:

    bnj
    quelle est la méthodes pour faire tourner 5 moteur dans des defferents sens? .
    il est possible d’utiliser le circuit L293D?

  8. Leito91 says:

    merci pour se tuto , savez vous comment brancher un joystick pour controler les deux moteur ?

  9. Ilyas says:

    Bonjour,
    Merci pour ce tuto, en fait, j’ai un petit robot avec 3 moteurs (2 à 5v et l’autre à 24 v ), j’aimerai le commander par une carte arduino uno qu’elle est la solution que vous voyez pratique.
    Merci d’avance

    • jhd says:

      je verrai un projet avec 2 batteries reliées ensemble par leur masse. La premiere batterie (entre 6 et 9V) alimente uniquement la carte arduino alors que la seconde batterie (24v) servirait à l’alimentation des moteurs

  10. TonyCraft Anthony says:

    Bonjour,
    je voulais savoir s’il est possible d’utiliser à la place de la pile le 5V de l’Arduino. Voila, autrement excellent tutoriel.

    Cordialement,
    TonyCraft Anthony

    • jhd says:

      Il est possible d utiliser la pile de 12v ou de 24 a condition de reduire la tension

      • TonyCraft Anthony says:

        Bonjour,
        je me suis mal exprimé, je voulais dire d’utiliser le 5V de l’Arduino pour alimenter les moteurs et ne pas utiliser de piles ou d’autre sources d’alimentation que l’Arduino.

        Cordialement,
        TonyCraft Anthony

  11. toto says:

    Bonjour,

    Quand les cables sont coudés, ils ne sont pas “plentés” dans la table pour les connectiques ?

  12. Jack says:

    Merci pour le tuto.. J ai besoin d aide a propos d un robot a 4 moteurs de 6v 200 mA et 3 infrarouges. Je me demande l alimentation nécessaire pour faire tourner le robot ainsi pour que les 3 infrarouges marchent bien ?

  13. amina says:

    je me demande si on veut orienter 4 moteurs CC en utilisons des boutons poussoir selon leurs vitesses(si w1>W2 le robot va tourner à gauche sinn il va tourner à droite) sachant que w3=W4 tjrs .
    combien de CI L293D faut -il utiliser? et comment faire le brochage!quel sont les changement que je vais faire au niveau du code!merci d’avance.

  14. AZOUNI says:

    bonjour; j’espère que vous allez b1, pouvez vous m’aider a mon projet fin d’étude, je veux tout simplement faire tourner un seul moteur dans les deux sens: (je fais la commande par une app via un module bleutooth); je veut dire si la carte arduino reçoit un code par exemple “A” LE moteur tourne dans un sens, et si j’envoie par exemple “B” le moteur tourne dans l’autre sens; c posible; mais je trouve des difficultés a faire mon programme: povez vous m’aider s’il vos plait??

  15. Theo says:

    Bonjour,

    Je vois que l’on peut faire varier la vitesse du moteur jusque 255. Mais à quoi correspond ce nombre ? A-t-il une unité (possibilité d’en déduire une vitesse en tr/min…) ?

  16. Phaeron says:

    tes deux derniers shéma ne concordent pas dans les branchements L293D / Arduino : les sorties 7/8 et 12/13 sont inversées par rapport au schéma que tu indique au dessus

  17. volvay says:

    bonjour

    avant tout merci pour ce tutor
    j’ai une petite question , je veux commander deux moteurs cc avec un arduino et un joystick , donc quand je veux tourné a droite ou a gauche les moteurs auront deux sens de rotations différents (comme sur un tank) de plus la vitesse doit être variable en fonction de la tension délivrée par le joystick

    merci d’avance

  18. mary says:

    bonjour merci pour le tutoriel au fait je voulais savoir si c’était possible d’utiliser le L293D pour commander le moteur à corant continu et le moteur pas à pas

  19. mary says:

    merci pour le tuto au fait je voulais savoir si c’était possible de brancher sur le 293D deux moteurs de nature différente pas à pas et le moteur à courant continu

Leave a Reply

Your email address will not be published. Required fields are marked *