ESP8266 NodeMCU : moteur à courant continu et pilote L298N (Arduino IDE)

ESP8266 NodeMCU : moteur à courant continu et pilote L298N (Arduino IDE)

Apprenez à contrôler la direction et la vitesse d’un moteur à courant continu à l’aide d’une carte ESP8266 NodeMCU et du pilote de moteur L298N. Nous commencerons par expliquer le fonctionnement du pilote de moteur L298N. Ensuite, nous vous montrerons comment contrôler la vitesse et la direction d’un moteur à courant continu avec le pilote de moteur L298N à l’aide de l’ESP8266 programmé avec l’IDE Arduino.

ESP8266 NodeMCU avec moteur à courant continu et pilote de moteur L298N, contrôle de la vitesse et de la direction

Remarque : il existe de nombreuses façons de contrôler un moteur à courant continu. Nous utiliserons le pilote de moteur L298N. Ce didacticiel est également compatible avec des modules de commande de moteur similaires.

Table des matières

Ce didacticiel couvre les sujets suivants :

Utilisez-vous un ESP32 ? Suivez plutôt ce didacticiel : ESP32 avec moteur à courant continu et pilote de moteur L298N – Contrôle de la vitesse et de la direction.

Conditions préalables

Avant de continuer, assurez-vous de vérifier les prérequis suivants :

ESP8266 avec IDE Arduino

Nous allons programmer l’ESP8266 à l’aide de l’IDE Arduino. Assurez-vous donc que la carte ESP8266 est installée. Suivez le tutoriel suivant si ce n’est pas déjà fait :

Alternativement, vous pouvez également programmer l’ESP8266 à l’aide de VS Code et de l’extension platformIO :

Pièces requises

Pour réaliser ce didacticiel, vous avez besoin des pièces suivantes :

Moteur à courant continu de contrôle ESP8266 avec pilote de moteur L298N

Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

ESP8266 NodeMCU moteur a courant continu et pilote L298N Arduino

Présentation du pilote de moteur L298N

Il existe plusieurs façons de contrôler un moteur à courant continu. La méthode que nous utiliserons ici convient à la plupart des moteurs amateurs, qui nécessitent 6 V ou 12 V pour fonctionner.

Nous allons utiliser le pilote de moteur L298N qui peut gérer jusqu’à 3 A à 35 V. De plus, cela nous permet de piloter deux moteurs à courant continu simultanément, ce qui est parfait pour construire un robot. Si vous utilisez un autre pilote de moteur, ne vous inquiétez pas, la plupart de ces modules fonctionnent de la même manière et ont les mêmes broches d’entrée et de sortie.

Le pilote de moteur L298N est illustré dans la figure suivante :

Pilote de moteur 298N

Brochage du pilote de moteur L298N

Jetons un coup d’œil au brochage du pilote de moteur L298N et voyons comment il fonctionne.

Brochage du pilote de moteur L298N

Le pilote de moteur dispose d’un bornier à deux bornes de chaque côté pour chaque moteur. OUT1 et OUT2 à gauche et OUT3 et OUT4 à droite.

  • OUT1 : moteur à courant continu A + borne
  • OUT2 : Moteur à courant continu A – borne
  • OUT3 : moteur à courant continu B + borne
  • OUT4 : Moteur à courant continu B – borne

En bas, vous avez un bornier à trois bornes avec +12V, GND et +5V. Le bornier +12V sert à alimenter les moteurs. La borne +5V est utilisée pour alimenter la puce L298N. Cependant, si le cavalier est en place, la puce est alimentée par l’alimentation du moteur et vous n’avez pas besoin de fournir du 5 V via la borne +5 V.

Important : malgré le nom de la borne +12 V, vous pouvez fournir n’importe quelle tension comprise entre 5 V et 35 V (mais 6 V à 12 V est la plage recommandée).

Remarque : si vous fournissez plus de 12 V, vous devez retirer le cavalier et fournir 5 V à la borne +5 V.

Dans ce didacticiel, nous utiliserons 4 piles AA 1,5 V qui combinent une puissance d’environ 6 V, mais vous pouvez utiliser toute autre alimentation appropriée. Par exemple, vous pouvez utiliser une alimentation de banc pour tester ce tutoriel.

En résumé:

  • +12V : La borne +12V est l’endroit où vous devez connecter l’alimentation du moteur
  • GND: alimentation GND
  • +5V : fournir 5V si le cavalier est retiré. Agit comme une sortie 5 V si le cavalier est en place
  • Cavalier : cavalier en place – utilise l’alimentation du moteur pour alimenter la puce. Jumper retiré : vous devez fournir du 5V à la borne +5V. Si vous fournissez plus de 12 V, vous devez retirer le cavalier

En bas à droite, vous avez quatre broches d’entrée et deux bornes d’activation. Les broches d’entrée sont utilisées pour contrôler la direction de vos moteurs à courant continu et les broches d’activation sont utilisées pour contrôler la vitesse de chaque moteur.

  • IN1 : Entrée 1 pour le moteur A
  • IN2 : Entrée 2 pour le moteur A
  • IN3 : Entrée 1 pour le moteur B
  • IN4 : Entrée 2 pour le moteur B
  • EN1 : Activer la broche pour le moteur A
  • EN2 : Activer la broche pour le moteur B

Il y a des capuchons de cavalier sur les broches d’activation par défaut. Vous devez retirer ces capuchons de cavalier pour contrôler la vitesse de vos moteurs. Sinon, ils seront arrêtés ou tourneront à la vitesse maximale.

Contrôlez les moteurs à courant continu avec le pilote de moteur L298N

Maintenant que vous comprenez le fonctionnement du pilote de moteur, voyons comment l’utiliser pour contrôler un moteur à courant continu.

Activer les épingles

Les broches d’activation sont comme un interrupteur ON et OFF pour les moteurs. Par exemple:

  • Si vous envoyez un signal HIGH à la broche d’activation 1, le moteur A est prêt à être contrôlé et à la vitesse maximale ;
  • Si vous envoyez un signal BAS à la broche d’activation 1, le moteur A s’éteint ;
  • Si vous envoyez un signal PWM, vous pouvez contrôler la vitesse du moteur. La vitesse du moteur est proportionnelle au rapport cyclique. Cependant, notez que pour les petits cycles de service, les moteurs peuvent ne pas tourner et émettre un bourdonnement continu.
SIGNAL SUR LA PIN D’ACTIVATION ÉTAT DU MOTEUR
HAUT Moteur activé
FAIBLE Moteur non activé
MLI Moteur activé : vitesse proportionnelle au rapport cyclique

Broches d’entrée

Les broches d’entrée contrôlent la direction dans laquelle les moteurs tournent. Entrée 1 et entrée 2 du moteur de commande A et entrées 3 et 4 du moteur de commande B.

  • Si vous appliquez LOW à l’entrée 1 et HIGH à l’entrée 2, le moteur tournera vers l’avant ;
  • Si vous appliquez l’alimentation dans l’autre sens : HIGH à l’entrée 1 et LOW à l’entrée 2, le moteur tournera vers l’arrière. Le moteur B peut être contrôlé en utilisant la même méthode mais en appliquant HIGH ou LOW à l’entrée 3 et à l’entrée 4.

Par exemple, pour le moteur A, voici la logique :

Direction Entrée 1 Entrée 2 Activer 1
Avant 0 1 1
En arrière 1 0 1
Arrêt 0 0 0

Contrôler 2 moteurs à courant continu – idéal pour construire un robot

Si vous souhaitez construire une voiture robot en utilisant 2 moteurs à courant continu, ceux-ci doivent tourner dans des directions spécifiques pour faire avancer le robot, à gauche, à droite, en avant ou en arrière.

Par exemple, si vous souhaitez que votre robot avance, les deux moteurs doivent tourner vers l’avant. Pour le faire reculer, les deux doivent tourner vers l’arrière.

Pour faire tourner le robot dans une direction, vous devez faire tourner le moteur opposé plus rapidement. Par exemple, pour faire tourner le robot à droite, activez le moteur de gauche et désactivez celui de droite. Le tableau suivant montre les combinaisons d’état des broches d’entrée pour les directions du robot.

DIRECTION ENTRÉE 1 ENTRÉE 2 ENTRÉE 3 ENTRÉE 4
Avant 0 1 0 1
En arrière 1 0 1 0
Droite 0 1 0 0
Gauche 0 0 0 1
Arrêt 0 0 0 0

Lecture recommandée : Construire un kit de châssis de voiture robot pour ESP32, ESP8266, Arduino, etc…

Contrôler le moteur à courant continu avec ESP8266 NodeMCU – Vitesse et direction

Maintenant que vous savez comment fonctionne un pilote de moteur L298N et comment contrôler un moteur à courant continu, créons un exemple simple pour contrôler la vitesse et la direction d’un moteur à courant continu avec l’ESP8266.

Câblage d’un moteur à courant continu à l’ESP8266 (pilote de moteur L298N)

Le moteur que nous allons contrôler est connecté aux broches de sortie du moteur A, nous devons donc câbler les broches ENABLEA, INPUT1 et INPUT2 du pilote de moteur à l’ESP8266. Suivez le diagramme schématique suivant pour câbler le moteur à courant continu et le pilote de moteur L298N à la carte ESP8266 NodeMCU.

ESP8266 NodeMCU avec moteur à courant continu L298N Schéma schématique

Nous utilisons les GPIO du tableau suivant pour nous connecter au pilote du moteur. Vous pouvez utiliser n’importe quel autre GPIO approprié à condition de modifier le code en conséquence.

Pilote de moteur LN298N Entrée 1 Entrée 2 Activer GND
ESP8266 GPIO12 (D6) GPIO14 (D5) GPIO13 (D7) GND

Lecture recommandée : Référence de brochage ESP8266 : quelles broches GPIO devez-vous utiliser ?

Alimentation du pilote de moteur LN298N

Le moteur à courant continu nécessite une forte augmentation du courant pour se déplacer, les moteurs doivent donc être alimentés à l’aide d’une source d’alimentation externe. A titre d’exemple, nous utilisons 4 piles AA, mais vous pouvez utiliser n’importe quelle autre alimentation appropriée. Dans cette configuration, vous pouvez utiliser une alimentation comprise entre 6V et 12V.

Alimentation du pilote de moteur LN298N

Sur le diagramme schématique, l’interrupteur entre le support de batterie et le pilote du moteur est facultatif, mais il est pratique pour couper et appliquer l’alimentation. De cette façon, vous n’avez pas besoin de connecter puis de déconnecter constamment les fils pour économiser de l’énergie. Il existe également des supports de piles déjà livrés avec un bouton

Nous recommandons de souder un condensateur céramique de 0,1 uF aux bornes positives et négatives du moteur à courant continu, comme indiqué dans le schéma, pour aider à atténuer les pics de tension. (Remarque : les moteurs fonctionnent également sans condensateur.)

Câblage d'un moteur à courant continu au pilote de moteur L298N

Code : ESP8266 avec un moteur à courant continu – Contrôle de la vitesse et de la direction

Le code suivant contrôle la vitesse et la direction du moteur à courant continu. Ce code n’a peut-être pas d’application pratique dans le monde réel, mais constitue un excellent exemple pour comprendre comment contrôler la vitesse et la direction d’un moteur à courant continu avec l’ESP8266.

/*********
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-nodemcu-dc-motor-l298n-motor-driver-control-speed-direction/
*********/

// Motor A
int motor1Pin1 = 12; 
int motor1Pin2 = 14; 
int enable1Pin = 13; 

// Setting minimum duty cycle
int dutyCycle = 60;

void setup() {
  // sets the pins as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enable1Pin, OUTPUT);

  Serial.begin(115200);

  // testing
  Serial.print("Testing DC Motor...");
}

void loop() {

  //Apply power to spin at maximum speed
  digitalWrite(enable1Pin, HIGH);

  // Move the DC motor forward at maximum speed
  Serial.println("Moving Forward");
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH); 
  delay(2000);

  // Stop the DC motor
  Serial.println("Motor stopped");
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);
  delay(1000);

  // Move DC motor backwards at maximum speed
  Serial.println("Moving Backwards");
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW); 
  delay(2000);

  // Stop the DC motor
  Serial.println("Motor stopped");
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, LOW);
  delay(1000);

  // Move DC motor forward with increasing speed
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  while (dutyCycle <= 255){
    analogWrite(enable1Pin, dutyCycle);   
    Serial.print("Forward with duty cycle: ");
    Serial.println(dutyCycle);
    dutyCycle = dutyCycle + 5;
    delay(500);
  }
  dutyCycle = 60;
}

Afficher le code brut

Téléchargez le code sur votre ESP8266. Assurez-vous d’avoir sélectionné la bonne carte et le bon port COM.

Continuez à lire pour savoir comment fonctionne le code ou passez à la section de démonstration.

Déclaration des broches du moteur

Tout d’abord, vous définissez les GPIO connectés au pilote de moteur. Dans ce cas, l’entrée 1 du moteur A est connectée au GPIO 12, l’entrée 2 au GPIO 14 et la broche Enable au GPIO 13.

int motor1Pin1 = 12; 
int motor1Pin2 = 14; 
int enable1Pin = 13; 

Définition du cycle de service minimum

Nous contrôlerons la vitesse du moteur en ajustant le rapport cyclique du signal PWM. Nous fixerons le cycle de service minimum à 60 car pour des valeurs plus petites, le moteur ne bougera pas et émettra un bourdonnement étrange.

int dutyCycle = 60;

installation()

Dans setup(), vous commencez par définir les broches du moteur comme sorties.

pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);

Nous initialisons le Serial Monitor à des fins de débogage :

Serial.begin(115200);

Faire avancer le moteur à courant continu

Dans la boucle(), c’est là que le moteur se déplace. Le code est bien commenté sur ce que fait chaque partie du code.

Pour alimenter les moteurs et les déplacer à la vitesse maximale, nous devons régler la broche d’activation sur HIGH.

digitalWrite(enable1Pin, HIGH);

Pour faire avancer le moteur, vous réglez la broche d’entrée 1 sur LOW et l’entrée 2 pint sur HIGH. Dans cet exemple, le moteur avance pendant 2 secondes (2 000 millisecondes).

// Move the DC motor forward at maximum speed
Serial.println("Moving Forward");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH); 
delay(2000);

Faire reculer le moteur à courant continu

Pour déplacer le moteur à courant continu vers l’arrière, vous appliquez l’alimentation aux broches d’entrée du moteur dans l’autre sens. HIGH à l’entrée 1 et LOW à l’entrée 2.

// Move DC motor backwards at maximum speed
Serial.println("Moving Backwards");
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW); 
delay(2000);

Arrêtez le moteur à courant continu

Pour arrêter le moteur à courant continu, vous pouvez soit régler la broche d’activation sur FAIBLE, soit régler les broches d’entrée 1 et d’entrée 2 sur FAIBLE. Dans cet exemple, nous définissons les deux broches d’entrée sur LOW.

// Stop the DC motor
Serial.println("Motor stopped");
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
delay(1000);

Contrôler la vitesse du moteur à courant continu

Pour contrôler la vitesse du moteur à courant continu, nous devons modifier le cycle de service du signal PWM. Pour cela, vous utilisez la fonction analogWrite() qui accepte comme arguments la broche GPIO et le rapport cyclique, comme suit.

analogWrite(enable1Pin, dutyCycle);

Lecture recommandée : ESP8266 NodeMCU PWM avec Arduino IDE (sortie analogique)

Dans notre exemple, nous avons une boucle while qui augmente le rapport cyclique de 5 à chaque boucle.

// Move DC motor forward with increasing speed
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);

while (dutyCycle <= 255){
  analogWrite(enable1Pin, dutyCycle);   
  Serial.print("Forward with duty cycle: ");
  Serial.println(dutyCycle);
  dutyCycle = dutyCycle + 5;
  delay(500);
}

Lorsque la condition while n’est plus vraie, nous remettons le rapport cyclique à 60.

dutyCycle = 60;

Démonstration

Après avoir téléchargé le code sur l’ESP8266, mettez le pilote du moteur sous tension.

Contrôlez le moteur à courant continu avec le pilote de moteur ESP8266 et L298N

Le moteur commencera à tourner dans différentes directions et vitesses.

Contrôle du moteur à courant continu avec démonstration ESP8266

Conclusion

Dans ce didacticiel, nous vous avons montré comment contrôler la direction et la vitesse d’un moteur à courant continu à l’aide d’un ESP8266 et du pilote de moteur L298N. En résumé:

  • Pour contrôler la direction dans laquelle tourne le moteur à courant continu, vous utilisez les broches d’entrée 1 et d’entrée 2 ;
  • Appliquez LOW à l’entrée 1 et HIGH à l’entrée 2 pour faire tourner le moteur vers l’avant. Appliquez de la puissance dans l’autre sens pour le faire tourner vers l’arrière ;
  • Pour contrôler la vitesse du moteur à courant continu, vous envoyez un signal PWM à la broche d’activation. La vitesse du moteur à courant continu est proportionnelle au rapport cyclique.

Nous espérons que vous avez trouvé ce tutoriel utile.

Apprenez-en davantage sur l’ESP8266 grâce à nos ressources :

Merci d’avoir lu.

Apprenez l’histoire de Raspberry Pi à travers cette vidéo :

YouTube video

  • Create idea 10 Pièces Mini Module de Pilote de Moteur à Courant Continu à 2 Voies L298N Régulation de Vitesse PWM pour Voiture Intelligente Jouet Robot 24.7x25mm Alimenté par Batterie
  • DIYables L298N Module pilote moteur pour Arduino, ESP32, ESP8266, Raspberry Pi, 4 pièces