mercoledì 27 gennaio 2016

R2D2 - Alias C1P8 - Parte 1 di 999 - Arduino e Motori in DC


Rieccomi qui,
qualche Mese fa avevo fatto vedere la Saga di Guerre Stellari (Quelle degli anni '80) a mia figlia di 7 anni... è stato amore a prima vista con C1P8 (il nome italiano di R2D2)
Poi ci sono state le pubblicità del Robottino Emiglio (ma in italiano i nomi si scrivono con "LI" e mai con "GLI"?! ) e giu pianti quando gli ho spiegato che erano "solo radiocomandati" che non erano come C1P8...
Da li mi sono messo a giocare con un vecchio chassis di un robot (Cybot) uscito a fascicoli con la DeAgostini (di cui avevo preso solo i primi 4 fascicoli...)
un Arduino Uno R3, ed un chip L293D acquistato in stock su Amazon.

Qui Sotto lo schema del Chip (L293)


Quindi Partendo da questo datasheet ed usando lo schema qui sotto

Sono riuscito a far muovere il tutto alimentandolo con un PowerBank da cellulare.

il Programma usato è stato:




// Motore A
#define enable1Pin 11
#define in1Pin 10
#define in2Pin 9

//Motore B
#define enable2Pin 6
#define in3Pin 7
#define in4Pin 8


boolean reverse = false;
  
void setup()
{
  // Motore A
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  
  // Motore B
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
}
 
void loop()
{

setMotorA(0, true);
setMotorB(0, true);
delay(1000);
delay(1000);
setMotorA(128, true);
setMotorB(128, true);
delay(1000);
setMotorA(255, true);
//setMotorB(128, true);
delay(1000);
setMotorA(128, true);
setMotorB(255, true);
delay(1000);

}
 
void setMotorA(int speed, boolean reverse)
{
  analogWrite(enable1Pin, speed);
  digitalWrite(in1Pin, ! reverse);
  digitalWrite(in2Pin, reverse);
}

void setMotorB(int speed, boolean reverse)
{
  analogWrite(enable2Pin, speed);
  digitalWrite(in3Pin, ! reverse);
  digitalWrite(in4Pin, reverse);
}



et Voila, un "percorso" da 5 secondi... :D