First Bot Project
Studio teorico/pratico


| <--Indietro | Inizio |

Domenica 22-9-2002
Completato l'hardware...
Con il montaggio del circuito di riconoscimento luci e' terminata la parte hardware. Oltre ad aver cambiato forma alla torretta, aggiunto i led di segnalazione all'interno di una sfera trasparente, e spostato fotoresistenze e microfoni su due antenne, ho fatto anche qualche piccolo ritocco meccanico ed elettronico... ho aggiunto dei diodi di protezione sui regolatori di tensione, tolto alcuni collegamenti che avevo predisposto e dimenticato perche' non usati, cambiato la disposizione del trimmer che regola la sensibilita' dei ricevitori all'infrarosso. Ho inoltre sollevato un po'il sensore del gas che finiva con l'essere troppo vicino al pavimento e anche un connettore passante tra il primo e il secondo piano che alle volte non faceva contatto. Ho rimontato i coprisensori che erano saltati via e rinforzato quelli rimasti.... ed infine ho pesato il tutto: 760grammi batterie comprese... salvo imprevisti dovremmo esserci e non dovrei piu' rimettere mano al saldatore:)

Schemi elettrici completi.


Alimentazione

Collegamento PIC

Sensori suono luce gas

Sensori all'infrarosso

Controllo motori

 
 

...ora rimane "solo" da scrivere il software;)


 

Domenica 15-12-2002
Qualche nota sul software...
I programmi in fase di sviluppo presentati fino ad adesso sono stati profondamente modificati per poter adottare il multitasking e ridurre i tempi di elaborazione. Nelle versioni precedenti infatti quasi la totalita' del tempo era impiegata nei cicli di ritardo software per la misurazione distanza ad infrarossi. In realta' ci sono anche altri compiti da portare avanti in parallelo, come le letture periodiche della bussola e degli ingressi analogici, oltre a tutti i piccoli processi di riconoscimento / azione che formeranno la "mente" del robot.

Visto che il tempo piu'stringente e' quello della generazione dei segnali di scansione ad infrarossi ho scelto un ciclo base principale di circa 600uS realizzato con il TIMER0. In pratica ogni 600uS vengono chiamati tutti i processi (scritti con la tecnica degli automi a stati finiti) nella consueta sequenza INPUT --> ELABORAZIONE --> OUTPUT. Tra questi c'e' il ranging ad infrarossi (completato ogni 84 chiamate ), la lettura bussola (completata ogni 6 chiamate), la lettura ingressi analogici (completata ogni 2 chiamate)  e, non ultimo come importanza, il controllo motori con profilo di accelerazione/decelerazione a trapezio per non sforzare troppo gli ingranaggi (come avveniva invece prima con il semplice controllo ON/OFF).

Vi e' poi una serie, ancora abbozzata, di processi sensoriali che "raffinano" ed associano i dati grezzi provenienti dai sensori in informazioni di piu'alto livello, come la presenza di un ostacolo in una direzione ben precisa o la presenza di gas nelle immediate vicinanze. Visto che l'aggiornamento completo dei dati sensoriali avviene periodicamente (ogni 50mS circa per l'infrarosso e ogni 1,2mS per gli ingressi analogici) anche i processi di elaborazione di piu' alto livello vengono portati avanti con questi ritmi. La sincronizzazione viene effettuata con due flags di lettura completata, quando vengono alzati allora vengono eseguiti anche i processi piu' elevati (all'inizio del ciclo base poi questi flags vengono nuovamente azzerati).

In sostanza abbiamo 3 tempi, quello base di 600uS (entro il quale tutti i processi chiamati devono restituire il controllo) e quelli multipli di 1,2 e 50,4mS che servono per l'elaborazione. Il secondo in particolare costituisce la velocita' di elaborazione "high level", il robot prendera' cioe' al massimo 20 decisioni complete al secondo (per esempio fermarsi, o ruotare a destra ecc...) , piu' che sufficienti per interagire con l'ambiente immobile in cui deve muoversi.

Il robot dispone di 3 pulsanti: Avvio, Calibrazione e Telemetria. All'accensione il robot si mette in stato di attesa indicandolo con un motivo luminoso sui led di segnalazione. Nello stesso tempo vengono da subito eseguiti tutti i processi di acquisizione sensoriale. Premendo il pulsante calibrazione sui led vengono riportati gli stati di riconoscimento di suoni, luci e gas, in modo da poter tarare i trimmer di sensibilita' per adattare i circuiti ai livelli presenti sul campo. Premendo il pulsante telemetria si abilita invece la trasmissione seriale dei dati sensoriali attraverso il pin che comanda il led di debug (usato fin dalle prime prove). Sul visualizzatore della telemetria  su PC ho aggiunto le letture analogiche e dei simboletti che si accedono del relativo colore per indicare il riconoscimento di luce, suono o gas. Nel momento in cui ho catturato l'immagine del visualizzatore era in corso la rilevazione del gas (rosso), di una luce sulla fotoresistenza di destra (verde) e di un tono a 4kHz prodotto da un altoparlantino (giallo).

Le luci vengono riconosciute con un algoritmo "antirimbalzo", si controlla cioe' che il livello luminoso rimanga sopra una certa soglia per almeno 48mS e poi si alza il flag di luce riconosciuta. A questo punto il livello luminoso deve tornare al di sotto della soglia per almeno 240mS per far cessare il riconoscimento.

Per il riconoscimento del tono a 4kHz, vista la "sporcizia" decodificata dal PLL, ho invece adottato un metodo "statistico",  viene cioe' considerato buono se in  125 misure (150mS) lo si riscontra al di sopra di una certa soglia per almeno il 70% delle volte.

Il gas e' stato un po' piu' brigoso perche' ho dovuto provare diversi algoritmi prima di trovare una soluzione funzionale. All'inizio avevo provato con un semplice trigger di shmitt, la tensione doveva cioe' salire al di sopra di una certa soglia (alta) per attivare la rilevazione, e poi ridiscendere sotto l'altra soglia (bassa) per far cessare la rilevazione. Il problema e' che il segnale generato dal sensore cambia lentamente  con la concentrazione di gas nell'ambiente, non e' detto che si riescano sempre a passare le soglie, e questo produce problemi di bassa sensibilita' o addirittura rilevazione continua. Una via piu' valida e' misurare la variazione di tensione in un certo periodo indipendentemente dal suo valore di partenza (in sostanza guardare la sua derivata), ma anche qui c'erano problemi di scarsa sensibilita'. La soluzione valida e' stata invece la soglia mobile, che si abbassa seguendo l'abbassarsi della tensione, ma quando la tensione sale rimane fissa. La rilevazione avviene quando la differenza tra tensione attuale e soglia supera un certo valore (piu' e' piccolo maggiore e' la sensibilita'), a questo punto la soglia viene portata al valore della tensione e segue il suo aumento. Il riconoscimento gas cessa quando la tensione comincia a scendere e la differenza con la soglia rimasta piu' in alto diventa abbastanza grande, a questo punto la soglia viene di nuovo abbassata e ricomincia a seguire l'abbassamento della tensione. Questo sistema permette di avvertire anche il passaggio nelle vicinanze di un battufolo di cotone imbevuto di alcol, ma ho dovuto inserire anche un time out nel caso in cui la tensione non riesca ad abbassarsi abbastanza al di sotto della soglia (causando un riconoscimento continuo).
 


| <--Indietro | Inizio |


Pagina, disegni e foto realizzati da Claudio Fin - Ultimo aggiornamento 15-12-2002