Moteur pas à pas ESP8266 NodeMCU (pilote 28BYJ-48 et ULN2003)

Moteur pas à pas ESP8266 NodeMCU (pilote 28BYJ-48 et ULN2003)

Dans ce guide, vous apprendrez à contrôler un moteur pas à pas avec la carte ESP8266 NodeMCU. Nous utiliserons le moteur pas à pas unipolaire 28BYJ-48 avec le pilote de moteur ULN2003. Nous allons programmer la carte ESP8266 en utilisant Arduino IDE.

ESP8266 NodeMCU avec moteur pas à pas 28BYJ-48 et pilote de moteur ULN2003 Arduino IDE

Nous avons un tutoriel similaire pour la carte ESP32 : ESP32 avec moteur pas à pas (28BYJ-48 et ULN2003 Motor Driver)

Pièces requises

Pour suivre ce tutoriel, vous avez besoin des pièces suivantes :

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

Moteur pas a pas ESP8266 NodeMCU pilote 28BYJ 48 et ULN2003

Présentation des moteurs pas à pas

Un moteur pas à pas est un moteur électrique à courant continu sans balais qui divise une rotation complète en plusieurs étapes. Il se déplace pas à pas, et chaque pas a la même taille. Cela nous permet de faire pivoter le moteur d’un angle précis jusqu’à une position précise. Le moteur pas à pas peut tourner dans le sens horaire ou antihoraire.

L’image suivante montre deux moteurs pas à pas 28BYJ-48.

Moteurs pas à pas 28BYJ-48

Les moteurs pas à pas sont constitués de bobines internes qui font bouger l’arbre du moteur pas à pas dans un sens ou dans l’autre lorsque le courant est appliqué aux bobines d’une manière spécifique.

Il existe deux types de moteurs pas à pas : les moteurs pas à pas unipolaires et bipolaires.

Dans cet article, nous ne détaillerons pas comment sont fabriqués les moteurs pas à pas et comment ils fonctionnent en interne. Pour en savoir plus sur leur fonctionnement et les différences entre chaque type de moteur pas à pas, nous vous recommandons de lire cet article du Blog DroneBotWorkshop.

Moteur pas à pas 28BYJ-48

Il existe plusieurs moteurs pas à pas avec des spécifications différentes. Ce didacticiel couvrira les applications largement utilisées Moteur pas à pas unipolaire 28BYJ-48 avec le Pilote de moteur ULN2003.

28BYJ-48 connecté au module ULN2003 Motor Driver 01

Caractéristiques du moteur pas à pas 28BYJ-48

Caractéristiques du moteur pas à pas (pour plus de détails, consultez la fiche technique) :

  • Tension nominale : 5 V CC
  • Nombre de phases : 4
  • Rapport de variation de vitesse : 1/64
  • Angle de foulée : 5.625º/64
  • Fréquence : 100 Hz

Le moteur pas à pas 28BYJ-48 a un total de quatre bobines. Une extrémité des bobines est connectée à 5V, ce qui correspond au fil rouge du moteur. L’autre extrémité des bobines correspond aux fils de couleur bleu, rose, jaune et orange. L’excitation des bobines dans une séquence logique fait bouger le moteur d’un pas dans un sens ou dans l’autre.

Bobines de moteur pas à pas 28BYJ-48

Le moteur pas à pas 28BYJ-48 a un angle de foulée de 5,625°/64 en mode demi-pas. Cela signifie que le moteur a un angle de pas de 5,625º—il a donc besoin de 360º/5,625º = 64 pas en mode demi-pas. En mode pas à pas : 64/2 = 32 pas pour effectuer une rotation.

Cependant, l’arbre de sortie est entraîné via un rapport de transmission de 64:1. Cela signifie que l’arbre (visible à l’extérieur du moteur) terminera sa rotation si le moteur à l’intérieur tourne 64 fois. Cela signifie que le moteur devra se déplacer de 32 × 64 = 2048 pas pour que l’arbre effectue une rotation complète. Cela signifie que vous aurez une précision de 360º/2048 pas = 0,18º/pas.

Donc, en résumé :

  • Nombre total de pas par tour = 2048 pas
  • Angle de pas = 0,18º/pas

Si vous utilisez un moteur pas à pas différent, veuillez consulter la fiche technique.

Pilote de moteur ULN2003

Pour interfacer le moteur pas à pas avec la carte ESP8266 NodeMCU, nous utiliserons le pilote de moteur ULN2003, comme indiqué dans la figure ci-dessous. Le moteur pas à pas 28BYJ-48 est souvent vendu avec le pilote de moteur ULN2003.

Carte de module ULN2003 Motor Driver 01

Le module est livré avec un connecteur qui permet de connecter facilement et simplement le moteur au module. Il a quatre broches d’entrée pour contrôler les bobines qui font bouger le moteur pas à pas. Les quatre LED fournissent une interface visuelle de l’état des bobines.

Étiquettes de pilote de moteur ULN2003

Il y a des broches à connecter VCC et GND, et un capuchon de cavalier qui agit comme un interrupteur marche/arrêt pour alimenter le moteur pas à pas. Si vous retirez le cavalier, aucune alimentation n’atteint le moteur. Vous pouvez utiliser ces broches pour câbler un commutateur physique.

Brochage du pilote de moteur ULN2003

Le tableau suivant montre le brochage du module :

EN 1 Contrôler le moteur: connectez-vous à une broche numérique du microcontrôleur
EN 2 Contrôler le moteur: connectez-vous à une broche numérique du microcontrôleur
IN3 Contrôler le moteur: connectez-vous à une broche numérique du microcontrôleur
IN4 Contrôler le moteur: connectez-vous à une broche numérique du microcontrôleur
VCC Alimente le moteur
GND GND commun
Connecteur moteur Branchez le connecteur du moteur

Câbler le moteur pas à pas à la carte ESP8266

Dans cette section, nous allons connecter le moteur pas à pas à l’ESP8266 via le pilote de moteur ULN2003.

Nous allons connecter IN1, IN2, IN3 et IN4 aux GPIO 5, 4, 14, et 12. Vous pouvez utiliser n’importe quelle autre broche numérique appropriée (consultez notre guide de référence du brochage ESP8266).

Vous pouvez suivre le schéma suivant.

ESP8266 avec moteur pas à pas 28BYJ-48 et câblage schématique ULN2003A

Noter: Vous devez alimenter le pilote du moteur à l’aide d’une alimentation externe 5V.

Pilote de moteur ESP8266
EN 1 GPIO 5
EN 2 GPIO 4
IN3 GPIO 14
IN4 GPIO 12

Installation de la bibliothèque AccelStepper

Il existe différentes manières de contrôler les moteurs pas à pas avec un microcontrôleur. Pour contrôler le moteur pas à pas avec l’ESP8266, nous utiliserons le AccelStepper bibliothèque. Cette bibliothèque vous permet de déplacer facilement le moteur d’un nombre défini de pas, de définir sa vitesse, son accélération et bien plus encore.

La bibliothèque a une excellente documentation expliquant comment utiliser ses méthodes. Tu peux le vérifier ici.

Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino.

  1. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques…
  2. Recherchez « accelstepper ».
  3. Installez la bibliothèque AccelStepper de Mike McCauley. Nous utilisons la version 1.61.0.
Installer la bibliothèque AccelStepper Arduino IDE

Contrôler le moteur pas à pas avec l’ESP8266 – Code

Copiez le code suivant dans votre IDE Arduino. Dans cet exemple, le moteur effectuera une rotation dans le sens des aiguilles d’une montre et une rotation dans le sens inverse des aiguilles d’une montre encore et encore.

/*
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-nodemcu-stepper-motor-28byj-48-uln2003/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
  
  Based on Stepper Motor Control - one revolution by Tom Igoe
*/

#include <AccelStepper.h>

const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution

// ULN2003 Motor Driver Pins
#define IN1 5
#define IN2 4
#define IN3 14
#define IN4 12

// initialize the stepper library
AccelStepper stepper(AccelStepper::HALF4WIRE, IN1, IN3, IN2, IN4);

void setup() {
  // initialize the serial port
  Serial.begin(115200);
  
  // set the speed and acceleration
  stepper.setMaxSpeed(500);
  stepper.setAcceleration(100);
  // set target position
  stepper.moveTo(stepsPerRevolution);
}

void loop() {
  // check current stepper motor position to invert direction
  if (stepper.distanceToGo() == 0){
    stepper.moveTo(-stepper.currentPosition());
    Serial.println("Changing direction");
  }
  // move the stepper motor (one step at a time)
  stepper.run();
}

Afficher le code brut

Nous avons adapté ce croquis à partir des exemples fournis par la bibliothèque (Déposer > Exemples > AccelStepper > Rebondir).

Comment fonctionne le code

Tout d’abord, incluez le AccelStepper.h bibliothèque.

#include <AccelStepper.h>

Définissez les pas par tour de votre moteur pas à pas, dans notre cas, il s’agit de 2048 :

const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution

Définissez les broches d’entrée du moteur. Dans cet exemple, nous nous connectons aux GPIO 5, 4, 14 et 12, mais vous pouvez utiliser n’importe quel autre GPIO approprié.

#define IN1 5
#define IN2 4
#define IN3 14
#define IN4 12

Initialiser une instance de la bibliothèque AccelStepper appelée pas à pas. Passer en arguments : AccelStepper::HALF4WIRE pour indiquer que nous contrôlons le moteur pas à pas avec quatre fils et les broches d’entrée. Dans le cas du moteur pas à pas 28BYJ-48, l’ordre des broches est EN 1, IN3, EN 2, IN4-cela peut être différent pour votre moteur.

AccelStepper stepper(AccelStepper::HALF4WIRE, IN1, IN3, IN2, IN4);

Dans le mettre en place(), initialisez le moniteur série à un débit en bauds de 115 200.

Serial.begin(115200);

Réglez la vitesse maximale du moteur pas à pas à l’aide de la setMaxSpeed() méthode. Passez en argument la vitesse en pas par seconde.

stepper.setMaxSpeed(500);

Comme mentionné dans la documentation, le setMaxSpeed() La méthode définit la vitesse maximale autorisée. le Cours() fonction accélérera jusqu’à la vitesse définie par cette fonction.

Réglez l’accélération à l’aide de la setAcceleration() méthode. Passer en argument l’accélération en pas par seconde par seconde.

stepper.setAcceleration(100);

Ensuite, utilisez le déménager à() méthode pour définir une position cible. Puis le Cours() La fonction essaiera de déplacer le moteur (au plus un pas par appel) de la position actuelle à la position cible définie par l’appel le plus récent à cette fonction. Nous fixons la position cible à 2048 (ce qui est un tour complet dans le cas de ce moteur).

stepper.moveTo(stepsPerRevolution);

Dans le boucler(), nous allons faire tourner le moteur pas à pas dans le sens horaire et antihoraire.

Tout d’abord, nous vérifions si le moteur a déjà atteint sa position cible. Pour ce faire, nous pouvons utiliser le distanceToGo() fonction qui renvoie les pas de la position actuelle à la position cible.

Lorsque le moteur atteint sa position cible, cela signifie que le distanceToGo() la fonction reviendra 0 et l’instruction if suivante sera vraie.

