Daniele Mazzei
Obbiettivi del progetto Realizzazione di un minirobot utilizzando componenti elettronici di base. Apprendere i sistemi di programmazione e controllo dei microcontrollori Scrittura di un software di gestione del comportamento reattivo che possa funzionare su un PIC. Realizzazione di sensori per robot
Il comportamento L’idea è di realizzare un robot con comportamento bio-ispirato Alcuni insetti volano in modo apparentemente casuale fino a che non sentono il bisogno di nutrirsi o di riprodursi Iniziano quindi a seguire le tracce di odoranti per trovare una fonte di nutrimento o un partner (feromoni) Durante il loro moto devono evitare ostacoli
Il Robot Struttura in materiale plastico. Gruppo meccanico di riduzione preassemblato Elettronica costruita su una board “millefori” sagomata Ruote in gomma modello “Lego Mindstorm”
L’Hardware
Il microcontrollore
I Sensori I sensori sono collegati ai convertitori analogico digitale del PIC che leggono con una risoluzione di 10 Bit e accettano ingresso tensioni variabili tra 0 e Vdd
I Motori I 2 motori vengono controllati mediante un ponte H I due segnali PWM vengono inviati come “Enable” del ponte Vengono utilizzati 4 pin digitali del pic per controllare il verso di rotazione dei motori.
La porta seriale Grazie alla presenza della porta seriale risulta notevolmente più semplice la fase di debug del software E’ possibile il download del software sul PIC direttamente dalla seriale senza dover togliere il micocontrollore dallo zoccolo Il segnale della porta seriale è stato adattato alla standard RS 232 mediante l’utilizzo dell’integrato MAX 232
Il software Il software è scritto in Basic mediante l’ambiente di sviluppo MicroBasic della Mikroelettronica. Con l’ausilio della libreria fornita dal software sono state scritte le varie funzioni di controllo dei PWM e di lettura degli ADC Il software è concepito come una macchina a stati finiti Le interazioni con l’ambiente comportano i passaggi da uno stato all’altro
Il software Per simulare correttamente il comportamento di un insetto è necessario inserire un altro stato (Stato “5”) Quando la batteria scende sotto una soglia prefissata il robot passa dalla modalità random a quella inseguimento luce (Stato “4”) Smette di cercare la luce quando la batteria scende sotto una seconda soglia e si ferma per ricaricarsi mediante la cella fotovoltaica (Stato “5”) Quando la batteria torna sopra un valore prefissato ricomincia l’andamento random (sato “o”)
Il software Nel Main vengono chiamate le varie funzioni di inizializzazione del controllore e di configurazione delle porte Mediante uno “switch” viene analizzata la variabile “State” che indica lo stato di lavoro All’avvio il robot parte nello stato “0”, muovendosi random e controllando gli ostacoli Le funzioni di rilevamento ostacoli hanno diritto di cambiare il valore della variabile globale “State” Al giro successivo del main se la variabile “State” è diversa da “0” si attua la strategia di evitamento prescelta
Evitamento ostacoli Le funzioni “Collision_Detection” e “Obstacle_Avoidance” vengono chiamate dal Main nello stato “0” Se viene rilevato un contatto lo stato viene cambiato da “0” a: Stato 1 -> Contatto a Sx Stato 2 -> Contatto a Dx Stato 3 -> Contatto frontale o mancanza suolo Al successivo giro del Main si entra nella strategia di evitamento dipendente dallo stato
Randoom E’ stata realizzata una funzione in grado di generare numeri random: X=mod{(a*Timer),P} Dove: X= numero random generato a = costante Timer = Valore del clock P = Numero primo a scelta Mod{a,b} restituisce il resto della divisone intera fra a e b
Inseguimento luce I sensori di luminosità restituiscono valori fra 50 e 200 (200 -> buio, 50 -> max luce) I motori accettano in ingresso valori di velocità (Duty cicle PWM) fra 50 e 150 Il livello di luminosità viene quindi inviato al motore corrispondente limitandolo ad un max di 150 Essendo inverso l’andamento dei sensori di luminosità si ottiene un fenomeno di inseguimento senza dover incrociare le connessioni
I Test Evitamento ostacoli. Il robot è stato programmato per evitare ostacoli rilevati dai sensori di contatto a switch o dal senore IR frontale E’ stata disattivata la funzione di andamento random per facilitare la ripresa
Avvicinamento alla luce Il test è stato condotto in ambiente buio, ponendo una torcia in un angolo
Fuga dalla luce Il software è stato modificato per invertire il comportamento del robot Ogni sensore di luminosità influenza il motore opposto
Risultati Il robot si è rivelato essere un ottimo strumento di apprendimento per le problematiche relative all’assemblaggio di componenti elettronici di base E’ stato possibile implementare con un solo PIC numerose funzioni tipiche dei comportamenti reattivi della robotica I test hanno dimostrato come il robot sia in grado di seguire la luce ed evitare ostacoli La realizzazione delle varie funzioni ha permesso al robot di avere un comportamento simile ad un insetto
Pro Il robot si è rilevato essere uno strumento funzionale a bassissimo costo per lo studio dell’elettronica, dei microcontrollori e della programmazione di minirobot La realizzazione di robot non in Kit permette una continua evoluzione dell’architettura ed infinite possibilità di utilizzo La presenza della porta seriale funzionante non solo per il download del software è una caratteristica che spesso non è presente sui robot in Kit Grazie alla presenza del caricabatterie integrato il robot si ricarica con qualsiasi tensione in ingresso compresa fra 7 e 14 Volt
Contro La programmazione dei PIC si è rilevata essere di livello non abbastanza alto per essere utilizzata come controllore principale di un robot L’utilizzo delle fotoresistenze come rilevatori di luce in configurazione a partitore di tensione si è rilevata essere una soluzione troppo semplificata La realizzazione della scheda elettronica su board millefori ha comportato numerosi problemi di falso-contatto durante la fase di test
Sviluppi futuri Realizzazione di un PCB dell’architettura elettronica definitiva Sostituzione delle fotoresistenze con fototransistor e mosfet di condizionamento segnale Scrittura del codice in C Implementazione di uno Heap al fine di gestire in modo parallelo i vari task previsti dal comportamento reattivo del robot Inserimento di una connessione wireless per debug senza fili Collegamento della cella fotovoltaica per la ricarica solare