Verwenden einer Wii-Nunchuck zur Steuerung von Python Turtle

In diesem Tutorial zeige ich Ihnen, wie Sie einen Wii-Nunchuck-Adapter an einen Raspberry Pi anschließen und das Schildkrötenmodul mit Python steuern.

Dieses Tutorial funktioniert sowohl mit offiziellen Nintendo- als auch mit Drittanbieter-Nunchakus. Der Nunchuck ist ein guter Multi-Use-Eingang für einen Raspberry Pi, da er preisgünstig abgerufen werden kann und einen Joystick, einen dreiachsigen Beschleunigungssensor und zwei Tasten in einem ergonomisch freundlichen Controller enthält.

Bedarf

Um den Nunchuck mit dem Pi zum Laufen zu bringen, benötigen Sie:

  • Ein Raspberry Pi mit vorinstallierter SD-Karte mit Raspbian (siehe Tutorial) So blenden Sie eine SD-Karte für Raspberry Pi wenn du musst)
  • Ein Nintendo-Nunchuck
  • Ein Adapter wie MultiChuck
  • Oder weibliche Überbrückungsdrähte, Lötkolben, Lötmittel und Isolierband, um die Verbindung abzudecken

Den Nunchuck anschließen

Wenn Sie sich mutig fühlen, schneiden Sie die Anschlüsse gerne ab und haben Ersatzcontroller. Sie können die Drähte direkt an die Raspberry Pi GPIO-Pins anschließen. Da für jeden Anschluss Kabel mit unterschiedlichen Farben verwendet werden können, öffnen Sie am besten den Controller, um die Verdrahtungsfarben zu ermitteln.


Verdrahtung der 

In meinem Controller habe ich die folgenden Drähte, da es sich um einen Controller eines Drittanbieters handelt. Beachten Sie die Farben und die Pins, an die sie angeschlossen werden. Die Chancen stehen gut, dass sie sich in meinem Beispiel erheblich vom Steckverbinder unterscheiden können.

  • Boden-Braun
  • Serielle Daten-Rosa
  • Serienuhr-Gelb
  • Leistung (VDD)-Weiß
  • Addon Detect-Blau-nicht verwendet
Ein Beispiel für die Pinbelegung der Verdrahtung

Schneiden Sie den Endstecker ab, den Sie an die Wiimote anschließen, und entfernen Sie die Kunststoffummantelung, um die blanken Drähte freizulegen. Löten Sie jeden Draht an eine weibliche Drahtbrücke, und verwenden Sie anschließend ein Isolierband, um die Lötstellen vor Berührung zu schützen. Wenn Sie sich sicher sind, dass jede Farbe mit dem jeweiligen Draht übereinstimmt, stecken Sie sie direkt auf die i2c- und die Power-Pins des Pi.

Wenn Sie sich nicht mutig fühlen oder keinen Controller zur Verfügung haben, können Sie immer einen Adapter wie den MultiChuck-Adapter verwenden, um Ihren Controller an Ihren Pi anzuschließen, ohne den Anschluss zu beeinträchtigen.

Verwendung eines MultiChuck-Adapters

Einrichten des Himbeer-Pi

i2c ist nicht standardmäßig aktiviert. Dies erfordert die Bearbeitung von zwei Dateien. Die erste Datei aktiviert das serielle Protokoll und die zweite startet den seriellen Treiber, wenn der Raspberry Pi startet.

Um die erste Datei zu bearbeiten, geben Sie diese in das ein LXTerminal Fenster oder Kitt Wenn Sie eine Remote-Verbindung herstellen: Sudo Nano / etc / module

Hinzufügen i2c-dev und i2c-bcm2708 bis zum Ende der Datei, so dass es so aussieht:

Dateien auf dem Raspberry Pi bearbeiten

Control-X um die Änderungen zu speichern, Y zu bestätigen und Eingeben in der Datei speichern.

Um den Treiber beim Start zu aktivieren, geben Sie Folgendes ein:

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

dann fügen Sie ein # an den Anfang jeder Zeile, so dass es so aussieht:


