Arduino: Controlul unui motor DC

Descriere: Comanda unui motor DC folosind Arduino

De învățat:

  • cum se realizează o rotație în sensul acelor de ceasornic și invers
  • cum se poate modifica viteza de rotație

l298nMateriale necesare:

  • un motor DC (se pot gasi usor de la jucarii vechi)
  • un integrat L298N
  • sursă de alimentare pentru motoraș (se poate folosi o sursa DC reglabilă)
  • fludor 0.6 mm
  • letcon 30W
  • fire de legătură (se pot folosi foarte bine cele dintr-un cablu utp)
  • placuță Arduino Duemillanove + softul aferent instalat

Cost proiect:

  • motoraș – se poate folosi orice motoraș DC din jucării vechi
  • integrat 15 Lei
  • sursa de curent (tensiune de la 3-15v) aproximativ 15 Lei

Complexitate/Timp realizare: începători/10 minute

    img_gdphp

  • Motoarele DC au 2 fire, iar sensul de rotație depinde de cum sunt alimentate. Turația unui motoraș DC este direct proporțională cu tensiunea de alimentare, atenție însă că o tensiune prea mare îl poate arde.
  • În general viteza de rotație este mul mai mare decât la motoarele pas cu pas, dar spre deosebire de aceastea nu se poate controla precis rotirea
  • Motoarele DC au ca orice motor o parte dinamică numită rotor, provăzută cu bobine, care se rotește în interior, și o parte fixă numită stator care are doi magneți permanenți. Rotorul este pus în mișcare prin aplicarea unei tensiuni de curent continuu, ceea ce duce la crearea unui camp magnetic în interior opus celor 2 magneți de pe stator.

Realizare:

l298n_pins

  • PIN1 (Current Sensing A) se leaga de PIN8(GND) și de acolo la – sursei de alimentare. Dacă se folosesc două motorașe (integratul permite controlul independent a două motoare DC) se leagă și PIN15 (Current Sensing B)
  • PIN4 (Supply Voltage Vs) se leagă la + sursei de alimentare.
  • PIN2 (Output 1) se leagă la un fir de la primul motor și PIN3 (Output 2) la celălalt fir de la primul motor. Dacă se folosesc două motorașe PIN13 (Output 3) se leagă la un fir de la al doilea motor și PIN14 (Output 4) la celălalt fir de la al doilea motor
  • circuitul integrat se conecteaza la arduino astfel:
    • PIN9 (Logic Supply Voltage Vss) –>la alimentarea 5V
    • PIN8 (GND) –>la alimentarea GND
    • PIN5 (Input 1) –>la ieșirea digitală 2
    • PIN7 (Input 2) –>la ieșirea digitală 4
    • PIN6 (Enable A) –>la ieșirea digitală 3(PWM)
    • Dacă se mai folosește un motoraș se vor face și următoarele conexiuni:
      • PIN10 (Input 3) –>la ieșirea digitală 7
      • PIN12 (Input 4) –>la ieșirea digitală 8
      • PIN11 (Enable B) –>la ieșirea digitală 6(PWM)
  • În mediul de dezvoltare se va executa următorul cod (codul este pentru controlul a două motorașe conectate la o platfoma cu 3 roți: două motoare și una de direcție, mai multe detalii vor urma zilele acestea):

    int motor1Pin1 = 2;
    int motor1Pin2 = 4;
    int enablePin1 = 3;
    int motor2Pin1 = 7;
    int motor2Pin2 = 8;
    int enablePin2 = 6;

    void setup() {

    pinMode(motor1Pin1, OUTPUT);
    pinMode(motor1Pin2, OUTPUT);
    pinMode(enablePin1, OUTPUT);
    pinMode(motor2Pin1, OUTPUT);
    pinMode(motor2Pin2, OUTPUT);
    pinMode(enablePin2, OUTPUT);

    // se pornesc cele două motorașe:
    digitalWrite(enablePin1, HIGH);
    digitalWrite(enablePin2, HIGH);

    }

    void loop() {

    //înainte timp de o secundă
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);

    delay(1000);

    //stop pentru o secundă
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    delay(1000);

    //curba timp de o secunda, raportat la dimensiunea roților folosite a însemnat o rotație la 90 de grade
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    delay(1000);

    //stop pentru o secundă
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    delay(1000);

    //dă cu spatele timp de o secundă
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    delay(1000);

    //stop pentru o secundă
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    delay(1000);

    //curba invers
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    delay(1000);

    //stop pentru 4 secunde
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    delay(4000);

    }

În curând poze cu primul robot realizat cu Arduino…

Leave a comment

Your comment