Come controllare un motore con l’L293D e Arduino

Come controllare un motore con l'L293D e Arduino

L’L293D (datasheet) vi dà la possibilità di controllare due motori in entrambe le direzioni.
Come si può vedere nello schema, un regolatore di tensione a 5V è fra la batteria ed i pin 1, 9, 16.

controllare-motore_L293D_Arduino

Il pin 8 viene alimentato prima del VReg, se il motore ha bisogno, ad esempio, di 6V si dovrebbe inserire i 6V direttamente in questo pin, tutti gli altri pin non dovrebbero essere alimentati con più di 5V. Questo dovrebbe funzionare senza nessun problema, ma se si vuole un’implementazione perfetta, allora guardate il prossimo esempio.
Questa è la corretta attuazione (con condensatori), e notate che il pin 8 è alimentato dalla tensione che non è regolata.
Il codice Arduino
Utilizzate questo codice per testare il motore con la scheda Arduino

// Use this code to test your motor with the Arduino board:
// if you need PWM, just use the PWM outputs on the Arduino
// and instead of digitalWrite, you should use the analogWrite command
// --------------------------------------------------------------------------- Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};
// --------------------------------------------------------------------------- Setup
void setup() {
Serial.begin(9600);
// Setup motors
int i;
for(i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
}
}
// --------------------------------------------------------------------------- Loop
void loop() {
drive_forward();
delay(1000);
motor_stop();
Serial.println("1");
drive_backward();
delay(1000);
motor_stop();
Serial.println("2");
turn_left();
delay(1000);
motor_stop();
Serial.println("3");
turn_right();
delay(1000);
motor_stop();
Serial.println("4");
motor_stop();
delay(1000);
motor_stop();
Serial.println("5");
}
// --------------------------------------------------------------------------- Drive
void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}
void drive_forward(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void drive_backward(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}
void turn_left(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);
digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}
void turn_right(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);
digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

16 Comments

  1. mingoweb 9 febbraio 2011
  2. sorex 9 febbraio 2011
  3. mingoweb 8 febbraio 2011
  4. stewe 28 febbraio 2011
  5. SuperG72 8 febbraio 2011
  6. stewe 28 febbraio 2011
  7. stewe 8 febbraio 2011
  8. mingoweb 8 febbraio 2011
  9. Arx33 8 febbraio 2011
  10. sorex 8 febbraio 2011
  11. linus 8 febbraio 2011
  12. Alex87ai 8 febbraio 2011
  13. Arx33 8 febbraio 2011
  14. NIck_BG 8 febbraio 2011
  15. Casciana17 26 marzo 2011
  16. giuskina 9 febbraio 2011

Leave a Reply