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.
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); }
Questo L293D è un buono circuito integrato per realizzare progetti con motori passo passo, anche nel campo delle robotica…
…il testo cita ‘il prossimo esempio’; intendi che pubblicherai un altro post sull’argomento?
Ovviamente tutto quello che riguarda Arduino invoglia tutti i partecipanti al contest!
Le applicazioni di Arduino sono infinite… questo è uno dei moltissimi esempi che sarebbe bello collezionare!
Il qui presente circuito potrebbe essere un buon inizio per un piccolo robottino. Avete presente i robot pulisci casa? Non sarebbe male farne uno opensource!
Esiste già un robot open source, ma al momento non trovo il link del progetto… Appena lo trovo ve lo posto qui…
Oramai in rete esistono progetti open source per qualsiasi cosa…! L’L293 è uno degli integrati maggiormente usati per il controllo dei motori poichè si presta bene sia come ponte H per i motori in continua sia con l’aggiunta di un altro componente per il pilotaggio di motori passo passo! Io l’ho testato personalmente in entrambe le due applicazioni e vi assicuro che il rapporto qualità prezzo è ottimo! E se non ricordo male è anche previsto nel programma free sample in versione PDIP! Perciò ragazzi che aspettate a testarlo!!
Le applicazioni sono infinite personalmente l’ho visto molto spesso in progetti di CNC anche se per applicazioni un pò più sofisticate si passa su soluzioni molto più dispendiose ma per iniziare va benissimo.. Considero questo chip un caposaldo dell’elettronica un pò come l’NE555 per intenderci! XD
Una caratteristica importante dell’ L293 e la possibilità di mantenere separate le alimentazioni della logica e del driver interno.
Questo permette di collegare direttamente gli ingressi di controllo ad un micro a 5V e di pilotare il gate dei mosfet a 12V.
In questo modo possiamo controllare motori con correnti e tensioni elevate direttamente con un micro a 5V oltre che mantenere alto il livello di immunità nei confronti del carico.
mi ricordo di averlo testato per un inseguitore solare una decina di anni fa, certo applicato all’Arduino diventa più semplice.
Ho utilizzato L293D per il mio primo progetto di robot line follower e lo interfacciavo con un PIC16F628. È un componente che se pilotato in modalità PWM dissipa non tantissimo e poi, come da datasheet, è possibile aggiungerci una struttura metallica che massimizza l’area di dispersione del calore con il mondo esterno.
Pare non sia più nel programma free sample o non riesco più a trovarlo io! E’ un gran peccato!
Io ho costruito il mio bel ponte H con i tansistor e ho risolto tutto..muove i motori e la macchinina che è una meraviglia!
Piuttosto che stare a comprare questo componente ho pensato un pò di logica ed ecco fatto 🙂 ho usato cmq dei:
BC337 e va, con delle resistenze da 390ohm e 12komh
🙂
decisamente più comodo partire avendo arduino che costruirsi il ponte, più veloce e più gratificante, arrivi prima al risultato evitando pesanti frustrazoni ! l’ideale per me che sto facendo i primi vagiti nell’elettronica 🙂
Su questo video http://www.youtube.com/watch?v=ATnnMFO60y8 c’è qual’cosa di simile al tuo inseguitore solare con arduino
Per queste applicazioni propongo una alternativa un po più moderna:
TLE5205 H-Bridge for DC-Motor Applications
corrente fino a 5A
tensione fino a 40V
protetto da corto circuito
protetto da sovratemperatura
error flag
ingresso cmos/ttl
http://www.infineon.com/dgdl/tle5205-2.pdf?folderId=db3a304412b407950112b4381da46a3c&fileId=db3a304412b407950112b4381e296a3d
Per caso hai trovato qualcosa? Proprio in questi giorni l’idea di farmi il robottino è sempre più forte… sarebbe un bel progetto!
Se volete controllare correnti maggiori potete affidarvi ai chip L298 (2A) o eventualmente al L6203 (4A).
Personalmente ho usato degli L6203 per realizzare l’elettronica di movimentazione di una piccola fresa CNC.
Davvero molto interessante in poche parole potrei sostituire la shield per motori Arduino solamente con un L293?Sono dubbioso per quanto riguarda la potenza…
http://arduino.cc/en/Main/ArduinoMotorShield