ESP32 - Moteur pas à pas 28BYJ-48 avec pilote ULN2003

Dans ce tutoriel, nous aborderons les sujets suivants :

ESP32 ULN2003 28BYJ-48 moteur pas à pas

Les moteurs pas à pas excellent dans le contrôle précis de la position, car ils divisent une révolution complète en "pas" discrets. Ces moteurs trouvent des applications dans une large gamme d'appareils, incluant les imprimantes, les imprimantes 3D, les machines CNC et les systèmes d'automatisation industrielle.

Une méthode abordable pour mieux comprendre les moteurs pas à pas consiste à expérimenter avec des moteurs pas à pas 28BYJ-48. Ces moteurs sont généralement fournis avec des cartes de commande basées sur le ULN2003, ce qui simplifie grandement leur utilisation.

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×5V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du moteur pas à pas 28BYJ-48

Selon la fiche technique, le moteur 28BYJ-48, lorsqu'il fonctionne en mode pas complet, se déplace par incréments de 11,25 degrés, ce qui résulte en 32 pas par révolution complète (comme calculé : 360°/11,25° = 32).

De plus, le moteur intègre un ensemble de réduction de 1/64, augmentant ainsi efficacement son nombre de pas à 32 x 64, ce qui donne 2048 pas par révolution. Chacun de ces 2048 pas correspond à une rotation de 360°/2048, soit environ 0,1758 degrés par pas.

Conclusion : si le moteur effectue 2048 pas (en mode pas entier), le moteur effectue une révolution.

Brochage

Le moteur pas à pas 28BYJ-48 comprend 5 broches. Nous n'avons pas besoin de nous soucier des détails de ces broches. Il suffit de le brancher sur le connecteur du pilote de moteur ULN2003.

Moteur pas à pas 28BYJ-48

À propos du module de commande de moteur pas à pas ULN2003

Le ULN2003 se distingue comme un module de commande de moteur largement utilisé pour les moteurs pas à pas. Les principales caractéristiques du module incluent :

  • Quatre LED qui s'illuminent pour indiquer l'activité des quatre lignes d'entrée de contrôle, reflétant efficacement l'état actuel de pas du moteur. Ces LED ne remplissent pas seulement un rôle pratique, mais ajoutent également un élément visuel au processus de pas.
  • Un cavalier ON/OFF est intégré au module, permettant l'isolation de l'alimentation pour le moteur pas à pas connecté. Cette fonctionnalité offre un moyen pratique de contrôler l'alimentation du moteur, permettant une gestion efficace de l'énergie.

Brochage ULN2003

Brochage du pilote de moteur pas à pas ULN2003

Le module ULN2003 comprend 6 broches et un connecteur femelle :

  • Broche IN1 : est utilisée pour commander le moteur. Connectez-la à une broche de sortie sur ESP32.
  • Broche IN2 : est utilisée pour commander le moteur. Connectez-la à une broche de sortie sur ESP32.
  • Broche IN3 : est utilisée pour commander le moteur. Connectez-la à une broche de sortie sur ESP32.
  • Broche IN4 : est utilisée pour commander le moteur. Connectez-la à une broche de sortie sur ESP32.
  • Broche GND : est une broche de masse commune. Elle DOIT être connectée aux GNDs de l'ESP32 et de l'alimentation externe.
  • Broche VDD : fournit l'alimentation pour le moteur. Connectez-la à l'alimentation externe.
  • Connecteur du moteur : c'est ici que le moteur se branche.

※ NOTE THAT:

Lorsqu'il s'agit d'alimenter des moteurs pas à pas, il est important de suivre ces directives :

  • Assurez-vous que la tension de l'alimentation électrique externe correspond aux exigences de tension du moteur pas à pas. Par exemple, si votre moteur pas à pas fonctionne sous 12V DC, il est crucial d'utiliser une alimentation de 12V. Dans le cas du moteur pas à pas 28BYJ-48, qui fonctionne sous 5V DC, il est impératif d'utiliser une alimentation de 5V.
  • Il est important de noter que même si un moteur pas à pas est conçu pour fonctionner avec une alimentation de 5V, ne connectez PAS la broche VDD à la broche 5V de l'ESP32. Au lieu de cela, reliez la broche VDD à une source d'alimentation externe de 5V. Cette mesure de précaution est essentielle car les moteurs pas à pas peuvent consommer une quantité significative de puissance, qui pourrait dépasser les capacités de l'alimentation de l'ESP32, causant potentiellement des problèmes ou des dommages.

