Università degli studi di Roma LA SAPIENZA Corso di ingegneria informatica e automatica Automazione I Realizzazione di una macchinina in grado di evitare le collisioni Di Alessandro Giuseppi All’attenzione del Docente: Dr.Vincenzo Suraci Sommario Obiettivo................................................................................................................................................................................ 3 Descrizione ............................................................................................................................................................................ 3 Unità di elaborazione: Arduino............................................................................................................................................ 4 Motori e parte meccanica .................................................................................................................................................. 4 Driver motori .......................................................................................................................................................................... 5 Sensore di prossimità ............................................................................................................................................................ 5 Alimentazione ....................................................................................................................................................................... 6 Schema elettrico .................................................................................................................................................................. 7 Due soluzioni ......................................................................................................................................................................... 8 Progettazione schema di controllo Arduino ...................................................................................................................... 9 Codice Arduino .................................................................................................................................................................. 10 Foto e video del funzionamento ....................................................................................................................................... 12 Soluzione a più sensori ........................................................................................................................................................ 13 Conclusioni .......................................................................................................................................................................... 14 Software utilizzato ............................................................................................................................................................... 14 Autore .................................................................................................................................................................................. 14 2 Obiettivo Il progetto coprirà tutte le fasi relative alla realizzazione e programmazione di una macchinina basata su Arduino in grado di evitare gli ostacoli grazie ad un sensore di prossimità. Durante l’analisi saranno valutate alcune delle possibili soluzioni implementative illustrandone vantaggi e svantaggi. Nella prima parte sarà trattato l’aspetto hardware, per poi spostare l’attenzione sull’aspetto software nella seconda parte. Descrizione Consideriamo la seguente schematizzazione del progetto: Arduino Sensore di prossimità Driver Motori motori Analizzeremo ora nel dettaglio i singoli blocchi, per poi analizzare la loro interconnessione. 3 Unità di elaborazione: Arduino Vista la grande diffusione e la natura open source del progetto, si è deciso di utilizzare per il controllo del dispositivo una scheda Arduino. In particolare, siccome le dimensioni non sono un problema rilevante si è deciso di optare per un Arduino UNO. Il codice proposto, una volta ricompilato è totalmente compatibile con le altre schede Arduino. Motori e parte meccanica La macchinina si muoverà come un cingolato per evitare l’impiego di un motore addizionale o di un sistema di ingranaggi dedicato. Si è scelto di impiegare 4 motori DC, ciascuno relativo ad una ruota, e a due a due in parallelo. Come scheletro di supporto si è deciso di acquistare un semplice kit di montaggio per modellini. Composto da due armature in plastica trasparente e quattro ruote. 4 Driver motori Si è optato per l’impiego di un driver per rendere più snello e leggibile il codice per l’Arduino. Il driver scelto è il Keyes L298,basato sul chip l298N. Sensore di prossimità Per rilevare la presenza di un ostacolo è necessario impiegare un sensore di prossimità. Ne esistono di varie tipologie, tuttavia per il fattore costo, nonché per il più che adeguato grado di affidabilità e precisione si è deciso di utilizzare un sensore basato sugli infrasuoni. Il modello scelto è l’ HC-SR04 5 La seguente figura ne riassume il funzionamento: Inviando un impulso di durata 10μs sul canale TRIG il sensore ci restituisce sul pin ECHO un impulso avente come durata il tempo di volo totale dell’onda ultrasonica. Alimentazione Per alimentare Arduino e sensore sarà impiegata una batteria da 9V, mentre per i motori e relativo driver si utilizzeranno sei pile da 1,5V in serie ed una batteria da 9v in parallelo. 6 Schema elettrico Alleghiamo di seguito lo schema dei collegamenti elettrici HC-SR04 Il driver L298 permette di controllare i quattro motori tramite le sole 4 porte di input nella figura. Le porte 1 e 2 controllano il polo negativo e il polo positivo dei motori del gruppo A. Parallelamente le porte 3 e 4 controllano i poli negativo e positivo del gruppo motori B. Il sensore è stato connesso ai pin 06 e 07 e la batteria dei motori, grazie all’apposito pin, è stata collegata al driver. 7 Due soluzioni Analizzeremo due casi: un modello dotato solo di un sensore di prossimità ed un modello che ne monta tre. Nel caso di un solo sensore di prossimità, come finora trattato, lo si pone sulla parte anteriore della macchinina. Quando un ostacolo viene rilevato (ovvero, quando la distanza dall’ostacolo è inferiore ai 20cm) la macchinina girerà a sinistra finché non troverà la strada nuovamente libera per poi riprendere ad andare avanti. Questa soluzione permette alla nostra macchinina di trovare l’uscita in qualsiasi labirinto ‘’semplicemente connesso’’, ovvero i cui muri sono tutti collegati, poiché si basa sull’algoritmo della mano sinistra. Questa soluzione sarà anche implementata sul nostro modello e sarà allegato un video a prova del funzionamento. Per completezza progetteremo anche il diagramma degli stati SFC del caso in cui la macchinina abbia tre sensori di prossimità, posti sulla parte anteriore e ai suoi lati. Trovando un ostacolo sul suo percorso la macchinina controllerà se la strada alla sua destra è libera, in caso positivo si comporta come nel caso precedente, mentre nel caso negativo passerebbe al controllo della strada a sinistra. Nel caso in cui la macchinina si trovi in un vicolo cieco ferma i motori e accende un led per segnalare la fine della corsa. 8 Progettazione schema di controllo Arduino Alleghiamo il diagramma SFC relativo alla prima soluzione. 9 Codice Arduino Il diagramma precedente può essere tradotto nel seguente codice, sviluppato in Arduino IDE int int int int int int int int r_motor_n = r_motor_p = l_motor_p = l_motor_n = trig=6; echo=7; duration=0; distance=0; 2; 3; 4; 5; //PWM control Right //PWM control Right //PWM control Left //PWM control Left Motor Motor Motor Motor + + - void setup() { pinMode(r_motor_n, OUTPUT); //Initializing pins pinMode(r_motor_p, OUTPUT); pinMode(l_motor_p, OUTPUT); pinMode(l_motor_n, OUTPUT); pinMode(trig,OUTPUT); pinMode(echo,INPUT); //startup digitalWrite(r_motor_n, LOW); digitalWrite(r_motor_p, LOW); digitalWrite(l_motor_p, LOW); digitalWrite(l_motor_n, LOW); Serial.begin(9600); Serial.println("Welcome,our car is working!"); } void loop() { if (Freepath()){Serial.println("all clear"); Foward();} else Turn(); } static boolean Freepath(){ digitalWrite(trig, HIGH); delayMicroseconds(1000); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); distance = (duration/2) / 29.1; if (distance<=20) return false; return true; } 10 static void Stop(){ digitalWrite(r_motor_n, digitalWrite(r_motor_p, digitalWrite(l_motor_p, digitalWrite(l_motor_n, } LOW); LOW); LOW); LOW); static void Left(){ digitalWrite(r_motor_n, digitalWrite(r_motor_p, digitalWrite(l_motor_p, digitalWrite(l_motor_n, } HIGH); LOW); LOW); LOW); static void Right(){ digitalWrite(r_motor_n, digitalWrite(r_motor_p, digitalWrite(l_motor_p, digitalWrite(l_motor_n, } LOW); LOW); LOW); HIGH); static void Foward(){ digitalWrite(r_motor_n, digitalWrite(r_motor_p, digitalWrite(l_motor_p, digitalWrite(l_motor_n, } HIGH); LOW); LOW); HIGH); static void Back(){ digitalWrite(r_motor_n, digitalWrite(r_motor_p, digitalWrite(l_motor_p, digitalWrite(l_motor_n, } LOW); HIGH); HIGH); LOW); static void Turn(){ Left(); Serial.println("turning left"); delay(500); } 11 Video del funzionamento (Video disponibile anche a: http://youtu.be/pZ0Ea-mN5Xg ) 12 Soluzione a più sensori Di seguito il diagramma SFC della soluzione precedentemente descritta. 13 Conclusioni Il progetto ha coperto tutte le fasi della progettazione di una macchinina in grado di poter evitare gli ostacoli incontrati sul suo percorso, analizzando ove possibile diverse soluzioni ai problemi incontrati valutandone i pro e i contro. Lo studio dell’obstacle avoidance ha ricadute pratiche in numerosissimi campi, dalla guida automatizzata alla sicurezza in impianti di costruzione. Negli ultimi anni sono stati fatti grandi passi avanti nel settore, utilizzando soluzioni anche molto diverse dalla proposta, tuttavia l’approccio utilizzato è in linea di massima valido per la risoluzione di una buona parte dei problemi più comuni, e con l’aggiunta di sensori supplementari, quali ad esempio telecamere e tachimetri si può ottenere un comportamento soddisfacente anche in problemi di scala maggiore, come ad esempio la gestione automatizzata di un magazzino come realizzato dalla KIVA Systems. Software utilizzato Microsoft Office Open office Draw Arduino Ide Autore Alessandro Giuseppi email:[email protected] Università degli studi di Roma La Sapienza 3° anno Ingegneria Informatica ed Automatica, indirizzo Automatica 14