======DRV504 + 28BYJ-48====== {{ :drv504.png?200|DRV504}} Hight power switch * alimentation : 5 - 12VDC * utilise un ULN2003 * équipée de 4 Leds qui indiquent chacune 1 des 4 états du moteur pas à pas * dimensions : 35 x 31 mm idéal pour commander le moteur 28BYJ-48 * Moteur 2038 pas(entier)/tour 15 rmp max =====Calcul de la longueur des pas===== ATTENTION : le moteur peut être configuré pour avancer par pas ou par demi pas. Si avance par pas et roue de diamètre 38 mm => circonférence = 119.4 mm Si largeur entre roue = 93 mm => distance pour 90° = 73 mm * pour 1 pas : d (mm) = PI * D / 2038 = 0.051 mm * pour 1 mm : pas = 2038 / (PI * D) = 17 * pour 90° : pas = 2038 * 73 / (PI * D) = 1247 =====Câblage et programmation===== {{ :drv504_brochage.png?200|}} Le DVV504 peut être piloté directement par le code de l'ARDUINO ou par la librairie STEPPER.h * [[https://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino|Les caractéristiques]] * [[https://lastminuteengineers.com/28byj48-stepper-motor-arduino-tutorial/|Un tuto bien détaillé]] Exemple de code pour dessiner un carré 3838 /* Dessin d'un carré * 10 cm de coté = 1700 pas * angles = 1246 pas */ // Include the AccelStepper Library #include // Define step constants #define FULLSTEP 4 #define HALFSTEP 8 int etape = 8; // Nombre d'étapes // Creates two instances of motor // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper2(FULLSTEP, 8, 10, 9, 11); AccelStepper stepper1(FULLSTEP, 4, 6, 5, 7); // Défini les déplacements en valeur absolue void change(int e) { Serial.print("Etape = "); Serial.println(etape); switch (e){ case 8: stepper1.moveTo(1700); stepper2.moveTo(1700); break; case 7: stepper1.moveTo(2946); stepper2.moveTo(454); break; case 6: stepper1.moveTo(4646); stepper2.moveTo(2154); break; case 5: stepper1.moveTo(5892); stepper2.moveTo(908); break; case 4: stepper1.moveTo(7592); stepper2.moveTo(2608); break; case 3: stepper1.moveTo(8838); stepper2.moveTo(1362); break; case 2: stepper1.moveTo(10538); stepper2.moveTo(3062); break; case 1: stepper1.moveTo(11784); stepper2.moveTo(1816); break; default: ; } etape--; } void setup() { Serial.begin(115200); // set the maximum speed, acceleration factor, // initial speed and the target position for motor 1 stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(200.0); stepper1.setSpeed(200); // set the same for motor 2 stepper2.setMaxSpeed(1000.0); stepper2.setAcceleration(200.0); stepper2.setSpeed(200); } void loop() { // Change direction once the motor reaches target position if ((etape > 0) && (stepper1.distanceToGo() == 0)) change(etape); // Move the motor one step if (etape >=0) { stepper1.run(); stepper2.run(); } } ^Sommet ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ^ 10 ^ 11 ^ 12 ^ 13 ^ |Angle | | 180 | 120 | 90 | 72 | 60 | 51.4 | 45 | 49 | 36 | 32.7 | 30 | 27.7 | |Angle | | | | | 144 | | 154.3 | 135 | | 163.6 | 165 | 150 | 166.1 | {{ :drv504_bloc.png?400|}} Il est aussi possible d'utiliser l'extension "Stepper" dans mBot. **ATTENTION** : si plusieurs moteurs, ils fonctionnent en série et pas en parallèle (blocs bloquants).