Dateien auf dem Raspberry Pi bearbeiten

Nochmal Control-X um die Änderungen zu speichern, Y zu bestätigen und Eingeben in der Datei speichern. Dies sind die Änderungen, die das Raspberry Pi benötigt, um über das i2c-Protokoll zu sprechen. Nächster Typ:

Sudo Neustart Neustart

um die Änderungen wirksam werden zu lassen.

Installieren der erforderlichen Bibliotheken

Nach dem Neustart des Raspberry Pi öffnen Sie LXTerminal erneut. Als letztes müssen Sie jetzt die Python-Module installieren, um die Kommunikation zwischen Python und i2c zu handhaben:

sudo apt-get Update Sudo apt-get installieren python-smbus -y

Um den Umgang mit den Nunchuck-Daten zu vereinfachen, habe ich ein Modul erstellt, das in Ihr Skript importiert werden kann. Öffnen LXTerminal und geben Sie den folgenden Befehl ein, um es herunterzuladen.

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

Nunchuck-Daten lesen

Jetzt haben Sie alle erforderlichen Bibliotheken und Module, testen Sie, ob es funktioniert. Während noch in LXTerminal, eintippen

Sudo-Python

Um die interaktive Python-Konsole zu starten, können Sie hiermit einen Schnelltest mit Python schreiben. 

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

Wenn alles so funktioniert, wie es sollte, sollten Sie mit einer Reihe von Zahlen wie folgt rechnen:

Testen

Die Zahlen entsprechen den Ausgaben des Joysticks, des Beschleunigungsmessers und den Zuständen der Tasten. 

Wii.raw () gibt Ihnen einen Ausdruck von jedem, beginnend mit dem Linken, den Sie haben:
[Joystick X, Joystick Y, Beschleunigungsmesser X, Beschleunigungsmesser X, Beschleunigungsmesser X, Gemischte Daten mit Tasten Z und C]

Ich habe auch einzelne Funktionen für jede dieser Funktionen hinzugefügt, um das Schreiben Ihrer eigenen Skripte zu erleichtern.

wii.raw () # Gibt alle Daten in Raw zurück wii.joystick () # Gibt nur die X- und Y-Positionen des Joysticks zurück wii.accelerometer () # Gibt die X-, Y- und Z-Positionen des Beschleunigungssensors zurück wii.button_c () # Gibt True zurück, wenn die C-Taste gedrückt wird. False, wenn nicht. Wii.button_z () # Gibt True zurück, wenn die Z-Taste gedrückt wird. False, wenn nicht wii.joystick_x () # Gibt nur die X-Position des Joysticks zurück. Wii.joystick_y () # Gibt nur zurück die Y-Position des Joysticks wii.accelerometer_x () # Gibt nur die X-Position des Beschleunigungsmessers zurück. wii.accelerometer_y () # Gibt nur die Y-Position des Beschleunigungsmessers zurück. wii.accelerometer_z () # Gibt nur die Z-Position des Beschleunigungsmessers wii zurück. scale (value, min, max, out_min, out_max) # Funktioniert genauso wie die Arduino Map, ideal zum Ändern von Werten, die auf einen anderen Maßstab zurückgegeben werden, z. B. -100 - +100

Sie können eine mit einer Schleife ausprobieren, indem Sie Folgendes in a eingeben Sudo-Python Konsole. Dadurch wird die aktuelle Position des Joysticks ausgegeben. Geben Sie den Joystick ein und bewegen Sie ihn, um die Anzahl der Nummern zu ändern.

von nunchuck import nunchuck from time import sleep wii = nunchuck (), während wahr: wii.joystick () sleep (0.2)

Schildkröte verwenden

Jetzt haben Sie Ihr Nunchuck an den Raspberry Pi angeschlossen, die Bibliotheken und Module installiert und getestet, dass es funktioniert. Ich zeige Ihnen, wie Sie etwas Spaß daran haben. 

