TUTORIAL:
COME CONTROLLARE UN ROBOT DA PC




Premessa


Prima di iniziare il tutorial voglio ricordare a chi legge che lo scopo principale di questa guida è quello di realizzare un sistema di controllo per un Robot (sarebbe meglio chiamarlo Rover) sfruttando due moduli radio Xbee.
I moduli Xbee sono molto diffusi, economici, facili da configurare, facilmente consentono di collegare un modulo al computer (tramite seriale o usb) e l'altro al microcontrollore.
In rete non si trovano facilmente guide in italiano simili a questa, perciò spero torni utile a molti.
Un'altra premessa doverosa, non sono un "Guru" della robotica anzi mi ritengo ancora un principiante, perciò è possibile che i circuiti che propongo possano essere modificati/migliorati, chiunque può farsi avanti in qualsiasi momento. Mi trovate sul forum del sito di Ivotek (www.ivotek.it/forum) oppure su quello di Robot Italia (forum.roboitalia.com/index.php).



INTRODUZIONE


Il circuito che vado a  presentare è composto da un nucleo di componenti che possono essere considerati il cuore di un robot di facile costruzione, ritengo inutile descrivere i passaggi per la costruzione del robot, visto che in rete si trovano guide molto semplici ed utili. Di seguito descriverò rapidamente il rover costruito da me, per passare successivamente alla descrizione del circuito di telecontrollo.


I componenti utilizzati sono:

- Microntrollore 16F628A
- Integrato L293D (ponteH)
- 2 Moduli Xbee serie 1
- Scheda Seriale DTE per Xbee 990.006
- Scheda Xbee Simple Board 990.001
- Set Cingoli Tamiya
- 2 Servi Standard Hitec
- 12 pile ricaricabili NiMh

I servi sono stati modificati per la rotazione continua, è inoltre stata eliminata l’elettronica interna che limitava la tensione a soli 6 volt. Dopo la modifica è stato possibile utilizzare una tensione di alimentazione di 12 volt che ha reso il robot molto più veloce.
Il telaio è stato realizzato in compensato da 5 mm robusto e leggero quanto basta, è stato necessario effettuare dei fori da 4 mm per collegare le ruote dei cingoli (i cui mozzi sono stati allargati tramite un trapano). Tre barrette filettate da 4 mm collegano le due parti del telaio stabilizzando il tutto.
Il circuito di azionamento del robot consiste in un microcontrollore pic16F628A che costituisce il “cervello” operativo, i pins del pic sono collegati al ponte h integrato (L293D) e da questo ai servi.
Il modulo Xbee è collegato anch’esso al microcontrollore e ciò permette la trasmissione e ricezione dei dati (pilotaggio servi, lettura sensori). L’alimentazione è stata separata per impedire disturbi alla logica interna degli integrati (i servi sono forti carichi induttivi). Un pacco da 4 batterie (5 volt) alimenta microcontrollore e Xbee. Un pacco da 8 pile (12 volt) è stato usato per alimentare l’integrato ponte h e quindi i servi.
Il computer è collegato tramite porta seriale al secondo modulo radio Xbee, esso è montato sulla scheda seriale, un cavo null-modem collega la scheda al pc. Un programma creato da me con Autoit 3 (©1999-2007 Jonathan Bennett & AutoIt Team) permette di teleguidare il robot e di leggere il valore dei sensori. Sotto si possono osservare alcuni screenshot del programma e una spiegazione del suo funzionamento.




ELETTRONICA

Di seguito inserisco uno schema concettuale riassuntivo, in modo da chiarire le idee prima di approfondire le singole parti del progetto.


schema concettuale generale




Il centro dell’elettronica a bordo del Rover, è costituito dal Microcontrollore 16F628A prodotto dalla Microchip. Quattro uscite del microcontrollore sono collegate all’integrato ponte h, gestendone gli input è permesso il pilotaggio dei servi. Due uscite sono invece utilizzate per la ricezione e la trasmissione dei dati da/verso il modulo Xbee.
Il firmware del pic è stato scritto in MikroC, utilizzando le apposite librerie per la gestione della trasmissione seriale RS232.
Qui sotto è visibile lo schema semplificato relativo alle connessioni tra computer e modulo Xbee. Il modulo radio è montato su di una apposita scheda seriale, questa a sua volta è connessa tramite cavo incrociato null-modem*  alla presa seriale del computer, l’apposita scheda seriale converte in automatico i segnali a +12 e -12 volt del computer in segnali a 3,3 volt compatibili con il modulo Xbee.





