Arduino e nunchuk – risparmiamo sui sensori

Chiunque conosca Arduino prima o poi si sarà trovato di fronte a quest’accoppiata. Usare il nunchuck della console Wii oltre ad essere una cosa molto divertente ci permette anche di risparmiare qualche soldo: al suo interno troviamo un accelerometro a tre assi, due pulsanti e un joystick, già saldati contenuti in un box ergonomico e facilmente accessibili tramite protocollo seriale (I2C).

Cerchiamo di capire come funziona e come possiamo fruttarlo per un nostro progetto.

Il protocollo.

Il nunchuck utilizza una versione leggermente “personalizzata” del protocollo I2C.

Senza addentrarci troppo nei meandri dell’I2C il nunchuck per funzionare ha bisogno di una prima fase di inizializzazione in cui vengono inviati 3 byte:

0x52: indirizzo del nunchuck;
0x40:indirizzo di memoria;
0x00: inviamo uno zero, che rappresenta la richiesta di dati.

Successivamente alla richiesta di informazioni il nunchuck risponde con 6 byte il cui significato è riportato nella seguente tabella:

Byte Descrizione
1 Asse X del joystick analogico
2 Asse Y del joystick analogico
3 8 bit MSB del valore dell’accelerazione sull’asse X
4 8 bit MSB del valore dell’accelerazione sull’asse Y
5 8 bit MSB del valore dell’accelerazione sull’asse Z
6 0 Pulsante Z vale 0 quando pressato
1 Pulsante C vale 0 quando pressato
3:2 2 bit LSB accelerazione X
5:4 2 bit LSB accelerazione Y
7:6 2 bit LSB accelerazione Z

L’accelerometro ha un’uscita a 10 bit, ma il protocollo I2C permette l’invio di soli 8 bit per volta: per questo motivo il valore degli assi dell’accelerometro è diviso in questo modo (8 bit a se stanti e gli ultimi due nel 6° byte).

Nota: In base al nunchuk utilizzato può essere necessario una decodifica del valore: in pratica dobbiamo fare un’operazione di XOR tra il byte ricevuto e il valore 0x17 e successivamente sommarlo con lo stesso valore (0x17). Nella libreria wiichuck (che andremo ad utilizzare) per ovviare a questo problema viene utilizzata un’inizializzazione più complessa che vedremo quando analizzeremo il codice e non sarà necessaria alcuna decodifica.

La Connessione.

I colori dei fili posso cambiare  in base alla casa che ha prodotto il nunchuck (non credo che stiamo smontando un nunchuck originale) però basta guardare il connettore:

nunchuck_plug__10b2oq__

una volta individuati i segnali di SDA (data) e SCL (clock) basta collegarli rispettivamente a ai pin analogici 4 e 5 dell’arduino. Per l’alimentazione il nunchuck funziona a 3.3V (anche se molti lo alimentano a 5V senza riscontrare problemi) quindi basterà collegarlo ai 3.3V dell’arduino e la massa al GND.

Il codice.

All’inizio pensavamo di dover scrivere il codice per gestire il nunchuk, operazione che non risulta troppo complicata una volta conosciuto il protocollo. Ma poi abbiamo pensato che reinventare la ruota non aveva senso, che sarebbe stato più utile prendere la libreria già presente nei reference di Arduino e commentarla insieme.
Inoltre la libreria Wiichuck.h ci fornisce anche un output con il calcolo del rollio e del beccheggio del controller a partire dai valori dell’accelerazione sui 3 assi.

Potete scaricare da qui un file .zip contenente la libreria e il file di esempio presenti nel playground di Arduino. Analizziamo insieme la libreria.

Chiavette internet – Usiamole col pinguino

Ormai la loro diffusione è capillare, e molti di noi le usano in sostituzione di una connessione via cavo. Indipendentemente dalla presenza o meno di copertura, zone d’ombra e wireless disponibili (…) uno degli scogli più grandi per alcuni modelli è appunto il loro utilizzo su sistemi linux.

Vediamo in questo articolo come ho risolto questo problema con la mia odiata quanto indispensabile chiavetta Olicard200.

Il problema

Molti si chiedono quale sia il problema. Perchè una periferica USB, standard ormai affermatissimo proprio per la semplicità di utilizzo, non riesca a funzionare con il nostro pinguino.

La risposta è semplice. Quando inseriamo la chiavetta con un sistema windows avviato parte l’istallazione del software, subito dopo siamo già pronti a navigare. Il problema è proprio questo: la chiavetta contiene al suo interno due perifeche USB differenti. La prima è una memoria con il programma di installazione. E’ poi compito del software installato fare lo switch di periferica e attivare la parte “telefonica” della chiavetta. Come potete intuire questo switch su ubuntu non avviene.

La soluzione.

In rete si trovano diverse soluzioni, alcune funzionano, altre no e molte sono veramente complicate da mettere in pratica. Ma l’aiuto ci viene dallo script Sakis3G (AL momento il sito è offline) che  ci semplifica notevolmente il lavoro, e ci permette di automatizzare la procedura di collegamento.

Sul sito indicato le istruzioni sono molto chiare:

[code]
wget http://www.sakis3g.org/versions/latest/i386/sakis3g.gz"
echo "dda70fd95fb952dbb979af88790d3f6e  sakis3g.gz" | md5sum -c
gunzip sakis3g.gz
chmod +x sakis3g
./sakis3g –interactive[/code]

NOTA: Al momento il sito è offline, lo script comunque è reso disponibile dal sito linuxmint-italia. Ecco i link per scaricare gli script:
Sakis3g.gz(32 bit)
Sakis3g.gz(64 bit)

diamo una breve spiegazione:

wget serve a scaricare il file; il secondo comando serve a verificare che il pacchetto sia stato scaricato correttamente (in caso contrario riscarichiamolo); gli altri sono estrazione, permesso di esecuzione, e avvio dello script.

A questo punto ci troviamo davanti a una procedura guidata che ci aiuterà a configurare e utilizzare la nostra chiavetta internet.

Nota: i passi che seguono sono stati eseguiti per stabilire una connessione con una chiavetta Olicard200 con scheda tim, ma come vedrete il tutto è facilmente adattabile a qualsiasi chiavetta/gestore.

schermata1

Indichiamo che tipo di periferica vogliamo usare per la connessione

schermata2

e quale periferica usare

schermata3

Civerrà chiesta la nostra password. Poi selezioniamo l’interfaccia

schermata6

Sulla olicard200 l’interfaccia corretta è la 5, se selezionate la 6 dopo un pò vi spunta un messaggio d’errore in cui dice che l’interfaccia non ha funzionalità telefoniche.

Ed in fine indichiamo con quale APN collegarci

schermata4

Nota: questa scelta è molto importante in quanto scegliere l’APN errato può comportare dei costi aggiuntivi sulla scheda. Informatevi presso i vostri gestori telefonici.

A questo punto potrebbe spuntarci un messaggio di errore relativo al modem-manager (a me a volte spunte, altre volte no) in ogni caso la connessione dovrebbe andare a buon fine.

non ci resta che uscire dallo script

schermata5

E siete pronti per navigare con la vostra chiavetta internet.

Una volta collegati se richiamiamo lo script ci troveremo davanti l’ultima schermata che abbiamo visto, dove abbiamo, oltre alla possibilità di disconnessione, anche la possibilità di vedere i dati della connessione in corso.