Python auf dem Raspberry Pi wird mit installiert Schildkröte Mit diesem Modul können Sie schnell und einfach Muster erstellen, indem Sie ein paar Zeilen Code hinzufügen. Da es sehr einfach ist, loszulegen, zeige ich Ihnen, wie Sie mit dem Nunchuck eine Schildkröte kontrollieren können.

Für den nächsten Abschnitt werde ich verwenden Im Leerlauf Um den Python-Code zu schreiben, aber da das serielle Protokoll Administratorrechte erfordert, müssen Sie zurückgehen LXTerminal wieder und tippe:

Sudo im Leerlauf

Klicken Datei dann Neues Fenster. In dem neuen Fenster wird der Python-Code angezeigt. Drücken F5 wird den Code ausführen. Fügen Sie den Code von vor ein, um Schlaf- und Nunchakomodule zusammen mit der Schildkröte zu importieren.

von nunchuck import nunchuck aus zeit import schlaf turtle wii = nunchuck () turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) wenn wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: Schildkröte (10)
nunchuckturtle.py script

Nachdem Sie den Code eingegeben haben, drücken Sie F5 um es auszuführen Sie werden dann aufgefordert, die Datei zu speichern. Geben Sie ihr einen geeigneten Namen. Ein Fenster wird nun mit einem kleinen schwarzen Dreieck angezeigt. Jetzt können Sie es ausprobieren. Testen Sie den Joystick.


In dem Code, den Sie verwendet haben, importieren die ersten vier Zeilen die benötigten Module und initiieren den Nunchuck, der zur Verwendung bereit ist. turtle.setheading (90) wird den Pfeil nach oben zeigen, als 0 zeigt nach rechts. Der nächste Block startet eine Ewig-Schleife-während wahr:. Python prüft, ob sich die Joystick-Position oberhalb oder unterhalb einer bestimmten Zahl befindet, und bewegt den Schildkröten-Cursor entsprechend.

Schaltflächen hinzufügen

Jetzt haben Sie Bewegung. Ich werde Ihnen zeigen, wie Sie mit der Interaktivität etwas mehr Interaktivität hinzufügen können C und Z Tasten. Einige nützliche Funktionen sind das Löschen des Bildschirms und das Anheben des Stiftes, sodass Sie sich bewegen können, ohne eine Linie zu zeichnen.

von nunchuck import nunchuck aus zeit import schlaf turtle wii = nunchuck () penstate = 0 turtle.setheading (90), während wahr: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) wenn wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) if wii.button_c () == True: turtle.setposition (0,0) turtle.setheading (90) turtle.clear () if wii.button_z () == True: wenn penstate = = 0: turtle.up () penstate = 1 sonst: turtle.down () penstate = 0 sleep (0.2)


Drücken Sie F5 um das neue Skript zu speichern und zu starten und die Schaltflächen zu testen. Taste C löscht den Bildschirm und setzt die Cursorposition zurück Z hebt den Stift an und setzt ihn ab, so dass Sie mit dem Zeichnen einer Linie beginnen und aufhören können.

Mit dem Nunchaku zeichnen

Ich werde den Tastencode aufschlüsseln, damit Sie verstehen, was passiert, wenn Sie die Taste drücken. 

Wenn Sie die Taste drücken C Taste, das kommt als zurück Wahr und dreht die Schildkröte zurück, so dass sie nach oben zeigt, bewegt sie dann wieder in die Mitte des Bildschirms und löscht schließlich den Bildschirm. 

Wenn Sie die Taste drücken Z Wenn Sie die Taste drücken, wird eine Variable gespeichert, um sich an den Zustand des Stiftes zu erinnern und entweder den Stift anzuheben, um das Zeichnen zu beenden, oder den Stift zurückzusetzen, um das Zeichnen fortzusetzen.

Fazit

Ich hoffe, dass Sie in diesem Tutorial das Wissen erworben haben, um das Gelernte anzuwenden, um das zu erweitern, was mit dem Nunchakuck möglich ist. 

Einige Dinge, die ausgeführt werden können, wie z. B. Kontrollroboter, erstellen Spiele wie Schlange oder schalten LEDs ein und aus, die mit den GPIO-Pins eines Raspberry Pi verbunden sind.