Was hat denn ein Spiele Controller mit RC Modellbau zu tun.
Naja, der Nunchuk ist sehr interessant, weil er viele Steuerelemente intergriert und sehr gut verfügbar ist. Evt. haben Sie ja sogar noch einen Nunchuk rum liegen. Oder aber Sie besorgen sich einen neuen aus dem Internet. Angebote ab 3€ für einen Nachbau oder 10€ für ein Original sind möglich.
Der Nunchuk ist ein universelles Tool. Er enthält neben dem Joystick und den Knöpfen noch einen Beschleunigungssensor (Acc) für alle 3 Achsen. 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
Im Netz gibt es Adapterplatinen für den Nunchuk. Da dieser aber mittlerweile so günstig geworden ist, lohnt aich das kaum. Ich hab bei meinem einfach das Kabel am Stecker abgeschnitten und an die Kabel kleine Stife gelötet. Ein Stück Kabel hängt am Stecker noch dran, damit ich nochmal messen kann, welche Kabelfarben zu welchen Anschlüssen führen. Denn die Farben sind bei den verschiedenen Nunchuk Varianten leider nicht gleich. Da hilft nur selber messen. Die Anschlüsse sehen aber so aus:
Gnd verbindet man mit dem Gnd Anschluss vom Arduino.
VCC verbindet man mit dem 3V3 Anschluss.
SDA (Daten) verbindet man mit dem Analogpin 4.
SCL (Takt) verbindet man mit dem Analogpin 5.
Hat man diese Verbindungen hergestellt, kann man auch schon den ersten Test machen. Ich verwende eine Nunchuk Bibliothek vom Christoph Kielhorn (http://graphixfront.com) Hier mal mein Beispiel. Damit kann man 2 Servos steuern.
//#define debug #include <debug.h> #include <makros.h> #include <Servo.h> #include <Wire.h> #include "WiiNunchuck.h" /* This is a basic demo of using the WiiNunchuck library. Written by Grant Emsley - http://arduino.emsley.ca */ Servo servo1; Servo servo2; void setup() { #ifdef debug Serial.begin(57600); while(!Serial) ; Serial.print("WiiNunchuck Demo ready\n"); #endif // This initializes the nunchuck. If it can't initialize, or doesn't see the nunchuck, it waits forever. // It takes one option, a 1 for power, or 0 for no power. If power is turned on, it will output + on analog 3, - on analog 2. // I recommend using 0 and powering it through the 3.3v power connector if possible. Use this only if you are using the little nunchuck adapter. Nunchuck.init(0); servo1.attach(5); servo1.write(90); servo2.attach(6); servo2.write(90); } void loop() { Nunchuck.getData(); // Prints data for all the sensors in a table format Nunchuck.printData(); if (!(Nunchuck.zbutton() == 0)) { int joyx = Nunchuck.joyx(); joyx = map(joyx, 0, 255, 0, 180); servo1.write(joyx); int joyy = Nunchuck.joyy(); joyy = map(joyy, 0, 255, 0, 180); servo2.write(joyy); } else if (!(Nunchuck.cbutton() == 0)) { int joyx = Nunchuck.accelx(); joyx = map(joyx, 300, 700, 0, 180); servo1.write(joyx); int joyy = Nunchuck.accely(); joyy = map(joyy, 300, 700, 0, 180); servo2.write(joyy); } else { servo1.write(90); servo2.write(90); } // delay(10); }
Das ganze als ZIP gibt's hier: NunChuk2.zip
Es gibt jetzt verschiedene Möglichkeiten.
Beispiele: