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.
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.
* [ 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.
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:
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:
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...