Bruke en Wii Nunchuck til å styre Python Turtle

I denne veiledningen vil jeg vise deg hvordan du kobler en Wii nunchuck-adapter til en Raspberry Pi og bruk Python til å styre skilpaddemodulen.

Denne opplæringen fungerer med både offisielle Nintendo eller tredjeparts nunchucks. Nunchuck er en god multi-bruk-inngang for en Raspberry Pi som de kan hentes billig og inneholder en joystick, et treakse akselerometer og to knapper i en fin ergonomisk vennlig kontroller.

Krav

For å få nunchucken til å løpe med Pi, trenger du:

  • En Raspberry Pi med SD-kort forhåndsinstallert med Raspbian (se veiledningen Slik blar du et SD-kort for Raspberry Pi hvis du trenger)
  • En Nintendo nunchuck
  • En adapter som MultiChuck
  • Eller kvinnelige jumper ledninger, loddejern, loddetinn og elektrisk tape for å dekke skjøten

Hooking up Nunchuck

Hvis du føler deg modig, kan du kutte av kontaktene og ha ekstra kontroller du kan koble ledningene direkte til Raspberry Pi GPIO-pinnene. Da hver kontakt kan bruke forskjellige fargede ledninger, er det best å åpne kontrolleren for å trene ledningsfargene.


Kabling av 

I min kontroller har jeg følgende ledninger, da dette er en tredjeparts kontroller, legger merke til fargene og pinnene de kobler til, da sjansene er at de kan være svært forskjellige fra kontakten i mitt eksempel.

  • Bakke-brun
  • Seriell data-Rosa
  • Serieklokke-Gul
  • Strøm (VDD)-Hvit
  • Addon Detect-Blå-Ikke brukt
Et eksempel på ledningsnettet

Klipp av den endekontakten du plugger inn i Wiimote, ta av plastbelegget for å avsløre de ledige ledningene. Løs hver ledning til en kvinnelig jumpertråd, og bruk deretter elektrisk tape for å beskytte de loddede skjøtene fra å berøre hverandre. Når du er sikker på at hver farge samsvarer med den respektive ledningen, koble dem rett til i2c og pinnene på Pi.

Hvis du ikke føler deg modig, eller du ikke har en kontroller å spare, kan du alltid bruke en adapter som MultiChuck-adapteren for å koble kontrolleren din til Pi uten å ofre kontakten.

Bruke en MultiChuck-adapter

Sette opp Raspberry Pi

i2c er ikke aktivert som standard, dette krever redigering av to filer. Den første filen vil aktivere seriell protokoll og den andre vil starte seriell driver når Raspberry Pi starter opp.

For å redigere den første filen, skriv dette inn i LXTerminal vindu eller PuTTY hvis du kobler til eksternt: sudo nano / etc / moduler

Legg til i2c-dev og i2c-bcm2708 til slutten av filen slik at den ser slik ut:

Redigerer filer på Raspberry Pi

Kontroll-X for å lagre endringene, Y å bekrefte og Tast inn å lagre til filen.

Neste, for å aktivere driveren ved oppstart, skriv inn:

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

Legg deretter til en # til begynnelsen av hver linje slik at det ser slik ut:


Redigerer filer på Raspberry Pi

En gang til Kontroll-X for å lagre endringene, Y å bekrefte og Tast inn å lagre til filen. Det er de endringene som trengs for Raspberry Pi å snakke over i2c-protokollen. Neste type:

sudo restart omstart

for å tillate endringene å tre i kraft.

Installere nødvendige biblioteker

Når Raspberry Pi har startet på nytt, åpne LXTerminal igjen. Den siste tingen å gjøre nå er å installere Python-modulene for å håndtere kommunikasjonen mellom Python og i2c:

sudo apt-get oppdatering sudo apt-get install python-smbus -y

For å gjøre det enklere å håndtere nunchuck-dataene, har jeg opprettet en modul som kan importeres til skriptet ditt. Åpen LXTerminal og skriv inn følgende kommando for å laste den ned.

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

Lese Nunchuck Data

Nå har du alle bibliotekene og modulene som kreves, test at det fungerer. Mens du fortsatt er i LXTerminal, Skriv inn

sudo python

for å starte den interaktive Python-konsollen, kan vi ved hjelp av dette skrive en rask test med Python. 

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

Hvis alt fungerer som det skal, bør du forvente å se et sett med tall som dette:

testing

Tallene samsvarer med utgangene på joysticken, akselerometeret og tilstandene til knappene. 

Wii.raw () vil gi deg en utskrift av hver startende til venstre har du:
[Joystick X, Joystick Y, Accelerometer X, Accelerometer X, Accelerometer X, Blandede data som inneholder knapper Z og C]

Jeg har også lagt til individuelle funksjoner for hver av disse for å gjøre det enklere å skrive egne skript.

wii.raw () # Returnerer alle dataene i rå wii.joystick () # Returnerer bare X- og Y-posisjonene til joysticken wii.accelerometer () # Returnerer X, Y og Z posisjonene til akselerometeret wii.button_c () # Returnerer True hvis C-knappen trykkes, False hvis ikke wii.button_z () # Returnerer True hvis Z-knappen er trykket, False hvis ikke wii.joystick_x () # Returnerer bare X-posisjonen på joysticken wii.joystick_y () # Returnerer bare Jo-posisjonen til joysticken wii.accelerometer_x () # Returnerer bare X-posisjonen til akselerometeret wii.accelerometer_y () # Returnerer bare Y-posisjonen til akselerometeret wii.accelerometer_z () # Returnerer bare Z-posisjonen til akselerometeret wii. skala (verdi, min, maks, out_min, out_max) # Fungerer det samme som Arduino Map, perfekt for å endre verdier returnert til en annen skala, dvs. -100 - +100

Du kan prøve en ut med en løkke ved å skrive følgende inn i en sudo python konsollen. Dette vil utgjøre joystickenes nåværende posisjon, så skriv den inn og flytt joysticken rundt for å se tallene endres.

fra nunchuck import nunchuck fra tid import søvn wii = nunchuck () mens sant: wii.joystick () søvn (0.2)

Bruke Turtle

Nå har du fått din Nunchuck koblet til Raspberry Pi, installert bibliotekene og modulene og testet det fungerer, jeg skal vise deg hvordan du gjør noe morsomt med det. 

Python, på Raspberry Pi, kommer installert med Skilpadde modul for å tillate noen å lage mønstre raskt og enkelt ved å legge til noen linjer med kode. Så som det er veldig lett å komme i gang, viser jeg deg hvordan du bruker nunchucken til å kontrollere en skilpadde.

For neste avsnitt skal jeg bruke Tomgang for å skrive Python-koden, men da seriell protokollen krever administratorrettigheter, må du gå tilbake til LXTerminal igjen og skriv:

sudo tomgang

Klikk Fil deretter Nytt vindu. Det nye vinduet er hvor Python-koden skal gå. Pressing F5 vil kjøre koden. Legg til koden fra før for å importere søvn- og nunchuck-moduler, sammen med skilpadde.

fra nunchuck import nunchuck fra tid import søvn import skilpadde wii = nunchuck () turtle.setheading (90) mens sant: hvis wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) hvis wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10)
nunchuckturtle.py script

Når du har tastet inn koden, trykker du på F5 å kjøre den. Du blir da bedt om å lagre filen, så gi den et passende navn. Et vindu vil nå dukke opp med en liten svart trekant, du er nå klar til å prøve den, så gi joysticken en prøve.


I koden du har brukt, importerer de første fire linjene de nødvendige modulene og starter nunchucken klar til bruk. turtle.setheading (90) vil peke pilen oppover, som 0 peker til høyre. Den neste blokken starter en evig loop-mens sant:. Python sjekker om joystickposisjonen er over eller under et visst tall, og flytter skildpadden.

Legge til knapper

Nå har du bevegelse, jeg viser deg hvordan du kan legge til litt ekstra interaktivitet ved å bruke C og Z knapper. Noen funksjoner som er praktisk å ha, vil være å fjerne skjermen, og også å løfte pennen opp slik at du kan bevege deg uten å tegne en linje.

fra nunchuck import nunchuck fra tid import søvn import skilpadde wii = nunchuck () penstate = 0 turtle.setheading (90) mens sant: hvis wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) hvis wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) hvis wii.button_c () == True: turtle.setposition (0,0) turtle.setheading (90) turtle.clear () hvis wii.button_z () == True: hvis penstate = = 0: turtle.up () penstate = 1 annet: turtle.down () penstate = 0 sleep (0.2)


trykk F5 å lagre og starte det nye skriptet og teste knappene. Knapp C vil slette skjermen og tilbakestille posisjonen til markøren, mens Z vil løfte opp og sette pennen ned slik at du kan starte og slutte å tegne en linje.

Bruk nunchucken til å tegne

Jeg vil bryte ned knappekoden slik at du forstår hva som skjer når du trykker på knappen. 

Når du trykker på C knappen, som kommer tilbake som ekte og vil vende skildpadden tilbake slik at den peker oppover, deretter flytte skilpadden tilbake til midten av skjermen og til slutt rydde skjermen. 

Når du trykker på Z knappen, en variabel lagres for å huske pennens tilstand, og enten løfte pennen for å slutte å tegne, eller plasser pennen tilbake for å fortsette å tegne.

Konklusjon

Jeg håper i denne opplæringen du har fått kunnskapen til å begynne å bruke det du har lært å utvide hva som kan gjøres med nunchucken. 

Noen ting som kan gjøres som kontrollroboter, skape spill som slange eller til og med slå lysdioder på og av som er koblet til GPIO-pinnene til en Raspberry Pi.