Oggi proponiamo un nuovo progetto con Arduino che vede in azione una Auto con Sensore IR che si guida da sola. Il progetto in sé e per sé è abbastanza semplice e poco complesso, ma è comunque un ottimo punto di partenza per poter poi realizzare qualcosa di più complesso in futuro.
Cosa serve
Per iniziare, abbiamo bisogno di un Arduino Uno, ma in realtà basterebbe anche un semplice Arduino Nano. Al nostro Arduino Uno dobbiamo collegare un sensore infra-rossi noto come KY-032 Obstacle avoidance sensor module, un sensore digitale in grado di inviare e ricevere un segnale IR utile al fine di rilevare la presenza di ostacoli, e un modulo che sia in grado di gestire i motori che faranno muovere la nostra Auto IR; il modulo di cui parliamo è il Motor Drive L298N che gestirà due motori in modo tale da fare girare le ruote della Auto IR, a seconda delle necessità, in una direzione o in un’altra o farle fermare del tutto. Il tutto è alimentato da una batteria ricaricabile a 12V, ma possiamo tranquillamente usare anche un powerbank da 5V, visto che sia il Motor Drive che Arduino utilizzano entrambi i voltaggi. Il tutto è assemblato su una scocca già pronta e che acquistiamo per una decina di euro circa, con dotazione di due ruote e relativi motori.
ARDUINO UNO: https://amzn.to/2OKFtxJ
Motor Drive L298N: https://amzn.to/2LvMR1R
Sensore KY-032: https://amzn.to/2KFa7Km
Batteria 12V DC 12300: https://amzn.to/2XW8NKf
Scocca auto: https://amzn.to/30MDWwq
Jumper: https://amzn.to/2we2BMK
Collegamenti
Partiamo dai collegamenti da fare per il sensore. Come leggibile dallo schema posto in basso, la nostra Auto IR ha il sensore KY-032 collegato al pin digitale 13, mentre il Motor Drive utilizzerà i pin 2 – 4 – 5 -9 per gestire avvio e velocità dei motori. Nello sketch sono state usate 8 batterie da 1,5V, collegandole come mostrato. Come detto sopra, va benissimo una batteria da 12V o un powerbank da 5V; ricordatevi che il Motor Drive è in grado di funzionare a 12V o 5V e di non dare mai entrambe le tensioni contemporaneamente. Prima di procedere con il codice dell’Auto IR, spieghiamo due cose sul sensore KY-032, ossia che ha due potenziometri per regolare frequenza e distanza e servirà molta pazienza per regolarli al massimo della loro precisione, quindi non abbiate fretta nel regolarlo. Esistono due versioni di questo sensore e quella che utilizziamo noi è quella con il chip NE555.
Codice
Come detto all’inizio, il codice dell’Auto IR non è complesso e si basa su 3 variabili che rilevano un determinato dato dal sensore KY-032. Queste 3 variabili sono gestite in un ciclio if/else annidato, in cui ad ogni livello controlla che il valore della prima variabile sia 0 per compiere poi una determinata serie di azioni, per poi verificare se la successiva variabile è sempre in 0. Il ciclo si ripete all’infinito ed ogni volta che il valore rilevato è 1 l’Auto IR procede in avanti. Vediamo meglio lo sketch:
sensore0 = digitalRead (13); if (sensore0 == 0){ Stop(); Serial.println ("Ostacolo rilevato"); delay(100); Back(); Serial.println ("Retromarcia"); delay(500); Right(); Serial.println ("Giro a destra"); delay(500); Go(); Serial.println ("Avanti"); sensore1 = digitalRead (13); if (sensore1 == 0) { Stop(); Serial.println ("Ostacolo rilevato"); delay(100); Back(); Serial.println ("Retromarcia"); delay(500); Left(); Serial.println ("Giro a sinistra"); delay(1000); Go(); Serial.println ("Avanti"); sensore2 = digitalRead (13); if (sensore2 == 0) { Stop(); Serial.println ("Ostacolo rilevato"); Back(); Serial.println ("Retromarcia"); delay(500); Stop(); delay(100); Left(); Serial.println ("Giro a sinistra"); delay(1000); Go(); } else { Go(); } } else { Go(); } } else { Go(); }
Si nota che il rilevamento è compito dallo stesso sensore per verificare la presenza di ostacoli ed in questo caso richiama le funzioni Stop per fermarsi, Right e Left per girare a destra o sinistra e Back e Go per andare indietro o avanti. Analizzando una delle funzioni di movimento per capire le azioni che l’auto può riprodurre:
void Right() { digitalWrite(INT_A,LOW); digitalWrite(INT_B,HIGH); analogWrite(left_A,100); analogWrite(right_B,100); }
La funzione che esaminiamo è la Right, dove troviamo due digitalWrite, uno che attiva una ruota con HIGH nel senso di marcia ed uno con LOW la fa girare nel senso opposto. Gli analogWrite sono i segnali PWM che mandiamo alle ruote per farle muovere ad una certa velocità, dove il massimo è 255.
Lo sketch è accessibile da qua e non necessita di librerie.
Conclusioni
L’Auto IR è un progetto molto semplice, adatto per essere un ottimo punto di partenza per un progetto finale e più complesso. Il costo è circa 25€, non basso ma nemmeno elevato. Tuttavia se vogliamo avere qualcosa tra le mani di più complesso, abbiamo visto la MiniCar di Elegoo che ad un prezzo simile offre, di fatto, molto di più.