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); 
}
Code-Sprache: Arduino (arduino)

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

4 thoughts on “Wii Nunchuk Controller am Arduino – Teil 3 – Beschleunigungssensor abfragen

  • 7. Mai 2016 at 9:39
    Permalink

    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

    Reply
  • 11. September 2016 at 16:20
    Permalink

    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

    Reply
  • 23. August 2017 at 17:12
    Permalink

    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.

    Reply
  • 20. Dezember 2018 at 23:25
    Permalink

    Alles funktioniert!
    Vielen Dank dafür.
    Sehr gut erklärt, auch für einen Anfänger wie mich.

    Reply

Schreibe einen Kommentar zu Pixabit 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.