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.

Tagged on:                     

11 thoughts on “Wii Nunchuk Controller am Arduino – Teil 1 – Grundlagen

  • Pingback: Seite nicht gefunden – Makerblog.at

  • Pingback: Wii Nunchuk Controller am Arduino – Teil 3 – Beschleunigungssensor abfragen – Makerblog.at

  • 22. Februar 2017 at 23:31
    Permalink

    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.

    Reply
    • 27. Februar 2017 at 17:37
      Permalink

      Am Controller sollte es nicht liegen, die sollten alle kompatibel sein. Kommt im seriellen Monitor irgendwas, oder gar nichts? Auch keine Initialisierungsmeldung?

      Reply
  • 4. Juni 2017 at 11:10
    Permalink

    Kann es sein, dass du den Befehl „Serial.begin(9600);“ zum Starten des Monitors vergessen hast?

    Reply
  • 17. Juni 2017 at 21:23
    Permalink

    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?

    Reply
    • 4. Mai 2019 at 10:15
      Permalink

      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

      Reply
  • 25. August 2017 at 1:34
    Permalink

    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.

    Reply
  • 1. Mai 2018 at 17:49
    Permalink

    Habe gleiches Problem wie Alwin. Gibt es schon eine Lösung?

    Vorab vielen Dank für einen hilfreichen Support.

    Reply
  • 21. Mai 2018 at 21:35
    Permalink

    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!

    Reply
  • 23. September 2018 at 11:14
    Permalink

    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

    Reply

Schreibe einen Kommentar zu Adi Dax Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.