ESP32 S3 - Moteur pas à pas 28BYJ-48 avec driver ULN2003

Découvrez comment contrôler le moteur pas à pas 28BYJ-48 à l'aide de l'ESP32 S3 et du module driver ULN2003 pour un contrôle de position précis dans vos projets Arduino. Ce tutoriel vous montre comment câbler, programmer et contrôler un ou plusieurs moteurs pas à pas avec des exemples de code simples.

Ce que vous allez construire :

  1. Un seul moteur pas à pas 28BYJ-48 contrôlé par l'ESP32 S3 via le driver ULN2003
  2. Des motifs de rotation horaire et antihoraire à l'aide de la bibliothèque AccelStepper
  3. Un contrôle de moteur fluide et non bloquant qui permet à votre ESP32 S3 d'effectuer d'autres tâches en même temps
  4. Une configuration à deux moteurs avec un contrôle indépendant de la vitesse et de la direction
ESP32 S3 ULN2003 28BYJ-48 stepper motor

Pourquoi utiliser des moteurs pas à pas avec l'ESP32 S3 :

À propos du moteur pas à pas 28BYJ-48

Le 28BYJ-48 est un petit moteur pas à pas unipolaire qui offre un contrôle de position précis grâce à une rotation par pas. Sa réduction d'engrenage intégrée et son faible coût en font l'un des moteurs les plus populaires pour les projets Arduino et ESP32 S3 débutants. Associé au driver ULN2003, il est facile à câbler et à contrôler avec seulement quelques broches GPIO.

Spécifications clés

  • Angle de pas : 11,25 degrés en mode pas complet (32 pas par tour)
  • Rapport de réduction : jeu d'engrenages de réduction 1/64 inclus
  • Nombre total de pas : 2048 pas par tour complet (32 × 64)
  • Précision de pas : environ 0,1758 degré par pas (360°/2048)
  • Tension de fonctionnement : 5V CC
  • Interface : connecteur 5 broches qui se branche directement sur le driver ULN2003
  • Couple : couple faible à moyen adapté aux applications légères
  • Coût : très abordable pour les débutants qui apprennent le contrôle des moteurs pas à pas

Important : lorsque vous utilisez le moteur pas à pas 28BYJ-48 en mode pas complet, il nécessite 2048 pas pour effectuer un tour complet.

Brochage du moteur pas à pas 28BYJ-48

Le moteur pas à pas 28BYJ-48 possède un connecteur 5 broches qui se branche directement sur le module driver ULN2003 - aucun câblage individuel des broches n'est nécessaire côté moteur.

  1. Broches 1-5 : connexions internes des bobines du moteur
  2. Connecteur : connecteur mâle 5 broches qui se branche sur le driver ULN2003

Remarque : vous n'avez pas besoin de vous soucier des connexions de broches individuelles - branchez simplement le connecteur du moteur directement dans la prise du module driver ULN2003.

28BYJ-48 stepper motor

À propos du module driver de moteur pas à pas ULN2003

Le ULN2003 est un module driver populaire et facile à utiliser, spécialement conçu pour contrôler des moteurs pas à pas avec des cartes Arduino et ESP32. Il reçoit quatre signaux de contrôle basse intensité provenant de l'ESP32 S3 et commute l'alimentation à plus forte intensité des bobines du moteur, protégeant ainsi votre microcontrôleur contre les dommages. Des LED intégrées offrent un indicateur visuel utile des bobines alimentées pendant que le moteur avance pas à pas.

Spécifications clés

  • 4 entrées de contrôle : IN1, IN2, IN3, IN4 pour les signaux de contrôle du moteur
  • Indicateurs LED : quatre LED intégrées affichent l'activité de pas en temps réel
  • Contrôle d'alimentation : cavalier ON/OFF pour une gestion facile de l'alimentation du moteur
  • Alimentation : entrée d'alimentation séparée (5V-12V) pour le moteur pas à pas
  • Câblage facile : connecteur enfichable direct pour le moteur 28BYJ-48
  • Protection : protection intégrée pour votre microcontrôleur
  • Facile pour les débutants : simple à câbler et à programmer

Brochage du driver ULN2003

Le module ULN2003 possède 6 broches et un connecteur femelle pour un contrôle facile du moteur pas à pas.

ULN2003 Stepper Motor Driver Pinout
  1. IN1 : broche d'entrée de contrôle 1 - se connecte à une broche numérique de l'ESP32 S3
  2. IN2 : broche d'entrée de contrôle 2 - se connecte à une broche numérique de l'ESP32 S3
  3. IN3 : broche d'entrée de contrôle 3 - se connecte à une broche numérique de l'ESP32 S3
  4. IN4 : broche d'entrée de contrôle 4 - se connecte à une broche numérique de l'ESP32 S3
  5. GND : broche de masse - DOIT être connectée à la fois à la masse de l'ESP32 et à celle de l'alimentation externe
  6. VDD : entrée d'alimentation du moteur - se connecte à une source d'alimentation externe 5V
  7. Connecteur moteur : prise femelle où se branche le moteur 28BYJ-48

※ Note:

Remarques importantes sur l'alimentation pour le fonctionnement du moteur pas à pas :

  • Faites toujours correspondre la tension de l'alimentation externe aux spécifications de votre moteur
  • Le moteur pas à pas 28BYJ-48 nécessite une alimentation externe 5V CC
  • Ne connectez jamais la broche VDD à la broche 5V de l'ESP32 S3
  • Les moteurs pas à pas consomment un courant élevé qui peut endommager votre ESP32
  • Utilisez toujours une alimentation externe dédiée pour le moteur
  • Reliez toutes les masses ensemble (masse de l'ESP32, masse du driver, masse de l'alimentation)

Schéma de câblage

Connectez les quatre broches d'entrée du driver ULN2003 aux broches GPIO de l'ESP32 S3, puis branchez le connecteur du moteur 28BYJ-48 dans la prise femelle du driver. Utilisez toujours une alimentation externe dédiée 5V pour le moteur et partagez une masse commune entre l'ESP32 S3, le module driver et l'alimentation.

Consignes de sécurité

Ne connectez jamais la broche VDD du ULN2003 à la sortie 5V de l'ESP32 S3. Le moteur pas à pas consomme plus de courant que l'ESP32 S3 ne peut en fournir en toute sécurité, ce qui peut endommager la carte de façon permanente. Utilisez un adaptateur d'alimentation 5V dédié connecté directement aux broches VDD et GND du driver, avec la masse reliée également à la masse de l'ESP32 S3.

ESP32 S3 stepper motor ULN2003 driver Wiring Diagram

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Broche ULN2003 Broche ESP32 S3
IN1 GPIO8
IN2 GPIO9
IN3 GPIO10
IN4 GPIO20
GND GND
VDD Alimentation externe 5V
Connecteur moteur Connecteur moteur 28BYJ-48
Masse de l'alimentation GND (partagée avec l'ESP32 et l'ULN2003)

Remarque : la couleur des fils du moteur pas à pas 28BYJ-48 n'a pas d'importance - branchez simplement le connecteur mâle dans le connecteur femelle du module driver ULN2003.

Comment programmer le contrôle d'un moteur pas à pas

Comprendre les méthodes de contrôle des moteurs pas à pas vous aide à choisir la bonne approche pour votre projet ESP32 S3. La bibliothèque AccelStepper est le choix recommandé car elle fonctionne de manière non bloquante, permettant à votre ESP32 S3 d'effectuer d'autres tâches pendant que le moteur est en mouvement. Elle prend également en charge une accélération fluide et le contrôle simultané de plusieurs moteurs.

Trois principales méthodes de contrôle des moteurs pas à pas :

  • Pas complet : méthode de base, offre un couple complet, adaptée à la plupart des projets pour débutants
  • Demi-pas : double la résolution, mouvement plus fluide, couple légèrement réduit
  • Micro-pas : résolution la plus élevée, fonctionnement le plus fluide, nécessite des drivers spécialisés

Pourquoi nous recommandons la bibliothèque AccelStepper :

  • Fonctionnement non bloquant : l'ESP32 S3 peut effectuer d'autres tâches tout en contrôlant le moteur
  • Accélération fluide : les changements de vitesse progressifs évitent le calage du moteur
  • Support de plusieurs moteurs : contrôlez plusieurs moteurs pas à pas indépendamment et simultanément
  • Contrôle flexible : prend en charge les modes de pilotage en pas complet et en demi-pas
  • Facile à utiliser : fonctions simples pour les débutants

