Piloter deux moteurs avec un driver L298 – Arduino

L’Arduino est incapable, seul, d’alimenter deux moteurs à courant continu. Nous devons donc passer par une carte de puissance, qui permettra de commander les deux moteurs dans les deux sens de rotation et à des vitesses pouvant varier entre 0 tr/min et la vitesse maximale du moteur.

Caractéristiques :

– Intensité MAX = 2A ;
– Tension d’alimentation : 5 à 30V

Câblage

–> Ne pas brancher directement l’alimentation électrique.
–> Souder les fils au moteur si ce n’est pas encore fait
–> Pendant les phases d’essais, nous n’utiliserons pas de pile 9V, mais je vous conseille d’utiliser une alimentation stabilisée.

 

Programmation

Conseil : Si vous mettez en place un robot, monté sur un châssis, je vous conseille de tester le programme en surélevant ce châssis, afin que les roues ne touchent pas le sol. Vérifier la rotation des roues, Il se peut qu’elle soit inversée. Dans ce cas inverser le câblage du ou des moteurs concernés.

 

Programme 1 : Faire tourner les moteurs à vitesse constante.

Ce programme permet de :
– Faire tourner les deux moteurs dans un sens pendant 2s ;
– Arrêter les moteurs pendant 1s ;
– Faire tourner les deux moteurs dans l’autre sens pendant 2s ;
– Arrêter les moteurs pendant 1s. 

// Moteur 1
int IN1 = 5;
int IN2 = 6;

// Moteur 2
int IN3 = 10;
int IN4 = 11;

void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void loop() {

// Marche Avant
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 1);
digitalWrite(IN4, 0);

// Attente 2s
delay(2000);

// Arrêt des moteurs
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);

// Attente 1s
delay(1000);

// Marche arrière
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);

// Attente 2s
delay(2000);

// Arrêt des moteurs
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);

// Attente 1s
delay(1000);
}
Moteur double sens - L298

 

Programme 2 : Faire tourner les moteurs à différentes vitesses.

Il est possible de faire varier la vitesse de rotation des moteurs. Il faut donc utiliser des sorties PWM.

La variation de vitesse du moteur est gérée par la commande analogwrite.
La valeur qui est donnée ici par défaut est « 100 ». Cette valeur peut varier entre 0 et 255.

– 0 représente l’arrêt du moteur
– 255 la vitesse maximale du moteur.

// Moteur 1
int IN1 = 5;
int IN2 = 6;

// Moteur 2
int IN3 = 10;
int IN4 = 11;

void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void loop() {
// Marche Avant
analogWrite(IN1, 100);
digitalWrite(IN2, 0);

analogWrite(IN3, 100);
digitalWrite(IN4, 0);

// Attente 2s
delay(2000);

// Arrêt des moteurs
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);

// Attente 1s
delay(1000);

// Marche arrière
digitalWrite(IN1, 0);
analogWrite(IN2, 100);
digitalWrite(IN3, 0);
analogWrite(IN4, 100);

// Attente 2s
delay(2000);

// Arrêt des moteurs
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);

// Attente 1s
delay(1000);
}
Gérer vitesse rotation des moteurs - L298

17 commentaires

  1. Bonjour.
    Je me demandais, est-il possible de contrôler deux moteur de calibre différents simultanément avec le module? C’est à dire un moteur 12V et moteur 5V par exemple.

    1. Je ne pense pas, car le module possède une seule alimentation… Il est déconseillé d’alimenter du coup ton moteur de 5V en 12V…

      Après, il est possible de moduler le signal vers le moteur de 5V à l’aide de la commande analogwrite…
      Imaginons que pour 12V, nous envoyons la valeur 255… Pour obtenir 5V en sortie, il faut utiliser la valeur 106 :

      // Marche Avant
      analogWrite(Moteur_5V, 106);
      digitalWrite(Moteur_5V, 0);

  2. Bonjour je souhaite commander deux moteurs 12vDC dans les deux sens de rotation :
    Moteur 1 fonctionne dans le sens de rotation normal pendant 3 sec avec en même temps le moteur 2 fonctionne dans le sens de rotation inverse pendant 3 sec

    Est-ce possible avec le motorshield arduino L298P ?
    Merci

  3. J’ai plug le motor shield L298P sur ma carte arduino UNO, j’ai mis une alimentation 12vDC 4A et j’arrive à faire tourner mes moteurs. Je ne sais en revanche inverser le sens des moteurs.
    Pouvez-vous m’aider ?
    Merci d’avance

    1. // Pour M1 en marche avant
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);

      // Pour M2 en marche arrière :
      digitalWrite(IN3, 0);
      digitalWrite(IN4, 1);

  4. J’ai plug le motor shield L298P sur ma arduino UNO, j’ai mis une alimentation 12vDC 4A sur le motor shield et j’arrive à faire tourner les moteurs dans un sens mais je n’arrive pas à changer le sens de rotation.
    Pouvez-vous m’aider svp ?
    Merci d’avance.

Rejoignez la conversation

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.