*
Make3D - 2024





Deux moteurs pas à pas



Voici le schéma de connexion et le code pour faire tourner deux moteurs 28BYJ48 pas à pas sur un Arduino UNO et deux "motor shields" du type SBT0811 (généralement fournis en kit avec les moteurs pas à pas).

L'intérêt de ce code c'est qu'il fait tourner les deux moteurs en même temps, de façon "multi tâche" normalement pas accessible sur Arduino.




  • Steppers contrôlés par un L293D






  • //declare variables for the motor pins
    int motorPin1 = 8; // Blue
    int motorPin2 = 9; // Pink
    int motorPin3 = 10; // Yellow
    int motorPin4 = 11; // Orange
    // Red (VCC)

    int motorPin5 = 7; // Blue
    int motorPin6 = 6; // Pink
    int motorPin7 = 5; // Yellow
    int motorPin8 = 4; // Orange
    // Red (VCC)

    int motorSpeed = 3; // stepper speed
    int count = 0; // count steps
    int countsperrev = 512; // steps per revolution
    int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

    unsigned long currentMillis = millis();


    void setup() {
    Serial.begin(9600);
    //declare the motor pins as outputs
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);

    pinMode(motorPin5, OUTPUT);
    pinMode(motorPin6, OUTPUT);
    pinMode(motorPin7, OUTPUT);
    pinMode(motorPin8, OUTPUT);
    Serial.begin(9600);
    }

    void loop(){
    countsperrev = 100;
    if(count < countsperrev )
    clockwise();
    else if (count == countsperrev * 2)
    count = 0;
    else
    anticlockwise();
    count++;
    }

    ///// functions //////

    void anticlockwise()
    {
    for(int i = 0; i < 8; i++)
    {
    setOutput(i);
    delayMicroseconds(motorSpeed);
    Serial.print("A "); Serial.print(i); Serial.println(count);
    }
    }

    void clockwise()
    {
    for(int i = 7; i >= 0; i--)
    {
    setOutput(i);
    delayMicroseconds(motorSpeed);
    Serial.print("B "); Serial.print(i); Serial.println(count);
    }
    }

    void setOutput(int out)
    {
    digitalWrite(motorPin1, bitRead(lookup[out], 0) );
    digitalWrite(motorPin2, bitRead(lookup[out], 1) );
    digitalWrite(motorPin3, bitRead(lookup[out], 2) );
    digitalWrite(motorPin4, bitRead(lookup[out], 3) );

    digitalWrite(motorPin5, bitRead(lookup[out], 0) );
    digitalWrite(motorPin6, bitRead(lookup[out], 1) );
    digitalWrite(motorPin7, bitRead(lookup[out], 2) );
    digitalWrite(motorPin8, bitRead(lookup[out], 3) );
    }