Les entrées IN1, IN2, IN3 et IN4 du module de contrôle sont reliées respectivement aux pins 8, 9, 10 et 11 de l’arduino.
Le module est alimenté en 5 V entre VCC et GND.
L’interrupteur (ou le cavalier) est en position VCC.
Code à compléter avec l'une des boucles données plus bas, puis à téléverser
/**
* boucle_for_à_ajouter.ino
* Ce sketch commande un moteur pas à pas 28BYJ-48-08
* Le module de commande ULN2003A est branché sur les pins 8, 9, 10 et 11
* Le module est alimenté comme suit : VCC <-> 5V et GND <-> GND.
* L'interrupteur (ou le cavalier) est positionné sur VCC
*/
// 1. Déclarations des constantes et variables globales
// Module de contrôle
const byte IN1 = 8; // Broche IN1 du module de commande sur pin 8
const byte IN2 = 9; // Broche IN2 du module de commande sur pin 9
const byte IN3 = 10; // Broche IN3 du module de commande sur pin 10
const byte IN4 = 11; // Broche IN4 du module de commande sur pin 11
// Durée de pause entre pas. En ms et pause ⩾ 5 ms.
const int PAUSE = 25;
// La rotation n'est pas codée dans loop() mais dans setup() Pour plusieurs tours une boucle est nécessaire
// Nombre de tours
const int NOMBRE_DE_TOURS = 10;
// 2. Setup − Exécuté une seule fois
void setup() {
// Les pins 8, 9, 10 et 11 doivent être configurées en sorties (En entrée par défaut)
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Rotation
// Extinction
alimenterBobines(LOW, LOW, LOW, LOW);
}
// 3. Loop − Boucle infinie
void loop() {
// Nécessaire, même vide
}
// 4. Fonction
/**
* fonction alimenterBobines
* Cette fonction permet d'alimenter (HIGH) ou non (LOW)
* les bobines de type A, B, C et D (dans cet ordre)
* Exemple : Pour alimenter la Bobine C : alimenterBobines(LOW, LOW, HIGH, LOW);
*
* On peut éventuellement alimenter deux bobines simultanément
* Exemple : Pour alimenter les bobines B et C : alimenterBobines(LOW, HIGH, HIGH, LOW);
*/
void alimenterBobines(bool a, bool b, bool c, bool d) {
digitalWrite(IN1, a);
digitalWrite(IN2, b);
digitalWrite(IN3, c);
digitalWrite(IN4, d);
}
Cette boucle alimente successivement chaque bobine
Elle doit être collée entre les commentaires // Rotation et // Extinction
for (int i = 0; i < 8 * NOMBRE_DE_TOURS; i++) {
alimenterBobines(HIGH, LOW, LOW, LOW); // Pas A
delay(PAUSE);
alimenterBobines(LOW, HIGH, LOW, LOW); // Pas B
delay(PAUSE);
alimenterBobines(LOW, LOW, HIGH, LOW); // Pas C
delay(PAUSE);
alimenterBobines(LOW, LOW, LOW, HIGH); // Pas D
delay(PAUSE);
}
2. Boucle « pas entier »
Cette boucle aliment simultanément deux bobines pour faire tourner le moteur avec un couple accru.
Comme la précédente, elle doit être collée entre les commentaires // Rotation et // Extinction
for (int i = 0; i < 8 * NOMBRE_DE_TOURS; i++) {
alimenterBobines(HIGH, HIGH, LOW, LOW); // Pas A&B
delay(PAUSE);
alimenterBobines(LOW, HIGH, HIGH, LOW); // Pas B&C
delay(PAUSE);
alimenterBobines(LOW, LOW, HIGH, HIGH); // Pas C&D
delay(PAUSE);
alimenterBobines(HIGH, LOW, LOW, HIGH); // Pas D&A
delay(PAUSE);
}
3. Boucle « demi pas »
Dans le mode « demi-pas » on alimente successivement une puis deux bobines, en sorte de faire 64 pas par tour.
Comme les autres, cette boucle doit être collée entre les commentaires // Rotation et // Extinction
for (int i = 0; i < 8 * NOMBRE_DE_TOURS; i++) {
alimenterBobines(HIGH, LOW, LOW, LOW); // Pas A
delay(PAUSE);
alimenterBobines(HIGH, HIGH, LOW, LOW); // Pas A&B
delay(PAUSE);
alimenterBobines(LOW, HIGH, LOW, LOW); // Pas B
delay(PAUSE);
alimenterBobines(LOW, HIGH, HIGH, LOW); // Pas B&C
delay(PAUSE);
alimenterBobines(LOW, LOW, HIGH, LOW); // Pas C
delay(PAUSE);
alimenterBobines(LOW, LOW, HIGH, HIGH); // Pas C&D
delay(PAUSE);
alimenterBobines(LOW, LOW, LOW, HIGH); // Pas D
delay(PAUSE);
alimenterBobines(HIGH, LOW, LOW, HIGH); // Pas D&A
delay(PAUSE);
}