Se ben sviluppato, un controllo diventa molto utile e semplice da integrare nei progetti. Questo tipo di soluzione offre infatti uno "strumento" riutilizzabile N volte.
controllo utente tutorial

Allego l'esempio VB di controllo che mi ha ispirato e aiutato a capire come fare, e questa guida che ragguaglia sul metodo per la creazione di controlli.

 

 

Come previsto, in breve tempo ho integrato e associato la lettura dell'angolo di BigWheely su computer.

È qui che mi sono accorto che i dati letti dal modulo compass risultano essere del tutto inutilizzabili. Il comportamento è davvero strano e incontrollato.

Ho iniziato a fare verifiche e tests, questo video dimostra bene il problema:

 

Allegati:
Scarica questo file (esempio_controllo.zip)esempio_controllo.zip[ ]224 kB

Dopo i primi test fatti con l'esempio della libreria HNC5883L.h e man mano che anche il software VB prende forma, ho deciso di voler rappresentare graficamente la direzione della bussola.

Ho quindi iniziato a progettare un controllo in VB.NET in grado di indicare una direzione e in cui sia possibile rappresentare un range di tolleranza nel quale una direzione possa ritenersi accettabile.

teoria trigo controlloVBcompass r

Essendo un po' arruginito con la geometria e il calcolo trigonometrico, ho dovuto spolverare qualche manuale tecnico e qualche sito come questo che trattasse questi argomenti. Infine però ho delineato il problema e ho programmato il nuovo controllo VB.NET.

NOTA: prima di mettermi a programmare, ho fatto alcune ricerche per verificare se ci fosse qualcosa di già fatto, ma non ho trovato niente di interessante e soprattutto FREE e open source.

 

Questo è il primo prototipo funzionante del nuovo controllo:

prototipo controllo compass

 

e questo è il banco di prova per testare il nuovo controllo:

banco test controlloVB compass

Ora sono pronto ad utilizzarlo per leggere i valori di Arduino ...

 

Il modulo HMC5883L è un magnetometro digitale a 3 assi.

Sembra incredibile poter avere una bussola tra le mani e racchiudere tutto questo in un piccolissimo chip grande circa 4mm x 4mm !

Questo tema è decisamente interessante, anche perchè potrebbe dare un utile informazione a BigWheely per identificare o correggere le direzioni da prendere. Determinarne la posizione di un oggetto nello spazio, (o perlomeno nel piano) è un argomento complesso, e anche se non ho ancora analizzato fino in fondo come sarà possibile conoscere l'esatta posizione di BigWheely nel salotto di casa, sono sicuro che una bussola potrà dare un sostanzioso aiuto.

IMG 0079 r IMG 0080 r

Ho acquistato questo modulo qui, dove viene fornito il datasheet (nella pagina hardware dedicato a questo modulo ho allegato un datasheet simile, ma cone alcune informazioni che su quello del sito di acquisto non sono indicate).

Come si collega

A differenza di altri moduli e sensori che generalmente utilizzano porte digitali, in questo caso è necessario utilizzare le porte di Arduino destinate per l'interfaccia di comunicazione I2C che corrispondono alle entrate analogiche A4 e A5.

