Sa. Mrz 2nd, 2024

In Bearbeitung …

Der Nunchuck Controller ist ein Eingabe-Instrument für die bekannte Wii-Spieleconsole. Er verfügt über 2 Druckknöpfe, einen Joystick und einen eingebauten 3-Achsen-Beschleunigungssensor. Dieser Controller ist aufgrund der hohen Verbreitung für wenig Geld erhältlich, sehr robust und verfügt über eine gut dokumentierte I2C-Schnittstelle, die es erlaubt, diesen mit dem Arduino zu verbinden. Somit kann der Controller für die verschiedensten Steuerungsaufgaben zweckentfremdet werden.

Älterer Wii-Nunchuk-Controller

Da viele Maker diesen Controller bereits in Ihren Projekten verwenden, finden sich viele Programm-Bibliotheken im Internet, die eine einfache Verwendung erlauben. Die hier verwendete Bibliothek stellt folgende Funktionen bereit:

void nunchuk_setpowerpins()void nunchuk_init()
int nunchuk_get_data()void nunchuk_calibrate_joy()
inline unsigned int nunchuk_zbutton()inline unsigned int nunchuk_cbutton()
inline int nunchuk_joy_x()inline uint16_t nunchuk_accelx()
inline int nunchuk_cjoy_x()inline uint16_t nunchuk_accely()
inline int nunchuk_cjoy_y()inline uint16_t nunchuk_accelz()
inline int nunchuk_joyangle()void nunchuk_calibrate_accelxy()
inline int nunchuk_rollangle()void nunchuk_calibrate_accelz()
inline int nunchuk_pitchangle()
Funktionen der wiinunchuk-Bibliothek

Die Bibliothek bereitet die Daten vom Controller so auf, dass diese über eine Anweisung ausgelesen werden können. Insgesamt benötigt man einen Speicherpuffer mit 75 Zeichen, in die sämtliche Sensorwerte geschrieben werden. Wie das geht, zeigt das erste Beispiel-Programm, dass nur die Joystick-Position und die Zustände der beiden Schalter C und Z ausliest.

#include <Wire.h>
#include <wiinunchuck.h>

void setup() { 
  Serial.begin(9600);
  nunchuk_init(); // Nunchuk initialisieren, Joystick auf Mittelposition
  delay(100);
  nunchuk_calibrate_joy();
  delay(100);
}
 
void loop() {
  nunchuk_get_data();   // Daten (6 Byte) vom Nunchuk Controller auslesen 
  char buffer[25];
  sprintf(buffer, "X:%3d Y:%3d Z:%1d C:%1d", 
          nunchuk_cjoy_x(), nunchuk_cjoy_y(), 
          nunchuk_zbutton(), nunchuk_cbutton() );
  Serial.println(buffer);   // Zusammengesetzten String an seriellen Monitor schicken
  delay(50);
}

Der Nunchuk wird über ein einfaches I²C Protokoll angesprochen. Mit Hilfe eines Befehles können wir alle Daten aus dem Nunchuk lesen. Die Daten kommen dabei als Paket von 6 Bytes in folgendem Format:

Byte 1: Joystick – X
Byte 2: Joystick – Y
Byte 3: ACC X (9..2)
Byte 4: ACC Y (9..2)
Byte 5: ACC Z (9..2)
Byte 6: ist aufgeteilt in Bits
Bit 0: Z-Taste
Bit 1: C-Taste
Bit 2,3: fehlenden Bits 0,1 vom ACC X
Bit 4,5: fehlenden Bits 0,1 vom ACC Y
Bit 6,7: fehlenden Bits 0,1 vom ACC Z

Um die Daten mit einem Arduino verarbeiten zu können, muss der Controller natürlich mit dem Arduino verbunden werden. Es gibt sechs Steckplätze, wobei nur die vier Äusseren belegt sind.

Wii-Steckerbelegung, die Farben können allerdings variieren.

Es gibt Adapter, aber aufgrund der Tatsache, dass ich meine nicht mehr anderswo benötige, habe ich den Stecker einfach abgeschnitten und Arduino-kompatibel mit Steckbrücken versehen.