Schema Xbee-Computer


* [ Il cavo null-modem è facilmente realizzabile, basta infatti unire le tre uscite 2-3-5 di un connettore con le rispettive dell’altro connettore (entrambi i connettori devono essere femmina), incrociando l’uscita 3 del primo con l’entrata 2 del secondo, e l’uscita 2 del primo con la 3 del secondo, entrambe le uscite 5 (GND) devono essere collegate direttamente. Il cavo permette di inviare e ricevere dati, l’apposita scheda seriale converte in automatico i segnali a +12 e -12 volt del computer in segnali a 3,3 volt compatibili con il modulo Xbee. ]



Di seguito si può osservare il circuito di pilotaggio del Rover, si può notare il microcontrollore, l’integrato L293D, il modulo Xbee, i due servi Hitec.
La comunicazione tra Xbee e microcontrollore avviene in modo particolare, la logica di alimentazione del pic è a 5 volt mentre gli input/output dell’Xbee devono essere a 3,3 volt, per ottenere la riduzione della tensione in uscita dal microcontrollore è stato utilizzato un partitore di tensione con due resistenze da 10000 e 18000 ohm, non ci sono problemi invece per l’uscita dell’Xbee.





schema xbee-robot




Il modulo Xbee è stato alimentato a 5 volt, ciò è reso possibile dal fatto che il medesimo è stato montato su apposita scheda “Simple Board”, che permette di collegare all’entrata denominata “Vin” una tensione compresa tra i 4 e gli 8 volt, ciò non sarebbe stato possibile senza scheda in quanto il modulo singolo non tollera tensioni superiori ai 3,3 volt
ATTENZIONE:
bisogna rispettare rigorosamente la tensione massima data all’Xbee, tensioni superiori rischiano di danneggiare irreparabilmente il modulo.
Il modulo utilizzato appartiene alla serie 1, questa serie a differenza della serie 2 ha una minore portata di trasmissione e non consente l’implementazione di comunicazioni a rete tra più moduli. Tuttavia va aggiunto che l’utilizzo della serie 1 non ha reso necessario l’aggiornamento del firmware interno e l’impostazione di trasmissione tramite software X-CTU. La stessa scheda seriale non consente di aggiornare il firmware, quindi un progetto futuro potrebbe utilizzare i moduli della serie 2 accoppiati ad una scheda USB che invece consente di gestire le impostazioni dei moduli.



FIRMWARE LATO MICROCONTROLLORE

Per controllare il Rover abbiamo bisogno di scrivere un programma sul computer che gestisca i dati in entrata ed in uscita, questa parte viene gestita dal programma "Max Interface" realizzato da me in Autoit3.
Per gestire i dati in arrivo sul Rover bisogna scrivere un apposito firmware sul pic 16F628A, il firmware dovrà svolgere le seguenti operazioni:
1- Ricezione Dati modulo Xbee
2- Interpretazione-Analisi dati in entrata da parte del Pic
3- Il Pic gestisce i motori in output (rotazione avanti, indietro, destra, sinistra)
4- Facoltativo: il pic invia un feedback al computer

Ad esempio: se inviamo la lettera W dal computer, questo dato sarà recepito dall'Xbee sul Rover e inviato al microcontrollore. Il pic leggerà il dato, grazie ad un "if" possiamo decidere quello che il Rover dovrà fare, nel nostro caso alla ricezione della lettera W il Rover dovrà andare dritto (output: entrambi motori avanti).
Realizzare il firmware è semplice poichè spesso ci sono librerie apposite per la gestione della comunicazione seriale.
Prossimamente conto di aggiornare il tutorial inserendo maggiori specifiche  e parti di codice.





INTERFACCIA GESTIONE LATO COMPUTER

Il secondo modulo Xbee è collegato direttamente al computer tramite apposita scheda seriale ed un cavo null-modem. Per pilotare il rover ho creato un apposito programma con Autoit 3.
Il programma in questione permette di:

- Inviare/ricevere dati al/dal robot
- Settare la trasmissione seriale (Porta di trasmissione, Velocità di trasmissione, Numero di Bits…ecc)
- Visulaizzare i dati inviati e ricevuti su apposita interfaccia
- Inviare velocemente dati anche tramite pressione diretta di tasti sulla tastiera

Non ci sono particolari cenni sull'installazione, il programma è stand alone, può essere avviato on air con un semplice click. Potrebbero sorgere problemi qualora sul vostro computer non sia prsente la dll chiamata "commg.dll" ho inserito una copia della libreria nella cartella in cui è contenuto il programma.
Per usare l'interfaccia dovrete solo copiare la dll nella cartella System32 del vostro pc, oppure lasciarla nella stessa cartella in cui è contenuto il programma.

Uno schermo mostra i dati ricevuti (<<) e inviati (>>), le scritte si colorano di blu nel caso in cui l’ultimo dato sia stato inviato, si colorano invece di rosso se l’ultimo dato è stato ricevuto.
Le stringhe di dati inviate alla porta selezionata, possono essere modificate, ciò permette di adattare il programma alle esigenze di chi lo utilizza (ad esempio potreste utilizzare un protocollo a più lettere)
Cinque pulsanti consentono di inviare direttamente delle stringhe predefinite, questo risulta comodo per gestire la marcia del robot. Un’apposita opzione abilita l’invio di stringhe tramite tastiera, si possono utilizzare i pulsanti: W-S-X-A-D, oppure le quattro frecce direzionali e la barra spaziatrice.
Appena aperto il programma presenterà la seguente schermata:



max interface schermata 1

La prima riga permette di selezionare la porta seriale su cui è collegato l'Xbee. Le righe successive gestiscono alcuni parametri della connessione seriale, se non avete particolari esigenze lasciate i dati di default.
Dopo aver selezionato i dati base della comunicazione apparirà la schemrata principale:



max interfaccia immagine


Questa immagine si riferisce alla seconda versione del programma sulla quale stò ancora lavorando (spero di renderla disponibile  a breve). Il programma nella sua versione base consente di visualizzare tutti i dati inviati e ricevuti, i 5 pulsanti permettono di inviare rapidamente 5 stringhe preinpostabili. In ogni momento è possibile cambiare i dati di trasmissione grazie alla riga in alto (Settaggi). Spuntando la casella "Abilita Tastiera" saranno abilitati i tasti W-S-X-A-D , questa opzione è comoda perchè consente al Rover di girare nelle quattro direzioni (logicamente dovrete impostare sul microcontrollore le azioni precise da fare qualora riceva le lettere abbinate ai pulsanti).

Posizionando il cursore del mouse su tasti o etichette, saranno visualizzate delle nuvolette che ricordano la funzione dell’oggetto selezionato. In ogni momento è possibile reimpostare la comunicazione, gestendo velocemente le varie opzioni, è possibile modificare anche il tempo di attesa, preimpostato sui 40 msec, dei dati ricevuti.
(ATTENZIONE: un tempo elevato di attesa rallenta notevolmente la rice-trasmissione dei dati).




NOTA SULLA VERSIONE 2

[Come si può leggere dall'immagine sopra, nella seconda versione del programma sarà possibile inviare le stringhe usando un joystick usb collegato al Pc. l momento stò ancora perfezioanndo la versione 2, se il tutorial si rivelerà interessante conto di aggiornare il software a breve.]



CONCLUSIONI E IDEE

In conclusione vi posso dare alcuni consigli per eventuali migliorie da implementare nel vostro Rover.
Sul lato Microcontrollore potrete aggiungere degli "if" logici il cui scopo è quello di leggere periferiche, leggere sensori, leggere memorie esterne (o quella interna del pic), una volta letto il valore il Pic invierà indietro il valore letto, che voi visualizzerete sul computer.

Un'applicazione divertente sarebbe quella della lettura di un sensore di temperatura collegato ad una uscita analogica del pic, indietro riceveremo la temperatura rilevata dal Rover. Interessante anche la lettura dello stato batteria, realizzambile anche questo collegando il polo della batteria ad un'uscita analogica del Pic.
Insomma scatenate la fantasia.

Spero che la guida torni utile a qualcuno, ringrazio Ivotek per lo spazio che mi ha dato sul suo sito.
Potete trovare il programma qui.

Saluti, Max Robot...