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

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

  • 7. Mai 2016 um 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

    Antworten
  • 11. September 2016 um 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

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.