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
Scarica

pdf relazione