Lo scheda seguente mostra come collegarlo (questo sito spiega un po' di teoria e come si collega):

Compass-6 0


Inoltre è possibile scaricare e installare anche una apposita libreria denominata HMC5883L.h correlata da un esempio che permette di muovere i primi passi con questo IC.

Attenzione da dove viene scaricata la libreria, io l'avevo trovata sul sito LoveElectronics, un sito che offre un interessante Tutorial e che affronta piuttosto bene l'argomento in modo semplice da capire. Questa versione della libreria credo sia piuttosto vecchia e obsoleta, per funzionare infatti ho dovuto (dopo ore di debug) apportare delle modifiche ai sorgenti della libreria perchè non veniva compilata correttamente.

In particolare è stato necessario sostituire il comando send --> write e il comando receive --> read su tutto il codice scritto in C++, la libreria Wire utilizzata non usa più i comandi send e receive da tempo.

Consiglio quindi di utilizzare la libreria allegata in fondo a questa pagina presa direttamente dal sito del rivenditore.

Ho trovato sul web molto materiale e siti che spiegano più o meno bene il funzionamento di questo dispositivo e delle influenze esterne che può subire. Spesso infatti viene utilizzato assieme ad un accelerometro in grado di compensare l'inclinazione rispetto il piano. Mi rendo conto che non è facile spiegare queste teorie in poche righe, per questo è forse il caso di approfondire l'argomento direttamente su internet. Una pagina sul sito Love Electronics spiega abbastanza bene questi concetti.

 tiltcompass-calc2

 

Calcolare il Magnetic declination

Il Tutorial del sito LoveElectronics spiega meglio di altre fonti come calcolare la "magnetic declination" del luogo in cui ci si trova. Questo valore compensa la differenza tra Nord Magnetico e Nord Geografico.

Seguendo alla lettera questo Tutorial, ottengo quindi i dati necessari per il calcolo della declinazione magnetica terrestre, nel mio caso:

declinazione magnetica mappa

Utilizzando il sito suggerito infine ottengo il valore richiesto.

declinazione magnetica conversione

 

Finalmente si può così ottenere una direzione espresso in gradi.

hmc5883l-tut1-4

 

 

Devo ammettere che la webcam, quando mi è arrivata a casa, pensavo fosse più piccola !
Dalle foto online mi era apparsa più minuscola, ma non mi sono scoraggiato e ho trovato il metodo per montarla sul mio BigWheely !

Sono stato felice anche di apprendere, dopo le dovute misurazioni, che il consumo medio della webcam si aggira sui 300 mA e non necessariamente i 1000 mA come dalle specifiche. Ho potuto sfruttare il regolatore di tensione già presente nel circuito della web cam e collegarlo direttamente alle batterie (4 batterie tipo AA ricaricabili).

Questa è la prima immagine trasmessa dal dispositivo, alimentato interamente a batterie:

1st test video battery

E questo invece è il primo video trasmesso da BigWheely intanto che è in movimento:

 

 

NOTA BENE: L'ordine di muoversi non è impartito in modalità remota ma bensì da un semplice sketch che ho caricato su Arduino che muove le ruote a intervalli regolari !!!

 

Ora che ho definito e testato il protocollo di trasmissione creato ad HOC per il mio progetto sarebbe interessante poter comunicare tra Arduino (client) e computer (host) in modalità senza fili (wireless).

Per farlo ho acquistato delle schedine XBee già presentate e descritte in precedenza.
Io, non so per quale malaugurata idea, ho deciso di acquistare delle schedine di tipo Serie 2, che visivamente sono piuttosto simili tra loro, ma che presentano una complessità maggiore in fase di programmazione.

Ho trovato molti tutorial o istruzioni per le schedine Serie 1 (802.15.4) che vengono solitamente  già fornite con un firmware adatto a creare connessioni punto-punto.
Più difficile trovare guide per la programmazione delle schede XBee Series 2. Attenzione a non lasciarvi confondere da queste differenze perchè le due serie funzionano in modo differente e NON sono compatibili tra loro.

differenze xbee series
Ancora un precisazione sulla differenza tra XBee e XBee PRO, entrambi si trovano sul mercato, ma hanno prezzi decisamente differenti. La differenza principale tra le due famiglie è quella della potenza di trasmissione, mentre le XBee raggiungono solitamente 50-100 metri di distanza, mentre le versioni PRO coprono anche alcuni chilometri di distanza. 

Questa tabella comparativa spiega piuttosto bene le differenze tra tutti i modelli della famiglia XBee.

 

NOTA: I tutorial e le guide che si trovano sul web spesso non hanno funzionato perchè i modelli di XBee non sono esattamente quelli che avevo io, con conseguenti problemi di comunicazioni o una perdita consistente di dati.

 

In base al modello di schede che ho comperato io (XB24-BCIT-004 revE) e ai test che ho fatto, vi riporto i passi fondamentali per una programmazione funzionante:

1) Identificare e annotare il tipo di schede


Queste sono le schede che ho acquistato io:

xBee module1 r

xBee module2 r

 

Nelle foto è rappresentato anche il lettore di schede XBee (UartSBee V4) collegabile al computer tramite USB. Utilizzeremo proprio questo modulino per leggere e caricare il firmware adatto su entrambe le schede XBee. 

