I.I.S. A. Badoni Relazione Release Alpha 2.0 I.I.S. S. Ten. Vasc. A. Badoni sede di via Rivolta, 10 23900 Lecco LC Italia T: 0341 365369 Mail: lcis00900x@istruzione.it Web: www.isbadoni.it
Relazione Introduzione In data 08-03-2012 è stata rilasciata versione Alpha 2.0 del prototipo di robot mobile dell area di progetto Arduino Mobile Robot. Il test ufficiale si è svolto alle ore 18.30 di Giovedì 08-03-2012 in casa di Valsecchi Lorenzo; erano presenti Valsecchi Lorenzo e Valsecchi Riccardo. E stato deciso di modificare il target della versione Alpha 2.0. In particolare si è preferito implementare il movimento autonomo prima del controllo da remoto. Questa decisione è seguita al fatto che sono sorte alcune piccole problematiche riguardanti la comunicazione senza fili e il giroscopio. Descrizione Prototipo La versione Alpha 2.0 del prototipo presenta le seguenti caratteristiche: Movimento autonomo senza alcun controllo da parte di un remoto; Capacità di attraversare, seppur non in linea retta un corridoio; Scocca ultimata. Anche se non completo, si può considerare parte integrante della versione Alpha 2.0 anche il caricabatterie progettato e costruito da Calin Liviu, per consentire una corretta ricarica della batteria al Litio. Codici Di seguito sono riportati i codici usati rispettivamente sul Robot. Codici Implementati sul Robot /* * AMR - Arduino Mobile Robot * Author Valsecchi Lorenzo * Version Alpha 2.0 * Description: il Programma permette al Robot di muoversi attraverso un corridoio */ //DICHIARAZIONE delle variabili globali int E1 = 6; //Pin 6 di Arduino che controllera la velocità del Motore 1 int M1 = 7; //Pin 7 che controllerà la direzione di marcia del Motore 1 int E2 = 5; //Pin 6 di Arduino che controllera la velocità del Motore 2 int M2 = 4; //Pin 7 che controllerà la direzione di marcia del Motore 2 int value; //Valore della velocità corrente degli spostamenti int distanzasicurezza; //Distanza sotto la quale non avvicinarsi agli ostacoli boolean sensorecentrale, sensoresxanteriore, sensoredxanteriore, sensoreposteriore, sensoresx, sensoredx;
//Pin di ARDUINO (Axxxx) corrispondenti ai vari sensori int Adietro = A3; int Adavanti= A2; int Adx=A0; int Asx=A4; int Asxd=A5; int Adxd=A1; int apprezzamentomedia=100; //Numero di campioni da prendere per la media //Variabili di ascolto dei sensori int dietro,davanti,dx,sx,sxd,dxd; //Set della velocità di crociera int velocita; int flag; int flagsvolta=0; //INIZIALIZZAZIONE del dispositivo void setup() pinmode(m1, OUTPUT); pinmode(m2, OUTPUT); Serial.begin(9600); //Inizializzazione della comunicazione seriale distanzasicurezza=150; //Set della distanza di sicurezza velocita=75; value=velocita; /* M1,HIGH & M2,LOW --> gira a sinistra M1,LOW & M2,HIGH --> gira a destra flag=1 avanti flag=-1 indietro flag=2 destra flag=-2 sinistra */ flagsvolta=-1 sinistra flagsvolta=1 destra void loop() leggisensori(); if(sensorecentrale==false && sensoresxanteriore==false && sensoredxanteriore==false) analogwrite(e1, value); analogwrite(e2, value); flag=1;
if(sensorecentrale==false && sensoresxanteriore==false && sensoredxanteriore==false && sensoresx==true && sensoredx==true) analogwrite(e1, value); analogwrite(e2, value); flag=1; if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && (flag==1) && flagsvolta==1) digitalwrite(m2, LOW); if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && (flag==1) && flagsvolta==0) digitalwrite(m2, LOW); if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && (flag==1) && flagsvolta==-1) if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && (flag==1) && flagsvolta==1) if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && sensoresx==true) if(sensoresx==true)
if(sensorecentrale==true && sensoresxanteriore==true && sensoredxanteriore==true && (flag==1) && flagsvolta==-1) if(sensoredx==true) digitalwrite(m2, LOW); if(sensoresx==true) if(sensoredx==true) digitalwrite(m2, LOW); if(sensoresxanteriore==true && sensorecentrale==false && sensoredxanteriore==false) digitalwrite(m2,high); if(sensoresxanteriore==false && sensorecentrale==false && sensoredxanteriore==true) digitalwrite(m2,low);
if(sensoresxanteriore==false && sensorecentrale==true && sensoredxanteriore==true) digitalwrite(m2,low); if(sensoresxanteriore==true && sensorecentrale==true && sensoredxanteriore==false) digitalwrite(m2,high); void leggisensori() dietro=0; davanti=0; sx=0; dx=0; sxd=0; dxd=0; //Lettura non singola ma facendo una media di 100 valori int indicemedia = 0; for(indicemedia = 0; indicemedia < apprezzamentomedia; indicemedia ++) dietro = dietro + analogread(adietro); davanti = davanti + analogread(adavanti); sx = sx + analogread(asx); dx = dx + analogread(adx); sxd = sxd + analogread(asxd); dxd = dxd + analogread(adxd); dietro = dietro / apprezzamentomedia; davanti = davanti / apprezzamentomedia; sx = sx / apprezzamentomedia; dx = dx / apprezzamentomedia; sxd = sxd / apprezzamentomedia; dxd = dxd / apprezzamentomedia; //Se la distanza letta dai sensori è superiore alla distanza di sicurezza, viene alterato il relativo flag if(dietro>distanzasicurezza)
sensoreposteriore=true; sensoreposteriore=false; if(davanti>distanzasicurezza) sensorecentrale=true; sensorecentrale=false; //if(dx>(distanzasicurezza*2)) if(dx>250) sensoredx=true; sensoredx=false; //if(sx>(distanzasicurezza*2)) if(sx>250) sensoresx=true; sensoresx=false; if(sxd>distanzasicurezza) sensoresxanteriore=true; sensoresxanteriore=false; if(dxd>distanzasicurezza) sensoredxanteriore=true;
sensoredxanteriore=false; Documentazione multimediale Foto Video http://arduino5ib.altervista.org/wp-content/uploads/2012/03/c.mp4 Prossimi Obiettivi per la versione Beta 1.0 Di seguito sono elencate le modifiche che porteranno al rilascio della versione Beta 1.0 del prototipo: Perfezionamento del movimento autonomo introducendo un piccolo sistema di navigazione Hardware o Software; Controllo da remoto ottenuto con il controller di nostra produzione; Comunicazione senza fili e Gestione delle credenziali.
Conclusione Il test ha prodotto buoni risultati. Si dovrà lavorare ancora molto per migliorare i codici del movimento autonomo. Da oggi inizieranno anche i lavori per assemblare il controller remoto. Civate, 08-03-2012 I Presenti al momento del Test (Valsecchi Lorenzo) (Valsecchi Riccardo) Responsabile Area di Progetto (Valsecchi Lorenzo)