Pourquoi éviter la bibliothèque Stepper intégrée d'Arduino :

  • Bloquante : fige l'ESP32 pendant le fonctionnement du moteur
  • Fonctionnalités limitées : manque d'accélération et de contrôle avancé
  • Mauvais support multi-moteurs : ne peut pas contrôler plusieurs moteurs efficacement

Remarque : la bibliothèque AccelStepper ne prend pas en charge le pilotage en micro-pas, mais cela est rarement nécessaire pour les projets débutants.

Code ESP32 S3 - Un seul moteur pas à pas

Le code suivant montre comment contrôler un moteur pas à pas 28BYJ-48 à l'aide de l'ESP32 S3 et de la bibliothèque AccelStepper. Il configure le moteur avec le bon mappage de broches, puis exécute un motif répétitif de rotations horaires et antihoraires. La bibliothèque AccelStepper gère automatiquement l'accélération afin que le moteur démarre et s'arrête en douceur sans caler.

Ce que fait ce code de moteur pas à pas :

  • Initialise le moteur pas à pas avec les paramètres appropriés pour le 28BYJ-48
  • Effectue un tour complet dans le sens horaire
  • Effectue deux tours complets dans le sens antihoraire
  • Effectue deux tours complets dans le sens horaire
  • Répète ce motif en continu
  • Utilise l'accélération pour un mouvement fluide du moteur
/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-s3/esp32-s3-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, 8, 10, 9, 20); // ESP32 S3 pin: IN1=GPIO8, IN2=GPIO9, IN3=GPIO10, IN4=GPIO20 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

  1. Nouveau sur l'ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Installez la bibliothèque AccelStepper : ouvrez le gestionnaire de bibliothèques dans l'Arduino IDE, recherchez « AccelStepper » et installez la bibliothèque de Mike McCauley
  • Search for AccelStepper created by Mike McCauley and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Library Manager
Type:
All
Topic:
All
AccelStepper by Mike McCauley
Provides an object-oriented interface for 2, 3 or 4 pin stepper motors and motor drivers. More info
1.64
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32S3 Dev Module on COM15
1
  1. Câblez les composants : connectez le moteur pas à pas et le driver ULN2003 selon le schéma de câblage ci-dessus
  2. Connectez l'ESP32 : branchez votre ESP32 S3 à votre ordinateur avec un câble USB Type-C
  3. Sélectionnez la carte : choisissez « ESP32S3 Dev Module » et le bon port COM dans l'Arduino IDE
  4. Téléversez le code : copiez le code, collez-le dans l'Arduino IDE et cliquez sur Upload
  5. Observez le moteur : regardez le moteur pas à pas tourner selon le motif programmé (1 tour horaire, 2 tours antihoraires, 2 tours horaires, répétition)
  6. Ouvrez le Serial Monitor : consultez les messages d'état à un débit de 115200 bauds
  7. Astuce : ajustez les valeurs de setMaxSpeed() et setAcceleration() pour changer la vitesse et la fluidité du moteur - des valeurs plus faibles donnent des mouvements plus lents et plus fluides.

Sortie du Serial Monitor

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-01-15 09:12:03] Stepper motor test starting... [2026-01-15 09:12:03] Moving clockwise 1 revolution (2048 steps) [2026-01-15 09:12:08] Position: 2048 [2026-01-15 09:12:08] Moving counter-clockwise 2 revolutions (-4096 steps) [2026-01-15 09:12:18] Position: -4096 [2026-01-15 09:12:18] Moving clockwise 2 revolutions (4096 steps) [2026-01-15 09:12:28] Position: 0 [2026-01-15 09:12:28] Cycle complete!
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

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

Découvrez comment contrôler deux moteurs pas à pas ou plus, indépendamment et en même temps, à l'aide de l'ESP32 S3. Comme la bibliothèque AccelStepper est non bloquante, vous pouvez appeler run() sur chaque moteur à l'intérieur de la boucle principale, et ils avanceront tous les deux dans leurs pas simultanément sans interférer l'un avec l'autre.

Avantages du contrôle de plusieurs moteurs pas à pas :

  • Chaque moteur se déplace indépendamment avec des vitesses et des directions différentes
  • Idéal pour les projets de robotique nécessitant un mouvement coordonné
  • L'ESP32 dispose de suffisamment de broches pour contrôler facilement 2 à 3 moteurs pas à pas
  • La bibliothèque AccelStepper gère le contrôle simultané en douceur

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

