nous allons découvrir des utilisations simples du moteur pas a pas 28BYJ-48 couplé au driver ULN2003.
le moteur pas a pas 28BYJ-48 est un petit moteur a cout très bas permettant de réaliser des fonctions de positionnement précis en rotation ou tourner a des vitesses très précises .
ses principals caracteristiques sont les suivantes:
Rated voltage :5VDC
Number of Phase 4
Speed Variation Ratio 1/64
Stride Angle 5.625° /64
Frequency 100Hz
DC resistance 50Ω±7%(25°C)
In-traction Torque >34.3mN.m(120Hz)
Self-positioning Torque >34.3mN.m Friction torque
Insulated electricity power 600VAC/1mA/1s



premier Montage: basé sur composants du KIT ELEGOO starter KIT UNO R3, il va permetre de tester une fonction simple de rotation continue a raison d’un pas toutes les 50 millisecondes.

pour commencer , un programme qui n’utilise pas de bibliotheque . le principe est d’envoyer sur chaque fil de phase une sequence de signal hauts dans l’ordre du diagramme de fonctionnement en demi pas donné plus haut :
#define A 10 // variables définissant chaque broche digitale
#define A_bar 12
#define B 11
#define B_bar 13
#define x 50 // delai de pause apres chaque cycle d'impulsion
void setup() {
pinMode(A, OUTPUT);
pinMode(A_bar, OUTPUT);
pinMode(B, OUTPUT);
pinMode(B_bar, OUTPUT);
}
void loop() {
digitalWrite(A, HIGH);
digitalWrite(A_bar, LOW);
digitalWrite(B, LOW);
digitalWrite(B_bar, LOW);
delay (x);
digitalWrite(A, HIGH);
digitalWrite(A_bar, LOW);
digitalWrite(B, HIGH);
digitalWrite(B_bar, LOW);
delay (x);
digitalWrite(A, LOW);
digitalWrite(A_bar, LOW);
digitalWrite(B, HIGH);
digitalWrite(B_bar, LOW);
delay (x);
digitalWrite(A, LOW);
digitalWrite(A_bar, HIGH);
digitalWrite(B, HIGH);
digitalWrite(B_bar, LOW);
delay (x);
digitalWrite(A, LOW);
digitalWrite(A_bar, HIGH);
digitalWrite(B, LOW);
digitalWrite(B_bar, LOW);
delay (x);
digitalWrite(A, LOW);
digitalWrite(A_bar, HIGH);
digitalWrite(B, LOW);
digitalWrite(B_bar, HIGH);
delay (x);
digitalWrite(A, LOW);
digitalWrite(A_bar, LOW);
digitalWrite(B, LOW);
digitalWrite(B_bar, HIGH);
delay (x);
digitalWrite(A, HIGH);
digitalWrite(A_bar, LOW);
digitalWrite(B, LOW);
digitalWrite(B_bar, HIGH);
delay (x);
}
ci dessous video youtube de la motorisation d’une monture équatoriale fait sur la base de ce principe mais en tournant en pas entiers.
deuxieme programme qui utilise la bibliotheque « stepper.h » . ici on va faire un tour dans un sens puis un tour dans l’autre sens
#include <Stepper.h>
const int stepsPerRevolution = 2048; // nbre de pas du moteur
// definition des broche de connexion
Stepper myStepper(stepsPerRevolution, 10, 12, 11, 13);
void setup() {
// definition de la vitesse de rotation( 5 tr/mn)
myStepper.setSpeed(5);
}
void loop() {
// rotation sens horaire
myStepper.step(stepsPerRevolution);
delay(500);
// rotation sens antihoraire (signe moins devant la variable)
myStepper.step(-stepsPerRevolution);
delay(500);
}
CABLAGE SUIVANT: nous allons brancher un joystick ( KIT ELEGOO) sur l’entrée Analogique A0 et utiliser l’axe X du joystick pour commander la rotation dans un sens ou dans l’autre du moteur pas a pas . sur cette base on peut rajouter un deuxieme moteur pas a pas et raccorder la sortie Y du joystick sur la broche A1 pour commander ce deuxieme moteur avec le même joystick.

voici le programme qui va avec le montage: telecharger le programme dans l’arduino et manipuler le joystick de gauche a droite , vous verrez tourner le moteur dans le sens associé au mouvement du joystick. on ulise une fonction map() qui transforme la plage 0-1023 analogique en plage -100-100 qui permet d’obtenir le sens de rotation ( horaire si >0 et antihoraire si <0 ). 2 fonctions if sont incluse dans le programme pour créer un point mort entre les valeurs -10 et 10 ( moteur fixe quand joystick relaché).
#include <Stepper.h>
int stepsPerRevolution = 2048;
int joypin = 0;
int val;
Stepper myStepper(stepsPerRevolution, 10, 12, 11, 13);
void setup() {
myStepper.setSpeed(8);
}
void loop() {
val = map(analogRead(joypin), 0, 1023, -100, 100);
if (val<-10) {
myStepper.step(val);
}
if (val>10) {
myStepper.step(val);
}

