Contrôle de moteur pas-à-pas par commande simplifiée
Le programme ci-dessous permet de contrôler un moteur pas-à-pas 28BYJ-48 avec un contrôleur ULN2003 de la manière la plus simple possible mais dans ce cas le moteur ne développera pas tout son couple :
int IN1 = 8; // pin digital 8 relié à IN1
int IN2 = 9; // pin digital 9 à IN2
int IN3 = 10; // pin digital 10 à IN3
int IN4 = 11; // pin digital 11 à IN4
int temps = 20; // temps entre les pas, minimum 10 ms.
void setup(){
// tous les pins se configurent comme sortiespinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop(){
// 512*4 = 2048 pas pour un tour completfor (int i = 0; i < 512; i++) {
digitalWrite(IN1, HIGH); // pas 1
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(temps);
digitalWrite(IN1, LOW); // pas 2
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(temps);
digitalWrite(IN1, LOW); // pas 3
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(temps);
digitalWrite(IN1, LOW); // pas 4
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(temps);
}
// pause de 5 secondesdigitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);
}
Ce programme peut être réduit en utilisant un tableau pour piloter les sorties du driver :
int IN1 = 8; // pin digital 8 relié à IN1
int IN2 = 9; // pin digital 9 à IN2
int IN3 = 10; // pin digital 10 à IN3
int IN4 = 11; // pin digital 11 à IN4
int temps = 20; // temps entre les pas, minimun 10 ms.
// Tableau bidimensionnel avec la séquence des pasint pas [4][4] = {
{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
void setup(){
// tous les pins se configurent comme sortiespinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop(){
// 512 cycles * 4 pas par cycle = 2048 pas par tour d'axe en sortie de réducteurfor (int i = 0; i < 512; i++){
// boucle qui lit le tableau ligne par lignefor (int i = 0; i < 4; i++){
digitalWrite(IN1, pas[i][0]);
digitalWrite(IN2, pas[i][1]);
digitalWrite(IN3, pas[i][2]);
digitalWrite(IN4, pas[i][3]);
delay(temps);
}
}
// pausedigitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(temps);
}
Dans ce cas, les bobines sont pilotées ainsi :
Pour plus de détails : Commander un moteur pas-à-pas
Le montage à réaliser est le suivant :
Ce moteur nécessite en théorie une alimentation de 12V pour fonctionner correctement mais vous pouvez l'alimenter avec la carte Arduino si vous le faites tourner à vide. Si vous possédez une alimentation 12V, branchez le + sur le Vin du driver et reliez les masses de l'alimentation et de la carte Arduino pour éviter les phénomènes de masse flottante.