xBee module3 r

Innanzitutto leggete i dati riportati sul retro delle schedine XBee e riportatele su un foglio:

xBee module-schema r

 

Per chiarezza l'ho riportato su questo schema:

xBee config schema

 

2) Installazione driver e software X-CTU

Ora che abbiamo tutte le informazioni delle schede possiamo montare la prima schedina e collegare il tutto alla porta USB del computer. Attenzione al senso in cui montate la scheda XBee (il socket permette di inserirla in entrambi i sensi).

Prima di proseguire è necessario che sul computer sia installato il software X-CTU che è possibile scaricare da qui.

x-ctu icon

Dopo l'installazione può essere necessario scaricare le ultime versioni dei vari firmware delle schede XBee. È possibile effettuare questa operazione manualmente installando soltanto il firmware che ci interessa, ma se avete un po' di pazienza è più semplice attendere che vengano aggiornati tutti i firmware (questa operazione può impiegare parecchi minuti).

xbee 1-download update firmware

La prima volta sarà inoltre necessario scaricare il driver per il lettore di schede, vedi la pagina hardware per i dettagli.

 

 3) Configurare il COORDINATOR

Le due schede vanno configurate in modo differente. La prima scheda va configurata in modalità COORDINATOR.

Avviare X-CTU, scegliere la porta COM e quindi premere il tasto "Test/Query"

xbee 0

Se il baudrate e la porta COM sono corretti, X-CTU mostrerà alcune semplici informazioni riguardanti la scheda come il tipo di modem, la versione del firmware e il numero di serie. Se invece non c'è risposta, conviene provare a selezionare un'altra porta COM e assicurarsi che il baudrate è importato su 9600.
NOTA: il baudrate di default solitamente è 9600, ma se avete in precedenza caricato firmware e importato baudrate differenti è possibile che la scheda non riuscirà a collegarsi, o che vengano visualizzati dei strani valori (sporchi).

Se la comunicazione con la schedina XBee è avvenuta selezionare il tab Modem Configuration, e impostare i dati indicati nell'immagine seguente:

xBee module4-coordinator

Procedere alla scrittura del firmware premendo il tasto Write.

 

 3) Configurare il ROUTER


Si può chiudere X-CTU, quindi scollegare la porta USB e rimuovere la schedina XBee, inserire quindi l'altra scheda.

Ricollegare l'USB e lanciare di nuovo X-CTU, selezionare la porta COM, (il numero della porta potrebbe essere differente dalla precedente). Eseguire di nuovo il test premendo "Test/Query". Come prima, vengono letti i dati della scheda inserita. Se funziona, possiamo continuare.

Procedere con la configurazione sul tab "Modem Configuration" come indicato nell'immagine seguente:

xBee module4-roouter

 

Completare il caricamento del firmware con il tasto Write.

 

Ora entrambi le schede sono configurate e dovrebbero essere in grado di "vedersi" tra loro.

 

4) Testare la comunicazione

Per testare se funzionano, nel mio caso ho provato a montare una scheda su Arduino, l'altra scheda collegarla al computer e quindi aprire un terminale sul PC. Non importa quale schedina viene montata dove, esse sono ora intercambiabili dato che è un collegamento punto-punto. È fondamentale invece che su Arduino stia girando uno scketchin grado di generare dell'output sulla porta seriale in modo che possa essere trasmesso e ricevuto dal terminale aperto su PC.
Siccome ci si potrebbe ingannare, consiglio di scollegare la presa USB da Arduino durante questo test (è necessario alimentarlo esternamente), in modo da assicurarsi che i dati vengano trasferiti wireless (tramite XBee) e non sul cavo USB !

xctu terminale

NOTA: Come terminale su PC è possibile utilizzare quello integrato in X-CTU, quello di Realterm, o un qualsiasi terminale (in Windows XP ne esisteva uno integrato che si chiamava Hyperterminal, in Windows 7 non viene più installato di default. Uffa!) 

Ho allegato il backup della configurazione del firmware per le mie schede XBee, eventualmente utilizzare questi files per caricare direttamente la configurazione al posto di doverla importare manualmente. I files vanno rinominati con l'estensione ".pro"