Ce schéma montre comment connecter deux moteurs pas à pas à l'ESP32 S3 à l'aide de deux modules driver ULN2003.

ESP32 S3 two stepper motor ULN2003 driver Wiring Diagram

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Connexions de câblage pour deux moteurs pas à pas :

Composant Broche ESP32 S3
ULN2003 #1 - IN1 GPIO8
ULN2003 #1 - IN2 GPIO9
ULN2003 #1 - IN3 GPIO10
ULN2003 #1 - IN4 GPIO20
ULN2003 #2 - IN1 GPIO2
ULN2003 #2 - IN2 GPIO3
ULN2003 #2 - IN3 GPIO4
ULN2003 #2 - IN4 GPIO5
Masse des deux ULN2003 GND
VDD des deux ULN2003 Alimentation externe 5V
Masse de l'alimentation GND (partagée avec l'ESP32 et les deux drivers)

Remarque : les deux modules ULN2003 partagent la même alimentation externe 5V et une masse commune avec l'ESP32 S3.

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

Le code suivant montre le contrôle simultané de deux moteurs pas à pas avec des motifs de mouvement indépendants. Chaque moteur se voit attribuer sa propre instance AccelStepper afin que vous puissiez définir des vitesses, des accélérations et des positions cibles différentes pour chacun d'eux indépendamment.

Ce que fait ce code multi-moteurs pas à pas :

  • Contrôle deux moteurs pas à pas de manière totalement indépendante
  • Chaque moteur tourne à une vitesse différente
  • Les moteurs se déplacent dans des directions opposées
  • Démontre le fonctionnement non bloquant
  • Montre comment coordonner plusieurs moteurs dans un seul programme
/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-s3/esp32-s3-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, 8, 10, 9, 20); // ESP32 S3 pin: IN1=GPIO8, IN2=GPIO9, IN3=GPIO10, IN4=GPIO20 AccelStepper stepper_2(FULLSTEP, 2, 4, 3, 5); // ESP32 S3 pin: IN1=GPIO2, IN2=GPIO3, IN3=GPIO4, IN4=GPIO5 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()); }

Applications et idées de projets

La combinaison de l'ESP32 S3 et des moteurs pas à pas 28BYJ-48 ouvre un large éventail de projets d'automatisation, de robotique et de projets créatifs que vous pouvez réaliser à la maison ou en classe.

  1. Glissière de caméra : construisez un chariot de caméra automatisé pour des vidéos en accéléré fluides
  2. Traceur XY : créez un robot dessinateur qui trace des dessins sur papier
  3. Volets automatiques : contrôlez des volets de fenêtre avec un fonctionnement programmé ou à distance
  4. Mécanisme pan-tilt : fabriquez un support de caméra qui pivote horizontalement et verticalement
  5. Horloge analogique : concevez une grande horloge murale avec des aiguilles à moteur pas à pas précises
  6. Tapis roulant : construisez un petit système de tri ou de transport d'objets
  7. Traqueur solaire : créez un panneau qui suit le soleil tout au long de la journée
  8. Bras robotique : construisez un bras simple à 2-3 axes pour des tâches de préhension et de dépose

Vidéo du tutoriel

Regardez le tutoriel vidéo étape par étape pour ce projet ESP32 S3 ci-dessous.

...VIDEO https://www.youtube.com/watch?v=EXAMPLE_VIDEO_ID_HERE

...VIDEO

Défiez-vous

Ces exercices sont conçus pour renforcer votre confiance dans le contrôle des moteurs pas à pas sur l'ESP32 S3, en commençant par des modifications simples et en progressant vers des applications plus complexes et concrètes.

  1. Débutant : modifiez le code pour faire tourner le moteur de 5 tours complets dans le sens horaire, puis arrêtez-le
  2. Débutant : changez la vitesse du moteur en ajustant setMaxSpeed() pour qu'il tourne deux fois plus vite
  3. Intermédiaire : créez un motif où le moteur tourne de 45 degrés, fait une pause d'une seconde, puis recommence
  4. Intermédiaire : ajoutez un bouton-poussoir qui inverse le sens du moteur lorsqu'il est pressé
  5. Avancé : construisez une horloge simple avec deux moteurs pas à pas pour les aiguilles des heures et des minutes
  6. Avancé : créez un programme qui accepte les commandes du Serial Monitor pour contrôler la position du moteur (par exemple, « MOVE 1000 » ou « HOME »)

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !