Folosind un Wii Nunchuck pentru a controla Turtle Python

În acest tutorial vă voi arăta cum să conectați un adaptor Wii nunchuck la un Raspberry Pi și să utilizați Python pentru a controla modulul broască țestoasă.

Acest tutorial funcționează atât cu Nintendo, cât și cu Nintendo. Nunchuck-ul este o intrare bună pentru mai multe utilizări pentru un Raspberry Pi, deoarece acestea pot fi preluate ieftin și conțin un joystick, un accelerometru cu trei axe și două butoane într-un regulator plăcut ergonomic.

cerinţe

Pentru a obține nunchuckul care rulează cu Pi, veți avea nevoie de:

  • O zmeură Pi cu un card SD preinstalat cu Raspbian (consultați tutorialul Cum de a bloca un card SD pentru Zmeura Pi dacă ai nevoie să)
  • Un Nintendo nunchuck
  • Un adaptor cum ar fi MultiChuck
  • Sau sârmă jumper de sex feminin, fier de lipit, lipire și bandă electrică pentru acoperirea articulației

Cuplați-vă Nunchuckul

Dacă vă simțiți curajoși, bucurați-vă de decuplarea conectorilor și de controlerele de rezervă, puteți să conectați cablurile direct până la știfturile Raspberry Pi GPIO. Deoarece fiecare conector poate folosi fire colorate diferite, cel mai bine este să deschideți controlerul pentru a realiza culorile cablului.


Conectarea cablului 

În controlerul meu am următoarele cabluri, deoarece acesta este un controler de la o terță parte, ia notă de culorile și pinii la care se conectează, deoarece sunt șanse să fie foarte diferite de conectorul din exemplul meu.

  • Sol-Maro
  • Date seriale-Roz
  • Ceas serial-Galben
  • Putere (VDD)-alb
  • Addon Detect-Albastru - Nefolosit
Un exemplu de pinout de cabluri

Tăiați conectorul de capăt pe care îl conectați la dispozitivul Wiimote, desfaceți învelișul din plastic pentru a expune firele goale. Lipiți fiecare fir pe un fir de sârmă de sex feminin, apoi utilizați o bandă electrică pentru a proteja articulațiile lipite de atingerea reciprocă. Odată ce sunteți sigur că fiecare culoare se potrivește cu firul respectiv, conectați-le direct la i2c și pinii de alimentare de pe Pi.

Dacă nu simțiți curajos sau nu aveți un controler de rezervă, puteți folosi întotdeauna un adaptor, cum ar fi Adaptorul MultiChuck, pentru a vă conecta controlerul la Pi, fără a sacrifica conectorul.

Utilizând un adaptor MultiChuck

Configurarea zmeii Pi

i2c nu este activat în mod implicit, aceasta necesită editarea a două fișiere. Primul fișier va activa protocolul serial, iar cel de-al doilea va porni driverul serial atunci când boot-ul Raspberry Pi se ridică.

Pentru a edita primul fișier, tastați-l pe acesta LXTerminal fereastră sau PuTTY dacă vă conectați de la distanță: sudo nano / etc / modules

Adăuga i2c-dev și i2c-bcm2708 până la sfârșitul fișierului, astfel încât să pară următoarele:

Editarea fișierelor de pe zmeura Pi

Control-X pentru a salva modificările, Y pentru a confirma și introduce pentru a salva în fișier.

În continuare, pentru a activa șoferul la pornire, tastați:

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

apoi adăugați a # la începutul fiecărei linii, astfel încât să pară următoarele:


Editarea fișierelor de pe zmeura Pi

Din nou Control-X pentru a salva modificările, Y pentru a confirma și introduce pentru a salva în fișier. Acestea sunt schimbările necesare pentru ca Raspberry Pi să vorbească despre protocolul i2c. Tipul următor:

sudo reboot reporniți

pentru a permite modificările să aibă efect.

Instalarea bibliotecilor necesare

Odată ce restul de Raspberry Pi a fost repornit, deschideți din nou LXTerminal. Ultimul lucru pe care trebuie să-l faceți este să instalați modulele Python pentru a face față comunicării dintre Python și i2c:

sudo apt-get actualizare sudo apt-get instala python-smbus -y

Pentru a face mai ușor manipularea datelor nunchuck, am creat un modul care poate fi importat în scriptul tău. Deschis LXTerminal și tastați următoarea comandă pentru al descărca.

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

Citirea datelor Nunchuck

Acum aveți toate bibliotecile și modulele necesare, testați că funcționează. În timp ce încă mai intrăm LXTerminal, introduceți

sudo python

pentru a porni consola interactivă Python, folosind acest lucru putem scrie un test rapid cu Python. 

de la nunchuck import nunchuck wii = nunchuck () wii.raw ()

Dacă totul funcționează așa cum ar trebui, trebuie să așteptați să vedeți un set de numere de genul:

Testarea

Numerele corespund ieșirilor joystick-ului, accelerometrului și stărilor butoanelor. 

Wii.raw () vă va da o imprimare a fiecăruia - începând cu stânga pe care o aveți:
[Joystick X, Joystick Y, Accelerometru X, Accelerometru X, Accelerometru X, Date mixte conținând butoanele Z și C]

De asemenea, am adăugat funcții individuale pentru fiecare dintre acestea, pentru a vă face mult mai ușor de scris propriile scenarii.

wii.raw () # Returnează toate datele în wii.joystick raw () # Returnează doar pozițiile X și Y ale joystick-ului wii.accelerometru () # Returnează pozițiile X, Y și Z ale accelerometrului wii.button_c () # Returnează True dacă butonul C este apăsat, False dacă nu wii.button_z () # Returnează True dacă este apăsat butonul Z, Fals dacă nu wii.joystick_x () # Returnează doar poziția X a joystick-ului wii.joystick_y () # Returns just poziția Y a joystick-ului wii.accelerometer_x () # Returnează doar poziția X a accelerometrului wii.accelerometer_y () # Returnează doar poziția Y a accelerometrului wii.accelerometer_z () # Returnează doar poziția Z a accelerometrului wii. scară (valoare, min, max, out_min, out_max) # Funcționează la fel ca Arduino Map, perfect pentru a schimba valori returnate la o scară diferită, adică -100 - +100

Puteți încerca unul cu o buclă introducând următoarele în a sudo python consolă. Aceasta va scoate poziția curentă a joystick-ului, așa că tastați-l și mutați-l pe joystick în jurul pentru a vedea schimbarea numerelor.

de la nunchuck import nunchuck de la importul de timp de somn Wii = nunchuck () în timp ce True: wii.joystick () somn (0.2)

Folosind Turtle

Acum ai conectat Nunchuck la Raspberry Pi, ai instalat bibliotecile si modulele si ai testat ca functioneaza, iti voi arata cum sa faci ceva distractiv cu el. 

Python, pe zmeura Pi, vine instalat cu Broasca testoasa modul pentru a permite oricui să creeze modele rapid și ușor prin adăugarea câtorva rânduri de cod. Deoarece este foarte ușor să mergem, vă voi arăta cum să folosiți nunchuckul pentru a controla o broască țestoasă.

Pentru următoarea secțiune voi folosi Inactiv în care să scrieți codul Python, dar deoarece protocolul serial necesită drepturi de administrator, va trebui să reveniți LXTerminal din nou și tip:

sudo inactiv

Clic Fişier atunci Fereastră nouă. Noua fereastră este locul în care codul Python va merge. Presare F5 va rula codul. Adăugați codul anterior pentru a importa module de somn și nunchuck, împreună cu broasca țestoasă.

de la nunchuck de import nunchuck de la importul importului de somn de import de țestoasă wii = nunchuck () turtle.setheading (90) în timp ce True: dacă wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) dacă wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10)
scriptul nunchuckturtle.py

După introducerea codului, apăsați F5 pentru al rula. Apoi vi se va cere să salvați fișierul, deci da-i un nume adecvat. O fereastră va apărea acum cu un triunghi negru mic, sunteți acum gata să încercați, așa că dați joystick-ul un test.


În codul pe care l-ați utilizat, primele patru linii importează modulele necesare și inițiază nunchuck gata de utilizare. turtle.setheading (90) va indica săgeata în sus, ca 0 arată spre dreapta. Următorul bloc începe o buclă pentru totdeauna-în timp ce este adevărat:. Python verifică dacă poziția joystick-ului este deasupra sau dedesubtul unui anumit număr și respectiv mișcă cursorul țestoasei.

Adăugarea butoanelor

Acum aveți mișcare, vă voi arăta cum să adăugați o anumită interactivitate suplimentară utilizând C și Z butoane. Unele funcții care vor fi la îndemână vor fi curățarea ecranului și, de asemenea, ridicarea stiloului injector (pen-ului), pentru a vă putea deplasa fără a trage o linie.

de la nunchuck de import nunchuck de la importul importului de somn de import de țestoase wii = nunchuck () penstate = 0 turtle.setheading (90) în timp ce True: dacă wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) dacă wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) dacă wii.button_c () == Adevărat: turtle.setposition (0,0) turtle.sethead (90) turtle.clear = 0: turtle.up () penstate = 1 alt: turtle.down () penstate = 0 somn (0.2)


presa F5 pentru a salva și a începe noul script și pentru a testa butoanele. Buton C va șterge ecranul și va reseta poziția cursorului, în timp ce Z va ridica și fixa stiloul pentru a putea începe și a opri desenarea unei linii.

Folosind nunchuck pentru a desena

Voi distruge codul butonului, astfel încât să înțelegeți ce se întâmplă când apăsați butonul. 

Când apăsați pe C butonul, care vine înapoi ca Adevărat și va întoarce broasca testoasă înapoi astfel încât aceasta să fie îndreptată în sus, apoi mutați broasca testoasa înapoi în centrul ecranului și, în final, ștergeți ecranul. 

Când apăsați pe Z , se stochează o variabilă pentru a reține starea stiloului injector (pen-ului) și fie ridicați pixul pentru a opri desenarea, fie plasați stiloul înapoi pentru a continua desenul.

Concluzie

Sper că în acest tutorial ați câștigat cunoștințele pentru a începe să aplicați ceea ce ați învățat să extindeți ce se poate face cu nunchuckul. 

Unele lucruri care pot fi făcute, cum ar fi roboții de control, creați jocuri cum ar fi șarpele sau chiar rotiți și opriți LED-urile care sunt conectate la pinii GPIO ai unei fructe de zmeură.