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

Dans ce tutoriel, nous couvrirons les sujets suivants :

Arduino Nano ESP32 ULN2003 moteur pas à pas 28BYJ-48

Les moteurs pas à pas excellent dans le contrôle précis de 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 comprendre les moteurs pas à pas consiste à expérimenter avec les moteurs pas à pas 28BYJ-48. Habituellement, ces moteurs sont fournis avec des cartes de commande basées sur le ULN2003, ce qui simplifie grandement leur utilisation.

Préparation du matériel

1×Arduino Nano ESP32
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) Screw Terminal Adapter for Arduino Nano

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 entier, avance par incréments de 11,25 degrés, ce qui donne 32 pas par révolution complète (calculé comme suit : 360°/11,25° = 32).

De plus, le moteur intègre un réducteur 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 pilotage de moteur pas à pas ULN2003

Le ULN2003 se distingue comme un module de commande de moteur largement utilisé pour les moteurs pas à pas. Les caractéristiques principales 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 servent pas seulement un but pratique mais ajoutent également un élément visuel au processus de pas.
  • Un cavalier marche/arrêt est intégré dans le module, permettant l'isolation de l'alimentation au 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 du 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 piloter le moteur. Connectez-la à une broche de sortie sur l'Arduino Nano ESP32.
  • Broche IN2 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur l'Arduino Nano ESP32.
  • Broche IN3 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur l'Arduino Nano ESP32.
  • Broche IN4 : est utilisée pour piloter le moteur. Connectez-la à une broche de sortie sur l'Arduino Nano ESP32.
  • Broche GND : est une broche de masse commune. Elle DOIT être connectée aux GND de l'Arduino Nano ESP32 et à 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 externe correspond aux exigences de tension du moteur pas à pas. Par exemple, si votre moteur pas à pas fonctionne sur du 12V DC, il est crucial d'utiliser une alimentation de 12V. Dans le cas du moteur pas à pas 28BYJ-48, qui fonctionne sur du 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 sur l'Arduino Nano 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 moteur pas à pas Arduino Nano ESP32 avec driver ULN2003

This image is created using Fritzing. Click to enlarge image

Veuillez noter que nous n'avons pas à nous soucier 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 complet est souvent suffisante. Cependant, des explications détaillées sur les 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 est qu'il existe de nombreuses bibliothèques disponibles qui gèrent cette complexité pour nous. Tout ce que nous avons à faire est d'utiliser la bibliothèque appropriée, simplifiant ainsi le contrôle des moteurs pas à pas dans nos projets.

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

  • Blocage de la nature : 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 pendant qu'elle contrôle le moteur pas à pas.
  • Fonctionnalités limitées : La bibliothèque Stepper intégrée peut ne pas fournir 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 prend en charge une accélération et une décélération douces, permettant un contrôle plus précis.
  • Conduite en Pas Entier et Demi-Pas : Vous pouvez choisir entre les modes de conduite en pas entier et en 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 concourante.

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

Code Arduino Nano ESP32

/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano-esp32/arduino-nano-esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(AccelStepper::FULL4WIRE, D11, D9, D10, D8); 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

Pour commencer avec l'Arduino Nano ESP32, suivez ces étapes :

  • Si vous êtes novice avec l'Arduino Nano ESP32, reportez-vous au tutoriel sur comment configurer l'environnement pour l'Arduino Nano ESP32 dans l'IDE Arduino.
  • Câblez les composants conformément au schéma fourni.
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Nano ESP32 et son port COM correspondant.
  • Ouvrez le gestionnaire de bibliothèques en cliquant sur l'icône Gestionnaire de bibliothèques dans la barre de navigation gauche de l'IDE Arduino.
  • 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 pour Arduino Nano 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 Arduino Nano 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 Arduino Nano ESP32 avec deux moteurs pas à pas et pilote ULN2003

This image is created using Fritzing. Click to enlarge image

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

/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano-esp32/arduino-nano-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 // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, D11, D9, D10, D8); AccelStepper stepper_2(FULLSTEP, D7, D5, D6, D4); 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!