Marco Pucci

personal website

Tutorial Arduino #7: wii nunchuck

Tutorial #7 – Nunchuk

materiale utilizzato – Arduino, cavi elettrici, breadboard, nunchuk, 3 led.

 

Per vedere tutti i tutorial: www.marcopucci.it/arduino/

images (1)
Segui la pagina Tutorial Arduino su Facebook

In questo tutorial colleghiamo il nostro Arduino ad un piccolo oggetto, il nunchuk, ovvero un piccolo controller per videogiochi della console Nintendo Wii.
Il nunchuk possiede al suo interno un accelerometro, due pulsanti e un joystick. Tutto questo a un prezzo che varia da 5 euro (mercatini, negozi cinesi, ebay, …) a 15 euro circa (quelli originali).
Il nunchuk è quindi un ottimo strumento per iniziare a realizzare qualche progetto con la scheda Arduino sia per la fascia di prezzo molto bassa, sia per la facilità di utilizzo e installazione.

 

Installiamo la libreria per utilizzare il nunchuk. Le librerie sono codici scritti da altre persone e messi a disposizione di tutti. Queste servono per far comunicare la nostra scheda con componenti esterni. Grazie a questi codici il lavoro di programmazione risulta molto più semplice perchè non ci dobbiamo preoccupare di tutta la parte di trasmissione dati, configurazione del sensore, protocolli di trasmissione, ecc..
Per scaricare la libreria cliccate qui. Una volta aperto il file .rar copiate la cartella all’interno della directory “libraries” di Arduino. Se non sapete dove si trova, effettuate una ricerca all’interno del vostro computer.

librariesQui a sinistra potete vedere l’immagine di come appare la mia directory libraries con tutte le varie librerie che piano piano aggiungeremo.

Apriamo ora il software di Arduino per verificare la giusta installazione della libreria.

Se tutto è andato bene, all’interno delle librerie del programma di Arduino troveremo anche quella del nunchuk. In questo tutorial inizialmente non scriveremo nessun codice ma ci limiteremo a utilizzare quello dell’esempio.

 

 

 

 

Click su File/Examples/ArduinoNunchuk/ArduinoNunchukDemo

 

patch

 

 

 

 

 

 

 

 

 

 

 

 

Colleghiamo ora il nunchuk alla scheda Arduino. Per effettuare i collegamenti dobbiamo solamente inserire 4 cavetti elettrici rigidi all’interno del connettore del nunchuck seguendo lo schema qui sotto.

 

installaz

Teniamo il connettore del nunchuk con il gradino rivolto verso il basso come nella figura qui a fianco. Inseriamo 4 cavetti nei 4 buchi indicati dalle frecce e colleghiamoli ai rispettivi pin di Arduino.

 

 

 

schema2

 

Torniamo alla programmazione di Arduino. Come detto in precedenza per il momento non scriveremo nessun codice perchè utilizzeremo il file presente all’interno della libreria di Arduino. Se abbiamo già aperto il file come scritto precedentemente clicchiamo su Salva con nome e salviamo il file nella cartella dove stiamo mettendo tutti gli sketch di Arduino di questi tutorial. In questo modo possiamo iniziare a modificare questo sketch senza problemi. Se stiamo sbagliando qualcosa possiamo sempre riaprire il file originale.

 

 

 

Analizziamo il codice:
#include <Wire.h>
#include <ArduinoNunchuk.h>
#define BAUDRATE 19200
ArduinoNunchuk nunchuk = ArduinoNunchuk();

Importiamo  le librerie che ci permettono di far funzionare il nunchuk. Con BAUDRATE 19200 stiamo modificando la velocità di trasmissione dei dati dal nunchuk al nostro Arduino. Di solito è impostata su 9200.

 

Passiamo direttamente alla parte di codice più interessante ovvero quella presente nel void loop() che ci permette di ricevere e stampare i valori provenienti dal nunchuk.

 

nunchuk_1

Serial.print(nunchuk.analogX, DEC);

Serial.print(‘ ‘);
Serial.print(nunchuk.analogY, DEC);
Serial.print(‘ ‘);
Serial.print(nunchuk.accelX, DEC);
Serial.print(‘ ‘);
Serial.print(nunchuk.accelY, DEC);
Serial.print(‘ ‘);
Serial.print(nunchuk.accelZ, DEC);
Serial.print(‘ ‘);
Serial.print(nunchuk.zButton, DEC);
Serial.print(‘ ‘);
Serial.println(nunchuk.cButton, DEC);
Serial.print(‘ ‘);
nunchuk_2

Se premiamo il pulsante tondo posizionato in alto nel nunchuk, il numero passa da 0 a 1. Questo vuol dire che se appare 1 il pulsante è premuto.

La penultima colonna si riferisce al bottone grande. Anche qui 0 non premuto, 1 premuto.
La variabile nunchuk.cButton si riferisce al bottone piccolo
La variabile nunchuk.zButton si riferisce al bottone grande.

 

 

 

 

 

 

 

 

 

nunchuk_3La prima colonna di numeri si riferisce alla posizione orizzontale del joystick presente sopra al nunchuk.