if (stepper.distanceToGo() == 0){

Lorsque le moteur atteint sa position cible, nous définissons une nouvelle position cible, qui est la même que la position actuelle mais dans la direction opposée.

stepper.moveTo(-stepper.currentPosition());

Enfin, appelez stepper.run() pour déplacer le moteur pas à pas dans le boucler().

stepper.run();

Voici une explication sur le Cours() méthode fournie par la documentation de la bibliothèque : Cours() La fonction interroge le moteur et le fait avancer si un pas est dû, mettant en œuvre des accélérations et des décélérations pour atteindre la position cible. Vous devez l’appeler aussi souvent que possible, mais au moins une fois par intervalle de temps de pas minimum, de préférence dans votre boucle principale. Notez que chaque appel à Cours() fera au plus un pas, et seulement quand un pas est dû, en fonction de la vitesse actuelle et du temps écoulé depuis le dernier pas ».

Manifestation

Téléchargez le code sur votre tableau. Après le téléchargement, le moteur effectuera une rotation dans le sens des aiguilles d’une montre et une rotation dans le sens inverse des aiguilles d’une montre encore et encore. Il démarre la rotation à une vitesse inférieure jusqu’à atteindre la vitesse souhaitée avant d’atteindre la position cible.

Vous pouvez regarder une démonstration vidéo rapide :

Conclusion

Ce tutoriel était un guide de démarrage pour les moteurs pas à pas avec l’ESP8266. Les moteurs pas à pas se déplacent pas à pas et vous permettent de positionner l’arbre du moteur à un angle spécifique.

Dans un futur tutoriel, nous vous montrerons comment créer un serveur Web pour contrôler le moteur pas à pas à distance avec l’ESP8266. Alors restez à l’écoute.

Nous espérons que ce tutoriel vous sera utile.

En savoir plus sur l’ESP8266 avec nos ressources :

Merci d’avoir lu.

  • ICQUANZX 5 Ensembles 28BYJ-48 ULN2003 5V Moteur Pas à Pas + Carte Pilote ULN2003 pour Arduino
    Moteur pas à pas avec une interface standard, lorsqu'il est utilisé directement enfichable. Une LED à quatre phases A, B, C, D indique l'état du travail du moteur pas à pas. 5 lignes 4 phases peuvent être utilisées pour le pilote de puce ULN2003 ordinaire, connectez-vous à la phase 2, supportez la carte de développement Avec une utilisation pratique, connexion directe Taille de la carte du module d'entraînement (pouces): 1,37 * 1,18 * 0,6; Diamètre du moteur pas à pas: 1,06 (in); Lignes de moteur pas à pas: 9.45 (in)
  • Fasizi 28BYJ-48 ULN2003 Moteur Pas à Pas 5V + Carte Pilote ULN2003 pour Arduino - 5pcs
    Le moteur pas à pas est un type de dispositif électromagnétique qui se déplace par étapes discrètes. Cela a plusieurs bobines, l'arbre central a une série d'aimants montés dessus, et les bobines entourant l'arbre reçoivent alternativement du courant ou non, créant des champs magnétiques qui repoussent ou attirent les aimants sur l'arbre, provoquant la rotation du moteur. Ce moteur pas à pas unipolaire 28-BYJ48 est fourni avec cinq fils et quatre bobines. Les connexions centrales des bobines sont liées ensemble et généralement utilisées comme connexion d'alimentation. Ils sont nommés steppers unipolaires car la puissance arrive toujours sur ce pôle. Une LED quadriphasée A, B, C, D indique l'état du fonctionnement du moteur pas à pas.Moteur pas à pas avec une interface standard, lorsqu'il est utilisé directement enfichable.
  • Aihasd 3 pièces DC 5V Moteur pas à pas stepper motor 28BYJ-48 ULN2003 + 3 pièces ULN2003 Carte pilote pour Arduino
    Moteur pas à pas avec interface standard, peut être branché directement lors de l'utilisation. Les quatre LED (A, B, C, D) sur la carte pilote signalent l'état de fonctionnement actuel du moteur. Il existe également différents modèles CAO gratuits pour ce type de moteur qui peuvent être facilement imprimés avec une imprimante 3D, par exemple pour réaliser un support. 5 lignes 4 phases peuvent être utilisées pour un pilote de puce ULN2003 ordinaire, se connecter à 2 phases, prendre en charge la carte de développement avec une application pratique d'amarrage direct. Diamètre : 28 mm ; Tension : 5 V ; Taille : 31 x 35 mm ; Angle de pas : 5,625 x 1/64 ; Rapport de démultiplication : 1/64.