Utiliser un moteur pas à pas avec Arduino
Vidéo tuto
Bonjour et bienvenu dans ce tuto où on va voir comment utiliser un moteur pas à pas avec la carte Arduino UNO, je vais utiliser le moteur “28byj-48” avec un pilote (Driver) ULN2003, le choix du moteur et le pilote est due de leurs popularités dans la communauté d’Arduino, on va donc voir comment les câbler et voir aussi quelques fonctions basiques afin que vous pouvez les intégrer facilement dans vos projets.
Les moteurs pas-à-pas sont disponibles sous différents formats, ci-dessous sont les plus populaires, l’un qu’on peut reconnaitre dans les imprimantes 3D, l’autres dans les projets électroniques amateurs/hobbysites.


Les moteurs pas à pas sont utilisés dans les applications où on souhaite contrôler la vitesses de rotation ainsi que la position avec précision, notamment des applications d’indexation ou positionnement.
Il y a plusieurs classifications de moteurs pas-à-pas: unipolaire/bipolaire, à aimant permanent/réluctance variable, nombre de pas par tour, réduction…. Veuillez lire ce document pour plus d’info (anglais).
Le moteur “28byj-48” est un moteur unipolaire, qui a une tension nominale de 5V, avec un nombre de pas par tour de 32, mais avec le réducteur à l’intérieur de 1/64, on aura 32*64 = 2048 pas . Vous pouvez trouver d’autres information dans la fiche technique du moteur.
Dans notre tuto on va utiliser le moteur avec un pilote ULN2003, le pilote sert à contrôler les bobines du moteur afin de réaliser un mouvement angulaire d’une vitesse et position précises.
Il y a plusieurs versions du pilote ULN2008, j’ai utilisé celle-là:

N.B:
- Le moteur pas-à-pas peut faire une rotation dans les deux sens.
- Peut faire une rotation continue, contrairement à quelque servo-moteurs populaires qui sont limités à un angle de 180° ou 360° non continue
- Le moteur pas-à-pas est souvent utilisé en boucle ouverte, ça veut dire qu’on positionne le moteur sans mesurer le résultat, par contre le servomoteur envoi une valeur de la position au contrôleur.
Schémas de câblage
Schéma 1:

Le schéma de câblage est simple:
- Pour brancher le moteur au pilote il y a un connecteur qui peut être branché d’un seule façon.
- Le pilote a 4 broches de contrôle : In1 à In4 sont branchés avec les broches (6-9-10-11)
- Dans le schéma ci-dessus j’ai alimenté le pilote par la carte Arduino elle-même, mais il est préférable d’utiliser une alimentation externe, juste assurez-vous de brancher la masse avec celle d’Arduino
Schéma 2: Ajout des boutons poussoirs
Les boutons sont branchés avec la masse, j’utilise les pull-up internes de l’Arduino.

