| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
wiki:tutoriels:arduino:moteur-pas-a-pas [2020/11/06 18:38] damien.muti [Précaution d'emploi] |
wiki:tutoriels:arduino:moteur-pas-a-pas [2022/06/21 15:31] (Version actuelle) damien.muti [Câblage] |
||
|---|---|---|---|
| Ligne 40: | Ligne 40: | ||
| * [[https:// | * [[https:// | ||
| * {{ : | * {{ : | ||
| + | |||
| + | {{ : | ||
| + | |||
| Il est à noter que le couple de rotation de ce moteur est de **34.3mN.m** (à 120Hz). | Il est à noter que le couple de rotation de ce moteur est de **34.3mN.m** (à 120Hz). | ||
| Ligne 52: | Ligne 55: | ||
| {{ : | {{ : | ||
| - | ==== Précaution d' | + | ==== Précaution d' |
| La datasheet du moteur 28BYJ-48 donne : | La datasheet du moteur 28BYJ-48 donne : | ||
| * Speed Variation Ratio (rapport de variation de vitesse) : 1/64 | * Speed Variation Ratio (rapport de variation de vitesse) : 1/64 | ||
| Ligne 70: | Ligne 73: | ||
| Une expérience montre qu' | Une expérience montre qu' | ||
| + | |||
| + | A VOIR: Le facteur 64 peut aussi venir du paramètre stepsPerRevolution fixé lors de l' | ||
| En pratique cela signifie que, si //rpm// est le paramètre d' | En pratique cela signifie que, si //rpm// est le paramètre d' | ||
| Ligne 88: | Ligne 93: | ||
| * //nbTour// = 2 | * //nbTour// = 2 | ||
| - | La période de rotation du moteur pas à pas est donc : T = // | + | La période de rotation du moteur pas à pas est donc : T = // |
| Ligne 160: | Ligne 165: | ||
| Le code Arduino est le suivant : {{ : | Le code Arduino est le suivant : {{ : | ||
| + | Une vidéo de test est disponible sur ce lien Youtube : [[https:// | ||
| + | |||
| + | ===== Code 2 : tour complet et sens inverse - mesure de la période ===== | ||
| + | < | ||
| + | |||
| + | /* | ||
| + | Stepper Motor Control - one revolution | ||
| + | |||
| + | This program drives a unipolar or bipolar stepper motor. | ||
| + | The motor is attached to digital pins 8 - 11 of the Arduino. | ||
| + | |||
| + | The motor should revolve one revolution in one direction, then | ||
| + | one revolution in the other direction. | ||
| + | |||
| + | */ | ||
| + | |||
| + | #include < | ||
| + | |||
| + | const int stepsPerRevolution = 64; // change this to fit the number of steps per revolution | ||
| + | // for your motor | ||
| + | |||
| + | // initialize the stepper library on pins 8 through 11: | ||
| + | Stepper myStepper(stepsPerRevolution, | ||
| + | |||
| + | int compteurLoop = 0, tour = 2048, nbTour = 2; // 1 tour représente 2048 pas du moteur | ||
| + | unsigned long timer0 = 0; | ||
| + | |||
| + | void setup() { | ||
| + | // set the speed at N steps/s: | ||
| + | myStepper.setSpeed(200); | ||
| + | // initialize the serial port: | ||
| + | Serial.begin(9600); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | // step one revolution | ||
| + | if (compteurLoop == 0) { | ||
| + | timer0 = millis(); | ||
| + | } | ||
| + | |||
| + | // step one revolution | ||
| + | // | ||
| + | timer0 = millis(); // lancer chrono | ||
| + | myStepper.step(nbTour * tour); // effectuer nbTour=2 tours c'est à dire 2*2048 pas | ||
| + | |||
| + | unsigned long t = (millis() - timer0); | ||
| + | Serial.print(" | ||
| + | Serial.print(t/ | ||
| + | Serial.println(" | ||
| + | delay(500); | ||
| + | |||
| + | // step one revolution in the other direction: | ||
| + | // | ||
| + | timer0 = millis(); // lancer chrono | ||
| + | myStepper.step(-nbTour * tour); // effectuer 1 tour et demi en sens inverse, c'est à dire 1.5*2048 pas | ||
| + | t = (millis() - timer0); | ||
| + | Serial.print(" | ||
| + | Serial.print(t/ | ||
| + | Serial.println(" | ||
| + | delay(500); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Le code Arduino est le suivant : {{ : | ||
| + | |||
| + | Voir aussi la documentation d' | ||
| + | |||
| + | |||
| + | ===== Moteur pas à pas 28BYJ-48 avec module de contrôle basé sur un UNL2003ARG ===== | ||
| + | ==== Matériel et tutoriels ==== | ||
| + | |||
| + | * Gotronic : [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | ==== Câblage ==== | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | ====Programme Arduino==== | ||
| + | Le programme de test consiste à effectuer des Aller et Retour de 360° ad vitam æternam. Le programme se trouve sur le site [[https:// | ||
| + | |||
| + | < | ||
| + | |||
| + | ///////////////// | ||
| + | #define IN1 11 | ||
| + | #define IN2 10 | ||
| + | #define IN3 9 | ||
| + | #define IN4 8 | ||
| + | int Steps = 0; | ||
| + | int Direction = 0; | ||
| + | int number_steps = 512; //= 2048/ | ||
| + | int unTour = 518; // valeur expérimentale | ||
| + | int nTours = 2; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | Serial.begin(9600); | ||
| + | pinMode(IN1, | ||
| + | pinMode(IN2, | ||
| + | pinMode(IN3, | ||
| + | pinMode(IN4, | ||
| + | // delay(1000); | ||
| + | |||
| + | // calcul du nombre de pas relatif à nTours | ||
| + | number_steps = nTours * unTour; | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | //1 rotation counter clockwise | ||
| + | stepper(number_steps); | ||
| + | delay(500); | ||
| + | //1 rotation clockwise | ||
| + | stepper(-number_steps); | ||
| + | delay(500); | ||
| + | // //Keep track of step number | ||
| + | // for (int thisStep = 0; thisStep < number_steps; | ||
| + | // stepper(1); | ||
| + | // } | ||
| + | // delay(500); | ||
| + | // for (int thisStep = number_steps; | ||
| + | // stepper(-1); | ||
| + | // } | ||
| + | // delay(500); | ||
| + | } | ||
| + | |||
| + | |||
| + | void stepper(double nbStep) { | ||
| + | if (nbStep >= 0) { | ||
| + | Direction = 1; | ||
| + | } else { | ||
| + | Direction = 0; | ||
| + | nbStep = -nbStep; | ||
| + | } | ||
| + | for (int x = 0; x < nbStep * 8; x++) { | ||
| + | switch (Steps) { | ||
| + | case 0: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 1: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 2: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 3: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 4: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 5: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 6: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | case 7: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | default: | ||
| + | digitalWrite(IN1, | ||
| + | digitalWrite(IN2, | ||
| + | digitalWrite(IN3, | ||
| + | digitalWrite(IN4, | ||
| + | break; | ||
| + | } | ||
| + | delayMicroseconds(1000); | ||
| + | if (Direction == 1) { | ||
| + | Steps++; | ||
| + | } | ||
| + | if (Direction == 0) { | ||
| + | Steps--; | ||
| + | } | ||
| + | if (Steps > 7) { | ||
| + | Steps = 0; | ||
| + | } | ||
| + | if (Steps < 0) { | ||
| + | Steps = 7; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====Tutoriel ==== | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | |||
| + | ==== achat sur Amazon ==== | ||
| + | https:// | ||
| ===== Références ===== | ===== Références ===== | ||
| Sites : | Sites : | ||
| Ligne 170: | Ligne 396: | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | * [[https:// | ||