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); }