Als am 8. Dezember 2006 die Nintendo Wii in Europa auf den Markt kam, war als Erweiterung für Wii-Fernbedienung („Wiimote“) ein zusätzlicher Controller, genannt „Nunchuk“, erhältlich. Dieser Nunchuck verfügt über 2 Druckknöpfe, einen Joystick und einen eingebauten 3-Achsen-Beschleunigungssensor, auch Accelerometer genannt.
Mittlerweile sind diese Sensoren in verbesserter Form allgegenwärtig, unter anderem in unseren Smartphones. Beim Erscheinen der Nintendo Wii war der Nunchuk die günstigste Quelle für einen derartigen Sensor. Mit zunehmender Verbreitung der Arduino Plattform verwendeten viele Bastler diesen Controller – auch weil er über das bekannte und gut dokumentierte serielle Kommunikationsprotokoll I²C mit der Wiimote verbunden ist und diese einfach mit dem Arduino gelesen werden kann.
In diesem Video seht ihr, wie ein Wii Nunchuk Controller mit dem Arduino verbunden wird und wie man mit der Wii Nunchuck Library auf die Werte der Sensoren zugreifen kann.
Bezugsquellen:
– Original Nintendo Wii Nunchuk Controller
Damit der Arduino Sketch funktioniert, muss zuerst die Wii Nunchuck Library installiert werden. Die aktuelle Version findet ihr hier auf Github.
Wenn ihr die Library mit „Download ZIP“ herunterladet, dann muss nach dem Download der Dateiname von wiinunchuck-h-master.zip
auf wiinunchuck-h.zip
geändert werden. Dann kann die Library über den Menüpunkt „Sketch -> Include Library -> Add .ZIP Library“ in der Arduino IDE hinzugefügt werden.
Hier ist der Programmcode, den ich im Video verwende. Mit diesem Arduino Sketch können die aktuellen Werte der beiden Druckknöpfe Z und C und die Position des Joysticks am seriellen Monitor ausgegeben werden.
/*
* Weitere Infos: www.makerblog.at
*
* Library zum Download: https://github.com/timtro/wiinunchuck-h
* Achtung: Nach dem Download des ZIPs und vor dem Import der Library in die Arduino IDE
* das "-master" aus dem Dateinamen löschen.
*/
#include <Wire.h>
#include <wiinunchuck.h>
void setup() {
Serial.begin(9600);
// Nunchuk initialisieren und Joystick auf Mittelposition kalibrieren
nunchuk_init();
delay(100);
nunchuk_calibrate_joy();
delay(100);
}
void loop() {
// Daten (6 Byte) vom Nunchuk Controller auslesen
nunchuk_get_data();
// Die einzelnen Werte stehen jetzt in Funktionen der WiiNunchuck-Library zur Verfügung
char buffer[25];
/*
* sprintf() wird dazu verwendet, um einen String aus einem formatierten Vorlagenstring zu erzeugen.
* Hierfür wird in den Buffer, der als erstes Argument erzeugt wird der Formatstring kopiert
* und die Substitutionszeichen werden mit den gegebenen Parametern ersetzt.
* %3d bedeutet z.B.: Formatiere immer 3-stellig, notfalls mit führenden Leerzeichen
*/
sprintf(buffer, "X:%3d Y:%3d Z:%1d C:%1d", nunchuk_cjoy_x(), nunchuk_cjoy_y(), nunchuk_zbutton(), nunchuk_cbutton());
// Zusammengesetzten String an den seriellen Monitor schicken
Serial.println(buffer);
delay(50);
}
Code-Sprache: Arduino (arduino)
Im zweiten Teil des Video-Tutorials steuern wir mit dem Joystick des Nunchuk die beiden Servos eines Pan-Tilt-Panoramakopfes für eine GoPro-Kamera.
Pingback: Seite nicht gefunden – Makerblog.at
Pingback: Wii Nunchuk Controller am Arduino – Teil 3 – Beschleunigungssensor abfragen – Makerblog.at
Habe alles so gemacht wie im Video beschrieben , aber die Anzeige im seriellen Monitor bleibt leer.
Kann es sein das der Controller nicht Original ist?
Ich bin ein Blutiger Anfänger. Danke.
Am Controller sollte es nicht liegen, die sollten alle kompatibel sein. Kommt im seriellen Monitor irgendwas, oder gar nichts? Auch keine Initialisierungsmeldung?
Kann es sein, dass du den Befehl „Serial.begin(9600);“ zum Starten des Monitors vergessen hast?
Bei mir Sind die X und Y Werte 0 und die Z und C Werte 1. Und es verändert sich nichts!
Kann mir jemand helfen?
Guten Morgen,
ich hoffe ich kann dir weiter helfen, auch wenn es schon fast 2 Jährechen her ist.
Ich hatte das selbe Porblem. Ich nutze einen Elegoo MEGA 2560 R3.
Hier haben ich die Pins 21 und 20 benutz.
Analog A4 -> Pin 20 SDA
Analog A5 -> Pin 21 SCL
Hoffe ich konnte helfen.
LG
Wie kann ich 2 Wii nunchuks gleichzeitig anschließen und die werte von den nunchuks einzeln auslesen ?
Ich benötige dringend hilfe. Schonmal Danke im vorraus.
Habe gleiches Problem wie Alwin. Gibt es schon eine Lösung?
Vorab vielen Dank für einen hilfreichen Support.
Ich habe mir gerade für meinen Modular-Synthesizer (Make Noise 0-Coast) eine kleine Arduino-Box gebaut, sodass ich mit dem Nunchuck/meinem Arm zwei Parameter am Synthesizer gleichzeitig steuern kann, z.B. Lautstärke mit y und einen klangverändernden Parameter mit x. Das ist, als holte ich den Klang aus dem leeren Raum heraus und formte ihn dann darin: phantastisch!
Ohne Ihre Hilfe hätte ich dies nie geschafft!
Vielen herzlichen Dank!
Thema: Wii Nunchuk
Problem: Werte im serialen Monitor verändern sich nicht wenn die Nunchuk bedient wird.
Lösung: Evtl. wurde die librarie nicht korrekt eingebunden/installiert.
Wie im Video hingewiesen sollte beim Download von GitHub die Endung „-master“ entfernt werden. Hatte ich gemacht, es wurde aber dennoch mit dieser Endung ein Ordner angelegt (Warum auch immer).
C:\Users\……….\Dokumente\Arduino\libraries\wiinunchuck-h-master
Diesen einfach ändern in „wiinunchuck-h“. Das hat bei mir geholfen.
C:\Users\……….\Dokumente\Arduino\libraries\wiinunchuck-h