Wii Nunchuk mit Arduino verbinden: Schritt-für-Schritt-Anleitung (I2C)
Komponenten und Zubehör
| Bauteil | Menge | Hinweise |
|---|---|---|
| Nintendo Nunchuk (Original oder Replika) | 1 | Original: bessere Joystick-Auflösung, abgeschirmte Kabel, präziserer Beschleunigungssensor |
| Level Shifter (bidirektional, 3,3 V ↔ 5 V) | 1 | Empfohlen, da Nunchuk mit 3,3 V betrieben werden sollte |
| Arduino UNO (oder kompatibel) | 1 | |
| Nunchuk-Adapter (optional) | 1 | Vermeidet Abschneiden des Steckers |
Projektbeschreibung
Gamepads sind ideale Eingabegeräte für Maker-Projekte. Der Wii Nunchuk ist eine günstige Erweiterung mit I2C-Schnittstelle: 2 Membrantasten (C, Z), 2-Achsen-Joystick, 3-Achsen-Beschleunigungssensor. Dieser Guide zeigt die Hardware-Anbindung und stellt eine stabile C-Bibliothek bereit.
Original vs. Replika
Original (~10–15 € teurer): Abschirmung, bessere Joystick-Linearität, präziserer Accelerometer. Replika: Günstiger, aber Joystick reagiert nicht auf minimale Bewegungen. Die Bibliothek nutzt einen Kalman-Filter, der Unterschiede weitgehend ausgleicht. Für Langlebigkeit Original, für Experimente Replika OK.
Steckerbelegung (Nunchuk-Stecker frontal betrachtet)
Der proprietäre Stecker hat 6 Pins. Unbedingt eigenen Stecker prüfen – Kabelfarben variieren!
| Pin | Original | Replika (Beispiel) |
|---|---|---|
| 1 | Grün → SDA | Gelb → SDA |
| 2 | nc | Schwarz → nc |
| 3 | Rot → 3,3 V | Grün → 3,3 V |
| 4 | Weiß → GND | Rot → GND |
| 5 | nc | nc |
| 6 | Gelb → SCL | Weiß → SCL |
Ohne Adapter: Stecker öffnen, Kabel abschneiden, Belegung prüfen, direkt verdrahten. Mit Adapter: 3,3 V an Arduino A2, GND an A1, dann im Code nunchuk_init_power() aufrufen.
Verdrahtung (Fritzing)
- Nunchuk SDA → Level Shifter LV1 → HV1 → Arduino A4 (SDA)
- Nunchuk SCL → Level Shifter LV2 → HV2 → Arduino A5 (SCL)
- Nunchuk 3,3 V → Level Shifter LV (3,3 V-Seite) / oder direkt Arduino 3,3 V Pin
- Nunchuk GND → GND (gemeinsam)
- Level Shifter HV-Seite an Arduino 5 V / GND
Software: Nunchuk Library
Bibliothek (Header-only) herunterladen: GitHub. In Sketch-Ordner legen.
Minimalbeispiel
#include <Wire.h>
#include "nunchuk.h"
void setup() {
Serial.begin(9600);
Wire.begin();
// nunchuk_init_power(); // Falls A1/A2 als Stromversorgung genutzt werden
nunchuk_init();
}
void loop() {
if (nunchuk_read()) {
// Daten in nunchuk_data Struct verfügbar
nunchuk_print(); // Gibt formatiert auf Serial aus
}
delay(10);
}
Mit beiliegender Processing-Datei kann man einen Kegel per Nunchuk balancieren (Demo).
Wichtige Funktionen
nunchuk_buttonZ()/nunchuk_buttonC()→ 1/0nunchuk_joystickX()/nunchuk_joystickY()→ kalibriert (-128..127)nunchuk_joystickX_raw()/nunchuk_joystickY_raw()→ Rohwertenunchuk_joystick_angle()→ Winkel in Radiantnunchuk_accelX()/nunchuk_accelY()/nunchuk_accelZ()→ kalibriertnunchuk_pitch()/nunchuk_roll()→ Neigungswinkel (Radiant)- Kein yaw() – Beschleunigungssensor misst keine Rotation.
Hinweis: Pitch auf 180° begrenzt; Roll fehlerhaft bei Pitch > 180°. Berechnung annimmt nur Gravitation als Kraft (statisch/gleichförmige Bewegung).
Kalibrierung
In Library-Header Nullpositionen als Konstanten definiert. Eigene Rohwerte in Neutralstellung messen & Konstanten anpassen.
I2C-Protokoll (Details)
Adresse: 0x52. Initialisierung:
- Mit Verschlüsselung:
START, 0x40, 0x00, STOP→每字节解密:(x ^ 0x17) + 0x17 - Ohne Verschlüsselung (empfohlen):
START, 0xF0, 0x55, STOPdannSTART, 0xFB, 0x00, STOP→ funktioniert auch mit Clones.
Daten lesen (6 Bytes ab Adresse 0x00): START, 0x00, STOP → READ 6 Byte
Byte-Aufbau:
- Byte 1: Joystick X [7:0]
- Byte 2: Joystick Y [7:0]
- Byte 3: Accel X [9:2]
- Byte 4: Accel Y [9:2]
- Byte 5: Accel Z [9:2]
- Byte 6: Az[1:0] Ay[1:0] Ax[1:0] ¬Bc ¬Bz (Tasten invertiert, LSBs der Accel-Achsen)
Kalibrierdaten (16 Bytes ab 0x20): 0G/1G-Werte für X/Y/Z, Joystick Min/Max/Center, Checksums.
Custom Parts
Fritzing-Teil für Nunchuk im GitHub-Repo enthalten.
Herstellungsprozess
- IR-Fernbedienungsbefehle auf Raspberry Pi ohne LIRC erfassen: Python UART-Ansatz
- LED-Helligkeit per PWM und Taster am Arduino Mega steuern
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung