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.
For å få nunchucken til å løpe med Pi, trenger du:
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.
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.
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-adapteri2c 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:
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:
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.
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:
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)
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.
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.
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.
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.