Diagramme de câblage

Schéma de câblage du pilote ULN2003 pour moteur pas à pas ESP32

This image is created using Fritzing. Click to enlarge image

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.

Veuillez noter que nous n'avons pas besoin de nous préoccuper de la couleur des fils du moteur pas à pas. Nous devons simplement brancher le connecteur mâle (sur le moteur pas à pas 28BYJ-48) au connecteur femelle (sur le pilote ULN2003).

Comment programmer pour contrôler un moteur pas à pas

Lorsqu'il s'agit de contrôler un moteur pas à pas, il existe trois méthodes principales :

  • Pas complet
  • Demi-pas
  • Micro-pas

Pour les applications de base, la méthode pas entier est souvent suffisante. Cependant, des explications détaillées des trois méthodes seront fournies dans la dernière partie de ce tutoriel. Il convient de noter que la programmation pour ces méthodes peut être complexe. La bonne nouvelle, c'est qu'il existe de nombreuses bibliothèques disponibles qui gèrent cette complexité pour nous. Tout ce que nous devons faire, c'est utiliser la bibliothèque appropriée, simplifiant ainsi le contrôle des moteurs pas à pas dans nos projets.

L'IDE Arduino inclut une bibliothèque Stepper intégrée, mais nous déconseillons de l'utiliser pour les raisons suivantes :

  • Nature bloquante : Cette bibliothèque fonctionne de manière bloquante, ce qui signifie qu'elle monopolise les ressources de l'ESP32, l'empêchant de réaliser d'autres tâches tout en contrôlant le moteur pas à pas.
  • Fonctionnalités limitées : La bibliothèque Stepper intégrée peut ne pas offrir toutes les fonctions et caractéristiques nécessaires pour votre projet.

Au lieu de cela, nous recommandons d'utiliser la bibliothèque AccelStepper. Cette bibliothèque offre plusieurs avantages, notamment :

  • Accélération et Décélération : Il permet une accélération et une décélération douces, permettant un contrôle plus précis.
  • Conduite en Pas complet et Demi-pas : Vous pouvez choisir entre les modes de conduite en pas complet et demi-pas pour votre moteur pas à pas.
  • Plusieurs moteurs pas à pas simultanés : AccelStepper permet de contrôler plusieurs moteurs pas à pas simultanément, chaque moteur se déplaçant de manière indépendante et concurrente.

Cependant, il est important de noter que la bibliothèque présente un inconvénient : elle ne prend pas en charge la commande de micro-pas.

Code ESP32

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Étapes rapides

  • Si c'est la première fois que vous utilisez un ESP32, consultez comment configurer l'environnement pour l'ESP32 sur Arduino IDE.
  • Réalisez le câblage comme sur l'image ci-dessus.
  • Connectez la carte ESP32 à votre PC via un câble micro USB.
  • Ouvrez Arduino IDE sur votre PC.
  • Sélectionnez la bonne carte ESP32 (par exemple, Module de développement ESP32) et le port COM.
  • Cliquez sur l'icône Libraries dans la barre latérale gauche de l'Arduino IDE.
  • Recherchez “AccelStepper”, puis trouvez la bibliothèque AccelStepper de Mike McCauley.
  • Cliquez sur le bouton Install pour installer la bibliothèque AccelStepper.
Bibliothèque AccelStepper ESP32
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur l'ESP32
  • Observez la rotation du moteur. Il devrait :
    • Effectuer une révolution dans le sens horaire, puis
    • Effectuer deux révolutions dans le sens antihoraire, puis
    • Effectuer deux révolutions dans le sens horaire.

    Ce processus est répété à l'infini.

    • Voyez le résultat dans le moniteur série.

Comment contrôler plusieurs moteurs pas à pas 28BYJ-48

Apprenons à contrôler deux moteurs pas à pas indépendamment en même temps.

Schéma de câblage pour deux moteurs pas à pas 28BYJ-48

Schéma de câblage du pilote ULN2003 pour deux moteurs pas à pas ESP32

This image is created using Fritzing. Click to enlarge image

Code ESP32 pour deux moteurs pas à pas 28BYJ-48

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 23, 22, 21, 19); AccelStepper stepper_2(FULLSTEP, 18, 5, 17, 16); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!