Schéma 3: Ajout du potentiomètre pour contrôler la vitesse
Le potentiomètre contrôle la vitesse et non le mouvement, ce dernier et toujours contrôlé par les boutons poussoirs.
Librairie
Une librairie est nécessaire pour le fonctionnement du pilote: “Stepper” qui est déjà installé, sinon vous pouvez l’installer depuis l’IDE de l’Arduino.
Codes
Vous pouvez copier les codes ci-dessous ou bien les télécharger ici.
Code 1: Test de rotation angulaire avec pas précis
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* Ceci est un code pour utiliser un moteur pas à pas 28byj-48 avec un pilote ULN2008 Le moteur fait une rotation de 200 pas dans un sens avec une vitesse attend 1s puis 400 pas dans l'autre avec une autre valeur de vitesse Veuillez visiter https://surtrtech.com pour plus d'info */ #include <Stepper.h> //Librairie du moteur pas à pas #define Nombre_pas 2050 //Nombre de pas du moteur, vérifier la fiche technique de votre moteur Stepper MoteurPP(Nombre_pas,9,11,10,6); //Initialiser l'instance (on a nommé MoteurPP) et définir les broches utilisés par le pilote, vous pouvez les changer void setup() { MoteurPP.setSpeed(5); //Fonction pour définir la vitesse du moteur, vous pouvez aussi la modifier de puis la boucle "loop" } void loop() { MoteurPP.step(500); //Faire une rotation de 200 pas delay(1000); //Le délai est optionnel, on a pas besoin d'attendre le moteur, puisque la fonction "step()" bloque le code jusqu'à ce que le moteur s'arrête MoteurPP.setSpeed(10); MoteurPP.step(-1200); //Le (-) signifie "changer la direction" delay(1000); MoteurPP.setSpeed(5); } |
Code 2: Utilisation des boutons poussoirs
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Ceci est un code pour utiliser un moteur pas à pas 28byj-48 avec un pilote ULN2008 et deux boutons poussoirs * On appuie sur un bouton pour faire tourner le moteur dans un sens avec une vitesse définit * Veuillez visiter https://surtrtech.com pour plus d'info */ #include <Stepper.h> //Librairie du moteur pas à pas #define Nombre_pas 2050 //Nombre de pas du moteur, vérifier la fiche technique de votre moteur #define Bout_1 2 #define Bout_2 3 Stepper MoteurPP(Nombre_pas,9,11,10,6); //Initialiser l'instance (on a nommé MoteurPP) et définir les broches utilisés par le pilote, sinon vous pouvez les changer void setup() { MoteurPP.setSpeed(9); //Fonction pour définir la vitesse du moteur, vous pouvez aussi la modifier de puis la boucle "loop" pinMode(Bout_1, INPUT_PULLUP); //J'utilise le pullup interne, le bouton est branché avec la masse et la broche "D2", état de repos "HAUT" lorsque j'appuie devient "BAS" pinMode(Bout_2, INPUT_PULLUP); } void loop() { if(digitalRead(Bout_1)==LOW){ //On lit les états des boutons poussoirs, on tourne le moteur (dans un sens) si un bouton est appuyé MoteurPP.step(10); //On tourne 10 pas delay(5); } if(digitalRead(Bout_2)==LOW){ MoteurPP.step(-10); delay(5); } } |
Code 3: Contrôle de la vitesse par le potentiomètre
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* Ceci est un code à utiliser avec un moteur pas à pas 28byj-48, son un pilote ULN2008, deux boutons poussoirs et un potentiomètre * On appuie sur un bouton pour faire tourner le moteur dans un sens avec une vitesse définit * Veuillez visiter https://surtrtech.com pour plus d'info */ #include <Stepper.h> //Librairie du moteur pas à pas #define Nombre_pas 2050 //Nombre de pas du moteur, vérifier la fiche technique de votre moteur #define Bout_1 2 //Broches des deux boutons poussoirs #define Bout_2 3 #define Pot 0 //Broche du potentiomètre int vit=0; //Vitesse du moteur pas à pas Stepper MoteurPP(Nombre_pas,9,11,10,6); //Initialiser l'instance (on a nommé MoteurPP) et définir les broches utilisés par le pilote, sinon vous pouvez les changer void setup() { pinMode(Bout_1, INPUT_PULLUP); //J'utilise le pullup interne, le bouton est branché avec la masse et la broche "D2", état de repos "HAUT" lorsque j'appuie devient "BAS" pinMode(Bout_2, INPUT_PULLUP); pinMode(Pot,INPUT); } void loop() { vit=map(analogRead(Pot),0,1024,1,10); //"Vit" est la variable de la vitesse, on lit d'abord le potentiomètre qui a des valeurs qui vont de 0-1024 et on les ramène à 1-10, ce sont les vitesses que je peux utiliser avec mon moteur MoteurPP.setSpeed(vit); //On définit la vitesse qu'on va utiliser if(digitalRead(Bout_1)==LOW){ //On lit les états des boutons poussoirs, et soit on tourne dans le sens des aiguilles d'une montre ou bien à l'opposé MoteurPP.step(1); delay(5); } if(digitalRead(Bout_2)==LOW){ MoteurPP.step(-1); delay(5); } } |
Categories
Yassine View All
Automation and Electrical Engineer, Electronics amateur trying to share my little projects.