Se spostiamo il joystick verso destra questi numeri diventano uguali a 220 se spostiamo il joystick verso sinistra diventano uguali a 28.
Quindi il valore delle X del joystick varia con numero che va da 28 a 220.
Il numero 122 appare quando il joystick è posizionato al centro.
La variabile che gestisce la posizione X del joystick si chiama nunchuk.analogX.
nunchuk.analogY è la variabile relativa all’oscillazione in avanti e indietro del joystick.
Muovendolo in alto, il valore arriva a 220, portandolo in basso, segna un numero uguale a 28.

 

 

Abbiamo visto fino ad ora i dati provenienti dai pulsanti e dal joystick.

Vediamo ora i dati dell’accelerometro presente all’interno del nunchuk.
Queste tre variabili unchuk.accelX, unchuk.accelY e unchuk.accelZ si riferiscono ai dati della posizione nello spazio del nostro nunchuk. Proviamo a muoverlo e vedremo nel serial monitor un cambiamento repentino dei valori.
Stiamo parlando dei dati presenti nella 3°, 4° e 5° colonna.

 

nunchuk_4

Esaminiamo ad esempio i numeri della 4° colonna.

Si riferiscono alla posizione lungo l’asse Y (asse verticale) del nunchuk. Se incliniamo verso l’alto il nunchuk, il numero che appare nella 4° colonna è 360, se lo mettiamo in posizione centrale il numero diventa 600, se portiamo il nunchuk con la testa verso il basso il numero diventa 700. Con questi numeri che variano da circa 360 a 700 possiamo sapere la posizione esatta del controller.
La stessa cosa vale per le coordinate X e Z.
Provate a muovere il nunchuk per cercare di capire come funzionano gli altri due assi.
Le varibili che catturano questi dati sono: unchuk.accelXunchuk.accelY e unchuk.accelZ. Iniziamo ora a programmare il nostro Arduino cercando di intercettare i dati del nunchuk per accendere e spegnere dei led.
Più avanti utilizzeremo il nunchuk per altri progetti più complessi.

 

 

Circuito elettrico

In questo progetto facciamo accendere il led verde se stiamo premendo il bottone piccolo, il led giallo se spostiamo il joystick verso destra e il led rosso se incliniamo il nunchuk verso il basso.
La parte elettronica per il collegamento dei led è identica a quella del tutorial “Semaforo”.

 

 

circuito

Il nunchuk è già stato collegato in precedenza.

Ora dobbiamo scrivere il codice del programma, per far ciò dobbiamo unire la patch del nunchuk con quella del tutorial semaforo (clicca qui) per controllare i movimenti del nunchuk e far accendere i 3 led.

 

 

 

 

 

 

 

Informatica

 

#include <Wire.h>
#include <ArduinoNunchuk.h>
int ledpin_verde= 13;
int ledpin_giallo = 12;
int ledpin_rosso = 11;
#define BAUDRATE 19200
ArduinoNunchuk nunchuk = ArduinoNunchuk();
void setup()
{
Serial.begin(BAUDRATE);
nunchuk.init();
pinMode(ledpin_verde, OUTPUT);
pinMode(ledpin_giallo , OUTPUT);
pinMode( ledpin_rosso , OUTPUT);
}
void loop()
{
nunchuk.update();
Serial.println(nunchuk.cButton, DEC);
Serial.println(nunchuk.analogX, DEC);
Serial.println(nunchuk.accelY, DEC);
if (nunchuk.cButton == 1){
digitalWrite(ledpin_verde, 1);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 0);
}
if (nunchuk.analogX > 150){
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 1);
digitalWrite(ledpin_rosso, 0);
}
if (nunchuk.accelY > 620){
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 1);
}
else {
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 0);
}
}

 

Analizziamo il codice:

Serial.println(nunchuk.cButton, DEC);
Serial.println(nunchuk.analogX, DEC);
Serial.println(nunchuk.accelY, DEC);

Mandiamo in stampa nel Serial Monitor solamente le variabili che ci interessano ovvero il bottone, il joystick e il movimento sull’asse Y del nunchuk.

 if (nunchuk.cButton == 1){
digitalWrite(ledpin_verde, 1);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 0);
}

Se il bottone è uguale a 1 (se il bottone è premuto) allora accendi il led verde e spegni gli altri due.

if (nunchuk.analogX > 150){
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 1);
digitalWrite(ledpin_rosso, 0);
}

Se il joystick è spostato verso destra allora accendi il led giallo e spegni gli altri due.

 if (nunchuk.accelY > 620){
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 1);

Se il nunchuk è rivolto verso il basso allora accendi il led rosso e spegni gli altri due.

 else {
digitalWrite(ledpin_verde, 0);
digitalWrite(ledpin_giallo, 0);
digitalWrite(ledpin_rosso, 0);
}

Altrimenti (se le tre condizioni precedenti non si avverano) spegni tutti e tre i led.

 

 

Uplodare il codice. Muovete il joystick, premete il bottone o inclinate il nunchuk. I tre led si accenderanno in base alle vostre azioni.

Se volete vedere i dati provenienti dal nunchuk aprite il Serial Monitor e impostate 19200 baud in basso a destra.

 

 

Ti è piaciuto il tutorial? Se ti va offrimi un caffè…[paypal-donation]

 

I tutorial sono liberamente scaricabili e condivisibili sotto l’etichetta Creative Commons (non è possibile commercializzarli e modificarli)
Licenza Creative Commons

 

 

Scarica il Pdf del tutorial di Arduino ” Nunchuk”

icona_pdf

 

 

Succ Articolo

Precedente Articolo

© 2024 Marco Pucci

Tema di Anders Norén