Wiimote

Da raspibo.

Indice

Il controller wiimote

Il controller. Wiimote della console Wii é molto interssante perché in un oggetto di dimensioni contenute concentra in un unico oggetto una alta quantitá di sensori ed attuatori ad esempio:

  • una telecamera ad infrarossi in grado di riconosere sorgenti luminose ad infrarossi
  • acceleromeri
  • diversi pulsanti
  • led
  • altoparlante
  • vibratore
  • giroscopi (solo per la versione Motion Plus)
  • bluetooth (su cui si interfaccia per trasmettere i dati dei suoi sensori)

tutto ciò con consumi ridotti.

Questa varietá lo rende molto flessibile e utile per diverse applicazioni in diversi campi. Ad esempio puó essere usato per creare una lavagna elettronica multi touch a basso costo, oppure può essere usato in applicazioni didattiche per la fisica oppure può anche diventare fonte di componenti da utilizzare direttamente collegati ad Arduino o Raspberry Pi, ed è molto conveniente se si pensa che si possono acquistare online wiimote con circa una decina di euro.

Installazione e uso delle librerie

Per il dialogo con il wiimote via bluetooth é necessario installare su Raspberry Pi una chiavetta blueooth e i seguenti pacchetti:

sudo apt-get install bluetooth

Controllare lo stato del bluetooth con:

sudo service bluetooth status

Se non è avviato avviarlo con:

/etc/init.d/bluetooth start

e verificare che sia stata creata l'interfaccia tramite il seguente comando:

hcitool dev


Per interfacciarsi con il controller basta installare le librerie con:

sudo apt-get install python-cwiid

L'uso è molto semplice, nella dichiarazione delle variabili possiamo indicare quali dati vogliamo leggere:

import cwiid
wm = cwiid.Wiimote()
 
wm.rpt_mode = cwiid.RPT_BTN // rilevo i dati relativi ai pulsanti
wm.state['buttons'] // leggo quali bottoni sono premuti, il valore finale è la somma dei codici dei bottoni premuti

I codici possibili sono:

  • 256 e 512: tasti direzionali rispettivamente sinistra e destra
  • 2048 e 1024: tasti direzionali rispettivamente sopra e sotto
  • 4 e 8: tasti B o A
  • 16, 128, 4096 :tasti volume down, tasto home e tasto volume up
  • 1 e 2: tasto 2 e tasto 1


Se si vogliono rilevare altri tipi di dati basta metterli in OR binario:

wm.rpt_mode = cwiid.RPT_ACC | cwiid.RPT_IR // rilevo i dati relativi all'accellerometro e alla finestra IR


wm.state['ir_src'] //dati relativi alla finestra ir
wm.state['acc'] //dati relativi all'accellerometro

Altri dati rilevabili sono quelli relativi agli accessori accoppiabili alla porta di espansione presente sul wiimote. Tra cui i due giroscopi per alte e basse velocità, presenti nella tecnologia Motion Plus, che aiutano ad aumentare la sensibilità e consentono di avere una mappatura dei movimenti su tutto lo spazio 3D, e quelli relativi al Nunchuk che è un joystick analogico con due pulsanti dorsali, e anch'esso presenta al suo interno degli accellerometri dai cui si possono rilevare dati utili:

cwiid.RPT_MOTIONPLUS | cwiid.RPT_NUNCHUK

Per abilitare l'uso del Motion Plus bisogna anche abilitarlo con la chiamata:

wm.enable(cwiid.FLAG_MOTIONPLUS)

Per leggere i dati possiamo fare sempre riferimento alla variabile dizionario "state" facendo riferimento alle chiavi tra apici:

 print wm.state
 {'led': 1, 'rpt_mode': 130, 'ext_type': 4, 'motionplus': {'angle_rate': (8195, 8284, 8167)}, 'buttons': 0, 'rumble': 0, 'error': 0, 'battery': 74} 


Possiamo anche abilitare alcuni componenti come il vibratore e i led presenti sul wiimote:

wm.state['led'] = 1 // abilito il led 1
wm.state['rumble'] = 1 //abilito la vibrazione

Per l'accoppiamento bisogna premere contemporaneamente i tasti 1 e 2 su wiimote. E' possibile anche connettere uno o più controller specificando l'indirizzo MAC:

wm1 = cwiid.Wiimote("00:11:22:33:44:55")
wm2 = cwiid.Wiimote("00:22:11:44:33:55")

Un esempio per leggere lo stato dei pulsanti e dei giroscopi:

#! /usr/bin/python 
import cwiid 
import time 

print "Premi 1+2 sul tuo wiimote" 
wm = cwiid.Wiimote() 
wm.enable(cwiid.FLAG_MOTIONPLUS) 
wm.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_MOTIONPLUS 
print "Connesso!" 

while True: 
   print wm.state 
   time.sleep(0.2)

Altri esempi

Altre Info

La telecamera che si trova nella parte anteriore del controller dialoga con protocollo I2C, eventalmente puó anche essere dissaldato e collegato direttamente ad un processore. Questa telecamera rileva fonti di luce puntiformi e riesce a individuarne fino a 5 contemporaneamente. Davanti alla telecamera é montato un filtro che lascia passare solo gli infrarossi, questo evita che eventuali altre fonti di luce possano ingannare il controller durante il gioco(questo filtro può anche essere rimosso per ottenere l'effetto contrario). Normalmente il controller viene usato davanti al tv e riconosce la direzione in cui é puntato perché vede due led infrarossi posti nella barra che si mette sotto o sopra al tv. E' possibile però lasciare fisso il controller e muovere dei led di fronte alla telecamera per individuare la posizione di oggetti. Una applicazione ormai famosa é una lavagna luminosa creata grazie agli studi di Johnny Chung Lee , in questo caso il wiimote viene posto in posizione fissa e si usa una penna su cui retro è fissato un led infrarosso, in questo modo la successione di posizioni rilevate va a formare una linea come quella di una penna sulla lavagna luminosa. La risoluzione della telecamera è di 1024x768 ed ha un angolo di visione di 33x23 gradi, può rilevare un led infrarosso fino ad una distanza di 2 o 3 metri.

Link Utili

  • Molte informazioni utili sono raccolte in questa Tesi.
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti