Utilizziamo il sensore¶
- Table of contents
- Utilizziamo il sensore
Per evitare gli ostacoli dotiamo l'insetto di un sensore ad ultrasuoni. Arduino è in grado di utilizzare i dati del sensore per calcolare la distanza fra il sensore e gli oggetti che si trova di fronte. Fra gli esempi forniti dall'ambiente di sviluppo integrato, lo sketch Ping serve proprio a misurare le distanze con un sensore ad ultrasuoni e lo utilizzeremo nel nostro codice. Nello sketch si utilizza però un diverso modello di sensore rispetto a quello che noi abbiamo scelto, così dobbiamo prima preparare il collegamento in modo da poter avere lo stesso tipo di comportamento del sensore dell'esempio.
Colleghiamo il sensore¶
Cominciamo inserendo lo strip a 90° nel sensore e lo saldiamo.
Osserviamo la corrispondenza dei fili del cavo ai pin del sensore.
Prepariamo il cavo e colleghiamo i fili ai morsetti: nel nostro caso, il filo verde va collegato al pin di alimentazione 5V di Arduino, il filo giallo non va collegato, il filo arancione va collegato al pin 4, i fili rosso e marrone vanno collegati assieme a un pin GND.
Proviamo il corretto funzionamento del sensore collegandolo ad Arduino con lo sketch Ping dopo aver modificato il pin del sensore in 4 (nello sketch dell'esempio è utilizzato il 7), poi procediamo a fissare il connettore del cavo alla parte anteriore del motore. Possiamo fissare definitivamente anche la base ai motori. Montiamo il sensore sul connettore.
Completiamo il codice¶
Componiamo i codici del movimento che abbiamo già visto singolarmente in un unico codice e lo completiamo con il codice per utilizzare il sensore. Nel loop utilizziamo la distanza rilevata dal sensore per decidere se procedere in avanti o arretrare e cambiare direzione.
Utilizziamo come riferimento il codice walkerForwardComplete.pde con alcune modifiche: modifichiamo i valori delle variabili per il movimento dei motori verso sinistra, nella parte del rilevamento dei dati del sensore eliminiamo ogni riferimento alla distanza in pollici, che non ci interessa (visto che utilizzeremo solo quella in centimetri), eliminiamo il void center()
(non viene utilizzato nel loop
), sostituiamo il void moveForward()
e il void moveTurnLeft()
dell'esempio con quelli che abbiamo compilato ed eliminiamo il delay
nel loop
per l'andatura in avanti (file theWalk.ino).
Per migliorare il comportamento del robot nella fase del cambio direzione ed evitare che si muova alla cieca per troppi passi, inseriamo il rilevamento di ostacoli anche nel momento in cui avanza verso sinistra e, in caso affermativo, lo facciamo arretrare ancora (file theWalk1.ino).
Abbiamo inserito anche un ciclo for
per far avanzare l'insetto più lentamente (file theWalk2.ino).
Per migliorare il riconoscimento degli ostacoli durante la fase di avanzamento, abbiamo inserito ulteriori controlli all'interno dello sketch (file theWalk3.ino).
Riferimenti¶
Make: Arduino Bots and Gadgets, by Kimmo Karvinen and Tero Karvinen (O’Reilly). Copyright 2011 O’Reilly Media, 978-1-449-38971-0.
Make: Arduino Bots and GadgetsArduino - Ping Arduino - Sweep