Introduzione
L’idea di progettare questo telecomando nasce per scherzo, dettata dall’esigenza di far giocare in modo diverso i miei numerosi gatti, ovviamente divertendomi anch’io con loro. Benché Domotino sia indipendente, capace di evitare gli ostacoli e di regolare la propria velocità in funzione della distanza, grazie al sensore ad ultrasuoni di cui è dotato, non può, purtroppo, competere con la velocità dei felini. Allora ho pensato, appunto ad un telecomando che mi permettesse di pilotarlo in modo autonomo, senza avere vincoli legati al suo software in dotazione o al PC. Oltre a consigliare vivamente la costruzione del robot in oggetto, che darà grandi soddisfazioni una volta realizzato, consiglio anche la costruzione del telecomando che, per quanto semplice possa essere concettualmente, permette in ogni caso di approfondire lo studio dei protocolli I2C e USART.
Descrizione del progetto
Il telecomando è composto da un circuito di alimentazione, un modulo I2C per il pilotaggio del display, il modulo telecomando e due moduli XBEE con relative schede di alloggiamento DTE.
L’alimentazione, (vedi schema in Figura 1) inserita nel modulo telecomando, è fornita da una classica batteria da 9V. Questa tensione è in seguito ridotta a 5V tramite un regolatore di tensione LM7805 o, meglio ancora, un LM2940T-5V che, oltre ad essere pin to pin compatibile con il primo, presenta il vantaggio, essendo un Low Dropout Regulator, di erogare 5V anche quando la batteria, scaricandosi, scende intorno ai 6V. In caso si usi quest’ultimo tipo di Regolatore sarà necessario sostituire i condensatori C11 e C13 con altri di rispettivo valore di 0,47uF ceramico e 22uF elettrolitico, come da datasheet del componente (i componenti sono invertiti rispetto allo schema riportato sotto). Nel PCB è stato lasciato uno spazio libero affinché il regolatore, dotato di un eventuale dissipatore di calore, possa essere piegato in posizione orizzontale.
Figura 1: Schema elettrico relativo all'alimentazione.
Il modulo I2C (vedi schema in Figura 2) è una versione ridotta dello stesso descritto nella Brief Notes BN0013 “Controllare un LCD alfanumerico con interfaccia I2C”, scaricabile dal sito www.Laurtec.it. Infatti, oltre ad essere più piccolo, è privo della linea INT, in quanto non utilizzata in questo progetto. Le sue misure, a PCB realizzato, sono 4x10 cm, misure scelte per essere impilato, volendo, sul modulo telecomando. Le linee di alimentazione del modulo e le linee SDA (data) e SCK (clock) convergono su un connettore maschio a 5 poli (preferibilmente quello piegato a 90°). Poiché lo stesso connettore è presente anche sul modulo telecomando, basterà un semplice cavo flat a cinque poli femmina per assicurare il collegamento tra essi. Grazie al protocollo I2C sarà quindi possibile, con le sole linee SDA e SCK, pilotare un display LCD alfanumerico (interfaccia parallela) utilizzando le otto uscite di un I/O expander come il PCF8574. Per ulteriori delucidazioni o chiarimenti sul protocollo I2C, rimando allo studio del tutorial AN4005-IT scaricabile dal sito www.LaurTec.it.
Figura 2: Schema elettrico della sezione del modulo LCD comandato via I2C.
Il modulo telecomando (vedi schema completo in Figura 3) contiene tutto l’hardware occorrente per il corretto funzionamento del sistema: alimentazione, microcontrollore PCI18F4550, resistenze, condensatori, transistor, connettore DB9, modulo xbee ecc.. Le misure del PCB, una volta realizzato, sono 7x10 cm. Il modulo I2C va ad alloggiarsi (sovrapporsi) esattamente sopra il connettore DB9, per cui il sistema, una volta completato, avrà approssimativamente le misure 7x10x3 cm. La connessione tra i due moduli avviene, come già detto, tramite cavo flat a cinque poli, per collegamento diretto pin to pin. L’interfaccia RS232 è identica a quella presente sulla scheda Freedom II, ovvero presenta i pin TX e RX invertiti, in modo da ottenere il collegamento Null Modem necessario per la comunicazione RS232. Accanto al connettore DB9 sono presenti due connettori maschi a due poli: il più vicino è l’alimentazione del modulo XBEE, l’altro è l’alimentazione fornita dalla batteria (fare attenzione alle polarità). E’ presente anche un connettore maschio a 6 poli, piegato a 90°, per la programmazione on board del microcontrollore, conforme allo standard Microchip. L’hardware prevede, inoltre, otto pulsanti: uno per il reset del sistema, (utile anche per reimpostare Domotino in modalità Remote Control), quattro per il controllo direzione (Avanti, Indietro, Sinistra, Destra) e tre per il controllo velocità (Aumenta, Diminuisci, Stop). Essi devono essere collegati al PIC secondo la seguente tabella:
Reset PORTE.RE3
Forward PORTB.RB4
Back PORTB:RB5
Left PORTB:RB6
Right PORTB:RB7
Stop PORTD:RD5
Decrease PORTD:RD6
Increase PORTD:RD7
Non è stato previsto nessun modulo tastiera, per lasciare piena libertà alla fantasia del realizzatore.
Figura 3: Schema elettrico del modulo telecomando.
Il modulo XBEE è un modulo bidirezionale, prodotto dalla società DIGI, che tramite una interfaccia seriale asincrona (come la vecchia porta COM presente nei PC datati, la porta USB in emulazione seriale o, in questo caso specifico, la periferica UART di cui è dotato il microcontrollore PIC18F4550), consente di trasmettere o di ricevere i dati in radiofrequenza (RF), ovvero senza fili, alla frequenza di 2,4 MHz, compatibilmente allo standard IEEE 802.15.4. Questo modulo (Figura 4) va acquistato a parte insieme alla scheda seriale DTE (Figura 5). Il motivo di questa scelta è dettata dal fatto che i pin del modulo Xbee hanno una piedinatura di 2 mm e quindi non seguono quella standard di 2,54 mm. Per la costruzione del telecomando servono due moduli XBEE (cod. Robot Italy 550010) con relative schede (cod. Robot Italy 990006), uno per la trasmissione ed uno per la ricezione dati. Entrambi andranno prima programmati con gli stessi parametri operativi, in modo che possano comunicare tra loro ad indirizzamento univoco. Una volta effettuata questa procedura, la scheda DTE, con l’XBEE trasmittente alloggiato, andrà collegata al connettore DB9 del modulo telecomando, l’altra al connettore DB9 della scheda Freedom I. La distanza coperta, con questi modelli, è circa 100 metri, più che sufficienti per lo scopo.
Nota
Per un’ottima ed impeccabile descrizione di questi moduli, compresa la fase di programmazione, rimando agli articoli scritti da Giovanni Bernardo, sul suo sito www.settorezero.com . Raccomando inoltre la lettura del pdf “Easy Bee”, scritto dallo stesso autore, liberamente scaricabile dal sito www.robot-italy.com.
Per il protocollo EUSART rimando al capitolo XII del tutorial “C18 Step by Step”, scaricabile dal il sito www.LaurTec.it
Figura 4: Modulo Xbee con antenna.
Figura 5: Scheda DTE per modulo XBee.
Breve analisi del firmware
Il Firmware, nella sua semplicità, contiene all’interno tutte le routine necessarie per il corretto pilotaggio a distanza del robot ma, per una migliore comprensione delle stesse, è assolutamente necessario leggere l’intero progetto “Domotino”, presente anch’esso sul sito www.Laurtec.it. E’ inoltre necessario analizzare, in maniera corretta, anche il codice Visual Basic che invia i comandi. Di questi, quelli che interessano allo scopo sono:
- Remote Control
- Forward
- Back
- Left
- Right
- Stop
- Speed Increase
- Speed Decrease
Ognuno di questi comandi è inviato come un array di caratteri composto da otto byte, ma quelli realmente importanti sono contenuti nelle prime due celle del vettore, cella 0 e cella 1, dato che tutti gli altri non vengono modificati nel tempo. Riporto qui l’elenco completo dei comandi corrispondenti alle routine principali:
- celle array (vettore) 0 1 2 3 4 5 6 7
- Remote Control M 6 0 0 0 0 0 0
- Stop S 0 0 0 0 0 0 0
- Forward F v 0 0 0 0 0 0
- Back B v 0 0 0 0 0 0
- Left L v 0 0 0 0 0 0
- Right R v 0 0 0 0 0 0
Ad eccezione dei comandi Remote Control e Stop, dove il secondo byte nella cella 1 dell’array è fisso, negli altri comandi la lettera “v” indica la velocità del robot, che può variare da 0 a 5, in funzione del segnale PWM applicato ai motori; questo vuol dire che si può anche fermare Domotino, diminuendola, fino a portarla a zero.
// Inizializzo il robot in modalità Remote Control
Remote_Control_Init ();
// Piccola pausa per stabilizzare il sistema
delay_ms (1000);
// Riscrivo la seconda cella dell'array, contenente il carattere "6", con il carattere "0",
// in quanto la velocità del robot che non può essere superiore al carattere "5"
WriteUSART (Send_Byte[1] = '0');
while (BusyUSART());
La prima riga lancia la routine che invia il comando M6000000 al robot e lo imposta in modalità Remote Control. Dopo la pausa di un secondo, scrivo il carattere “0” nella posizione 1 dell’array (ovvero riscrivo il 2° byte). A questo punto sarà possibile agire indifferentemente sia sulla velocità che sulla direzione, senza nessun vincolo al riguardo, sarà quindi possibile cambiare direzione di marcia mantenendo la velocità costante, oppure cambiare velocità, portarla a 0 oppure incrementarla fino 5. Infatti se analizziamo, per esempio, quest’altra parte del codice:
if (PORTDbits.RD7 == 0) {
delay_ms(300);
if (Send_Byte[1] < '5') {
Send_Byte[0] = Send_Byte[0];
Send_Byte[1] = Send_Byte[1] + 1;
Send_Byte[2] = '0';
Send_Byte[3] = '0';
Send_Byte[4] = '0';
Send_Byte[5] = '0';
Send_Byte[6] = '0';
Send_Byte[7] = '0';
for (i = 0; i < Byte_to_Send; i++) {
WriteUSART (Send_Byte[i]);
while (BusyUSART());
}
}…
else
Send_Byte[1] = '5';
risulta evidente che, avendo in precedenza “azzerato” la cella 1, ed essendo quindi la stessa inferiore a “5”, posso aumentarla fino al suo massimo valore premendo semplicemente il pulsante collegato al pin RD7 della PORTD. D’altra parte, la cella 0, contenente il comando per il movimento, resterà invariata fino ad un cambio di direzione e solo in quel caso verrà riscritta. La stessa logica è applicabile alle altre routine presenti nel firmware.
PCB
Ambedue i moduli, I2C e Telecomando, sono stati progettati per ottenere un PCB a faccia singola. Nel modulo telecomando è previsto un unico ponticello vicino al connettore di programmazione (in alto a destra, sotto il connettore di alimentazione batteria). Purtroppo le prove di sbroglio, che ho condotto sia con Eagle che con Proteus, non permettevano di ottenere lo stesso risultato con tutti i componenti a bordo in un unica basetta monofaccia. Da qui, la decisione di “scorporare” il progetto in due moduli e immaginarlo in questo modo, al fine di semplificarmi il lavoro e di semplificarlo, eventualmente, ad altri. Le immagini per realizzare i PCB sono disponibili per il Dowload a fine articolo.
Contenitore
Per racchiudere tutto l’hardware ho utilizzato una scatola di derivazione con le seguenti misure: 16x12x8. Il modulo telecomando, con il modulo I2C impilato sopra, è stato distanziato di circa 4 cm dal lato più corto in modo da poter inserire all’esterno un altro connettore DB9 femmina. Il collegamento tra questo connettore e quello presente sul modulo Xbee l’ho realizzato con una prolunga DB9 maschio-femmina del tipo a crimpare, con relativo cavo flat lungo circa 20 cm. Il display LCD è stato collegato tramite prolunga realizzata con uno spezzone dello stesso cavo lungo 12 cm e connettori dei tipo strip maschio – femmina 16 poli ad una fila. La lavorazione del contenitore, effettuata interamente con “CNC manuale” (ovvero righello, trapano, lima, carta vetrata ed olio di gomito) non ha presentato particolari problemi: in un paio d’ore ho modellato la finestra per il display ed in un’altra mezzora ho fatto i fori per i pulsanti, utilizzando una dima forata in modo da ottenere una certa equidistanza tra essi. Il risultato finale, pur non essendo il massimo dello stato dell’arte, ripaga comunque degli sforzi sostenuti.
Stato di avanzamento
Dalle Figure 6, 7, 8 è possibile immaginare come abbia proceduto, per vari stadi, alla realizzazione del prototipo.
Nota
Al display LCD, in corrispondenza dei suoi pin, ho saldato uno strip femmina 16 poli, compatibile con lo strip maschio montato sul modulo I2C. La prolunga, di cui ho parlato prima, deve avere le stesse caratteristiche.
Figura 6: Moduli del sistema ad assemblaggio ultimato.
Figura 7: Assemblaggio dei pulsanti sulla scheda del telecomando.
Figura 8: Assemblaggio finale nella scatola di derivazione.
La tastiera, disposta in modo abbastanza intuitivo, presenta i pulsanti di comando movimento sulla parte sinistra, con il pulsante Stop al centro. I pulsanti per il controllo velocità si trovano sulla parte destra mentre il pulsante rosso (tasto reset) è stato messo volutamente in quella posizione, in modo da evitare errori durante il pilotaggio. Per dare un tocco estetico in più, sarebbero necessarie le etichette sotto ogni pulsante ma, poiché non ne sento l’esigenza, ne faccio volentieri a meno.
Esempio di utilizzo con il Robot Domotino
Considerazioni finali
Premesso che questo progetto può rappresentare una base di partenza per progetti più complicati, come ad esempio la gestione multipla di più moduli Xbee, qualcuno potrà obbiettare che l’uso di un PIC18F4550 per questo progetto è sprecato, in quanto non vengono sfruttate appieno le sue potenzialità e neanche il suo hardware interno. Devo dire che ha perfettamente ragione… avrei potuto sfruttare, per esempio, il convertitore analogico-digitale del microcontrollore per la lettura dello stato della batteria o, in alternativa, avrei potuto usare un PIC più semplice e compatibile come il PIC16F877A. Ma essendo un esperimento votato al gioco, non ho voluto spendere ulteriori risorse per un qualcosa che, in fin dei conti, resterà all’interno delle mie mura domestiche. Lascio quindi ad altri il compito di migliorarlo e di rendere il firmware più completo.
Anche se non specificato nello schema, è ovviamente opportuno inserire un interruttore di accensione-spegnimento nel circuito di alimentazione, al fine di non lasciare il sistema in attività fino allo scaricarsi della batteria. Suggerisco inoltre, (cosa che non ho fatto io), un connettore ad incastro per una eventuale alimentazione esterna del sistema.
Per un eventuale risparmio energetico si può procedere in due modi: escludere la retroilluminazione del display oppure escludere lo stesso dal montaggio, in quanto il sistema funzionerà ugualmente. In quest’ultimo caso si può fare a meno della realizzazione e montaggio del modulo I2C.
La trasmissione dati, rapportata al software in dotazione, si è mostrata inizialmente più lenta del previsto. Se si è troppo veloci nell’impartire un comando, dopo avere impostato il robot in modalità Remote Control, può capitare di doverlo impartire nuovamente. Questo succede perché Domotino, oltre a ricevere, ritrasmette gli ordini ricevuti al terminale della GUI prevista inizialmente per il suo pilotaggio. Questo, però, non pregiudica affatto il perfetto funzionamento dell’hardware. Essendo questo un upgrade del progetto originale, rimando innanzitutto all’autore dello stesso ogni eventuale critica o suggerimento. Ciò non toglie, comunque, la facoltà di fare la stessa cosa a chiunque voglia cimentarsi in questo bellissimo esperimento, ovvero la costruzione del robot Domotino, o di qualsiasi altro robot, e dotarlo di un relativo telecomando.
Bibliografia
Download
Tipo File | Scarica File | Versione | Ultimo Aggiornamento | Descrizione | |
|
|||||
|
Download | 1.0 | 25 Gennaio 2014 | Schemi elettrici e PCB | |
|
Download | 1.0 | 25 Gennaio 2014 | Codici sorgente scritti in C18 |
complimenti
Interessante l'uso e la descrizione dei moduli XBee. E' utile questo progetto per capirne il funzionamento.LucaComplimeti
Bravo, bell'articolo, anche in questo caso ho imparato qualcosa di nuovo.Chissà che prima o poi non abbia necessità di usare un modulo Xbee.Ciao e grazie della pubblicazione :PRE: Telecomando RF con modulo XBee
Ciao Sergio, l'unico difetto che ho trovato per questi moduli è il prezzo... per il resto sono veramente una bomba.MarcelloRE: Telecomando RF con modulo XBee
Molto interessante.Stavo giusto ipotizzando un sistema di controllo WiFi e potrei vedere di sperimentare anche questo.You don`t have permission to comment here!