Jetzt ist der dritte und letzte Teil des Wii Nunchuk Tutorials für den Arduino auch online. Hier findet ihr Teil 1 und Teil 2.
Über die Wiinunchuk-Library kann der Beschleunigungssensor nicht nur ganz einfach ausgelesen werden, die Library bietet auch erweiterte Funktionen, die den Drehwinkel um die 3 Achsen in Grad direkt zurückliefern. Gesteuert wird wieder der kleine Kamerakopf mit den beiden Servos – das Ergebnis seht ihr im Video.
Bezugsquellen:
– Original Nintendo Wii Nunchuk Controller
Der zugehörige Arduino Sketch ist kommentiert und wird zusätzlich im Video erklärt. Infos zur Installation der benötigten Library findet ihr in Teil 1 des Artikels.
Zum Debuggen werden die errechneten Werte auch am seriellen Monitor ausgegeben.
/* * 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 <Servo.h> #include <wiinunchuck.h> Servo panServo; // Servo Links-Rechts = Pan = Roll Servo tiltServo; // Servo Oben-Unten = Tilt = Pitch int pinPan = 10; int pinTilt = 11; float panPos = 90.0; // Aktuelle Position float tiltPos = 90.0; // Aktuelle Position void setup(){ Serial.begin(9600); nunchuk_init(); delay(100); nunchuk_get_data(); delay(100); panServo.attach(pinPan); tiltServo.attach(pinTilt); delay(10); panServo.write(panPos); tiltServo.write(tiltPos); } void loop(){ nunchuk_get_data(); // Daten vom Nunchuk empfangen delay(10); // Wenn Z-Taste gedrückt dann Bewegung zulassen if (nunchuk_zbutton() == 1) { // rollangle und pitchangle geben Drehung // um Längs- und Querachse in Grad zurück. Perfekt! int roll = nunchuk_rollangle(); int pitch = nunchuk_pitchangle(); // Nur bis maximale Neigung von 60 Grad berücksichtigen, // alles darüber wird ignoriert if ((abs(roll) <= 60) & (abs(pitch) <= 60)) { // *1.5 um die 60 Grad wieder auf 90 Grad zu mappen panPos = 90+roll*1.5; tiltPos = 90-pitch*1.5; } } char buffer[50]; // sprintf wird im Video zu Teil 2 erklaert sprintf(buffer, "X:%3d Y:%3d Z:%3d - Roll: %3d Pitch: %3d", nunchuk_accelx(), nunchuk_accely(), nunchuk_accelz(), nunchuk_rollangle(), nunchuk_pitchangle()); Serial.println(buffer); panServo.write((int)panPos); tiltServo.write((int)tiltPos); delay(50); } |
Viel Spaß beim Nachbauen! Fragen und Anregungen bitte einfach in die Kommentare schreiben.
Noch einmal die Links zu den anderen Teilen der Serie:
Wii Nunchuk Controller am Arduino – Teil 1 – Grundlagen
Wii Nunchuk Controller am Arduino – Teil 2 – Servos steuern mit dem Joystick
wer nicht den gantzen scatch abschreiben will muss einfach alles in texteditor kopieren und danach davon in den neuen scatch einfügen nur so als tipp
Danke dafür! Hammer Tutorial. Da mein EN nicht so toll ist bin ich froh das es dich gibt… wenn mein EN besser wäre, wäre ich natürlich immer noch froh das es dich gibt :-) weiter so
Kann man auch die Yaw achse abfragen ? ih möchte den Nunchuk mit einem arduino pro micro als Joystick für flug spiele am pc benutzen.
Alles funktioniert!
Vielen Dank dafür.
Sehr gut erklärt, auch für einen Anfänger wie mich.