Usando un Wii Nunchuck per controllare Python Turtle

In questo tutorial ti mostrerò come collegare un adattatore nunchuck Wii a un Raspberry Pi e usare Python per controllare il modulo tartaruga.

Questo tutorial funziona con i nunchucks ufficiali di Nintendo o di terze parti. Il nunchuck è un buon input multiuso per un Raspberry Pi in quanto possono essere raccolti a buon mercato e contengono un joystick, un accelerometro a tre assi e due pulsanti in un controller ergonomico piacevole.

Requisiti

Per far funzionare il nunchuck con il Pi, avrai bisogno di:

  • Un Raspberry Pi con scheda SD preinstallato con Raspbian (fare riferimento al tutorial Come Flash una scheda SD per Raspberry Pi se hai bisogno di)
  • Un nunchuck di Nintendo
  • Un adattatore come MultiChuck
  • O cavi di ponticello femmina, saldatore, saldatura e nastro elettrico per coprire il giunto

Collegando il tuo Nunchuck

Se ti senti coraggioso, divertiti a tagliare i connettori e hai controller di ricambio, puoi collegare i fili direttamente ai pin GPIO di Raspberry Pi. Poiché ogni connettore può utilizzare fili colorati diversi, è meglio aprire il controller per calcolare i colori del cablaggio.


Cablaggio del 

Nel mio controller ho i fili seguenti, dato che si tratta di un controller di terze parti, prendi nota dei colori e dei pin a cui si connettono, poiché è probabile che possano essere molto diversi dal connettore nel mio esempio.

  • Terra-Marrone
  • Dati seriali-Rosa
  • Orologio seriale-Giallo
  • Potenza (VDD)-bianca
  • Addon Detect-Blu-Non usato
Un esempio della piedinatura del cablaggio

Taglia il connettore finale che inserisci nel Wiimote, rimuovi il rivestimento di plastica per esporre i fili scoperti. Saldare ciascun filo a un ponticello femmina, quindi utilizzare del nastro isolante per proteggere i giunti saldati dal contatto reciproco. Una volta che sei sicuro che ogni colore corrisponda al relativo filo, collegalo direttamente all'i2c e ai pin di alimentazione sul Pi.

Se non ti senti coraggioso, o non hai un controller da risparmiare, puoi sempre utilizzare un adattatore come l'adattatore MultiChuck per collegare il controller al tuo Pi senza sacrificare il connettore.

Utilizzando un adattatore MultiChuck

Impostazione del Raspberry Pi

i2c non è abilitato di default, questo richiede la modifica di due file. Il primo file abiliterà il protocollo seriale e il secondo avvierà il driver seriale all'avvio di Raspberry Pi.

Per modificare il primo file, digita questo al LXterminal finestra o PuTTY se ci si connette da remoto: sudo nano / etc / modules

Inserisci i2c-dev e i2c-bcm2708 alla fine del file, quindi sembra così:

Modifica dei file sul Raspberry Pi

Control-X per salvare le modifiche, Y per confermare e accedere per salvare nel file.

Quindi, per abilitare il driver all'avvio, digitare:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

quindi aggiungere un # all'inizio di ogni riga in modo che assomigli a questo:


Modifica dei file sul Raspberry Pi

Ancora Control-X per salvare le modifiche, Y per confermare e accedere per salvare nel file. Quelle sono le modifiche necessarie per il Raspberry Pi per parlare sul protocollo i2c. Prossimo tipo:

sudo reboot restart

per consentire che le modifiche abbiano effetto.

Installazione delle librerie richieste

Una volta riavviato Raspberry Pi, apri di nuovo LXTerminal. L'ultima cosa da fare ora è installare i moduli Python per gestire la comunicazione tra Python e i2c:

sudo apt-get update sudo apt-get installa python-smbus -y

Per semplificare la gestione dei dati del nunchuck, ho creato un modulo che può essere importato nel tuo script. Aperto LXterminal e digitare il seguente comando per scaricarlo.

wget https://raw.githubusercontent.com/Boeeerb/Nunchuck/master/Raspberry%20Pi/nunchuck.py

Leggere i dati di Nunchuck

Ora hai tutte le librerie e i moduli richiesti, verifica che funzioni. Mentre ancora dentro LXterminal, digitare

sudo python

per avviare la console Python interattiva, usando questo possiamo scrivere un test rapido con Python. 

da nunchuck import nunchuck wii = nunchuck () wii.raw ()

Se tutto funziona come dovrebbe, dovresti aspettarti di vedere un insieme di numeri come questo:

analisi

I numeri corrispondono alle uscite del joystick, dell'accelerometro e degli stati dei pulsanti. 

Wii.raw () ti darò una stampa di ogni-partenza a sinistra che hai:
[Joystick X, Joystick Y, accelerometro X, accelerometro X, accelerometro X, dati misti contenenti i pulsanti Z e C]

Ho anche aggiunto delle funzioni individuali per ognuno di questi per rendere la scrittura dei propri script molto più semplice.

wii.raw () # Restituisce tutti i dati in raw wii.joystick () # Restituisce solo le posizioni X e Y del joystick wii.accelerometer () # Restituisce le posizioni X, Y e Z dell'accelerometro wii.button_c () # Restituisce True se viene premuto il pulsante C, False se non wii.button_z () # Restituisce True se viene premuto il pulsante Z, False se non wii.joystick_x () # Restituisce solo la posizione X del joystick wii.joystick_y () # Restituisce solo la posizione Y del joystick wii.accelerometer_x () # Restituisce solo la posizione X dell'accelerometro wii.accelerometer_y () # Restituisce solo la posizione Y dell'accelerometro wii.accelerometer_z () # Restituisce solo la posizione Z dell'accelerometro wii. scala (valore, min, max, out_min, out_max) # Funziona come la mappa di Arduino, perfetta per modificare i valori restituiti a una scala diversa, ad esempio -100 - +100

Puoi provarne uno con un ciclo digitando quanto segue in a sudo python console. Questo produrrà la posizione corrente del joystick, quindi inseriscilo e muovi il joystick per vedere cambiare i numeri.

da nunchuck import nunchuck da tempo importazione sleep wii = nunchuck () while True: wii.joystick () sleep (0.2)

Usare la tartaruga

Ora hai il tuo Nunchuck connesso al Raspberry Pi, hai installato le librerie e i moduli e testato che funziona, ti mostrerò come fare qualcosa di divertente con esso. 

Python, sul Raspberry Pi, viene installato con il Tartaruga modulo per consentire a chiunque di creare modelli in modo rapido e semplice aggiungendo poche righe di codice. Quindi, dato che è davvero facile andare avanti, ti mostrerò come usare il nunchuck per controllare una tartaruga.

Per la prossima sezione userò Inattivo in cui scrivere il codice Python, ma dal momento che il protocollo seriale richiede i diritti di amministratore, è necessario tornare a LXterminal ancora e scrivi:

sudo inattivo

Clic File poi Nuova finestra. La nuova finestra è dove il codice Python andrà. urgente F5 eseguirà il codice. Aggiungi il codice di prima per importare i moduli di sospensione e nunchuck, insieme alla tartaruga.

da nunchuck import nunchuck da tempo importazione sleep importazione turtle wii = nunchuck () turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) se wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10)
script nunchuckturtle.py

Dopo aver digitato il codice, premere F5 per eseguirlo. Ti verrà quindi chiesto di salvare il file, quindi assegnargli un nome appropriato. Ora una finestra apparirà con un piccolo triangolo nero, ora sei pronto per provarlo, quindi dai un test al joystick.


Nel codice che hai usato, le prime quattro righe importano i moduli necessari e iniziano il nunchuck pronto per essere utilizzato. turtle.setheading (90) punterà la freccia verso l'alto, come 0 indica a destra. Il prossimo blocco inizia un ciclo per sempre-mentre True:. Python controlla se la posizione del joystick è sopra o sotto un certo numero e sposta il cursore tartaruga rispettivamente.

Aggiunta di pulsanti

Ora che hai movimento, ti mostrerò come aggiungere interattività extra usando il C e Z pulsanti. Alcune funzioni che sarà utile avere sarà quello di cancellare lo schermo, e anche di sollevare la penna in modo da poter andare in giro senza tracciare una linea.

da nunchuck import nunchuck da tempo importazione sleep import turtle wii = nunchuck () penstate = 0 turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) se wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) se wii.button_c () == Vero: turtle.setposition (0,0) turtle.setheading (90) turtle.clear () se wii.button_z () == True: se penstate = = 0: turtle.up () penstate = 1 else: turtle.down () penstate = 0 sleep (0.2)


stampa F5 per salvare e avviare il nuovo script e testare i pulsanti. Pulsante C cancellerà lo schermo e ripristinerà la posizione del cursore, mentre Z si alza e appoggia la penna in modo da poter iniziare e smettere di disegnare una linea.

Usando il nunchuck per disegnare

Analizzerò il codice del pulsante in modo da capire cosa sta succedendo quando si preme il pulsante. 

Quando si preme il C pulsante, che ritorna come Vero e capovolgerà la tartaruga in modo che puntino verso l'alto, quindi sposta la tartaruga al centro dello schermo e alla fine cancella lo schermo. 

Quando si preme il Z pulsante, una variabile viene memorizzata per ricordare lo stato della penna e sollevare la penna per interrompere il disegno o posizionare la penna indietro per continuare a disegnare.

Conclusione

Spero che in questo tutorial tu abbia acquisito le conoscenze per iniziare ad applicare ciò che hai imparato ad espandere ciò che può essere fatto con il nunchuck. 

Alcune cose che possono essere fatte come i robot di controllo, creare giochi come il serpente o anche accendere e spegnere i LED che sono collegati ai pin GPIO di un Raspberry Pi.