Jump to content
elektro-skateboard.de

Wii Nunchuck mit Ardruino


benediktsamuel

Empfohlene Beiträge

Geschrieben

Hehe, gar nicht mal so falsch. :D

 

Jedoch wäre es Verschwendung, das Board zu sprengen, wenn man die Sprengsätze auch abwerfen kann.. :D

 

Viele Grüße,

 

Wolf

Geschrieben

Umgang mit der Nunchuk Lib:

 

Diese Lib im Verzeichnis:

\arduino\libraries\Wii

auspacken und dann erst Arduino starten!

 

Die Lib nicht öffen! Nur hineinkopieren!!!

 

Dann die .ino Datei in den Workspace kopieren und kompilieren!

Geschrieben (bearbeitet)

Also nochmal vielen Dank Barney. Es funktioniert !

 

Das Problem ist das mein Regler nach 3 Sekunden stoppt , falls ich keine Geschwindigkeitsänderung vornehme.

 

Die LED am Pin 12 Leuchtet ja ca 3 Sekunden lang, wenn man Die Geschwindigkeit verändert hat. Sobald die LED Pin 12 erlischt steht der Motor.

Das macht auch das Anlernen des Reglers kompliziert, da dieser in dem 3 Sekundenzeitraum angelernt werden muss.

 

Ansonsten kann ich nur sagen von der Größe ist der nano nicht zu schlagen, wenn die Pins dann noch ab sind hat er über alles gerade mal

17,8 x 43,2 mm .Die Höhe ist sehr gering.

Ich halte in dem Video die Z Taste gedrückt.

Externe Links nur für Mitglieder sichtbar

Gruß Sonni

bearbeitet von sonni
Geschrieben

Hallo Sonni,

 

freut mich. Du nimmst die Videos etwas schnell vom Netz. Ich hatte keine Chance diese zu sehen.

 

Das mit dem Stoppen sollte so nicht sein. Die Verbindung sollte nicht abreißen, wenn du den Wii-Controller in der Hand hältst. Hast du noch die Version, mit den Pin 12, der den Status der Verbindung anzeigt? Ich musste wegen des Bluetooth Moduls einige Pins umziehen lassen (Hupe, Licht, Status LED).

 

Lass mal den Rechner die Debug-Informationen anzeigen. Müsste Serial Monitor in der Arduino Umgebung heißen. Dort sind einige Debug Meldungen dann zu sehen. Ggf, müsstest du im Quelltext die auskommentierten Debug Meldungen wieder aktivieren. Diese sind zu erkennen durch Serial.println.

 

Grüße

 

Barney

Geschrieben (bearbeitet)

Eigentlich sollte der link funktionieren. Also ich kann es mir jedenfalls ansehen :) ich versuch es nachher nochmal freizuschalten und das mit der Debug Info herauszufinden .

 

Ja ich habe noch die Version mit Pin 12. Ich glaube du hättest auch mal eine aktuellere .ino gepostet oder?

Edit:

Mein u tube Kanal :

Externe Links nur für Mitglieder sichtbar

Video10

Gruß sonni

bearbeitet von sonni
Geschrieben (bearbeitet)

Hallo Sonni,

du hast dein video als native Handy abgelegt. Das kann ich nicht öffnen ohne zusätzliche Tools.

Mit meinem Handy konnte ich es jetzt mir ansehen.

 

Der Beschleunigungssensor scheint sich anders zu verhalten. Bei mir bleibt die Verbindung stehen. Ich versuche es mal nachzuvollziehen.

bearbeitet von barney
Geschrieben
Der Empfänger vom nunchuck gibt ein stetiges Signal aus bei hebelausschlag , laut der roten led am Empfänger .

 

 

#include <Wire.h>

#include <ArduinoNunchuk.h>

 

#define BAUDRATE 19200

 

ArduinoNunchuk nunchuk = ArduinoNunchuk();

 

void setup()

{

Serial.begin(BAUDRATE);

nunchuk.init();

}

 

void loop()

{

nunchuk.update();

 

Serial.print(nunchuk.analogX, DEC);

Serial.print(' ');

Serial.print(nunchuk.analogY, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelX, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelY, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelZ, DEC);

Serial.print(' ');

Serial.print(nunchuk.zButton, DEC);

Serial.print(' ');

Serial.println(nunchuk.cButton, DEC);

}

 

Bitte kompilieren und den Output der Seriellen Konsole zurück an mich.

Geschrieben (bearbeitet)

Hi, Barney

Ich habe nicht ganz verstanden was ich machen soll.

Soll ich

#include <Wire.h>

#include <ArduinoNunchuk.h>

 

#define BAUDRATE 19200

 

ArduinoNunchuk nunchuk = ArduinoNunchuk();

 

void setup()

{

Serial.begin(BAUDRATE);

nunchuk.init();

}

 

void loop()

{

nunchuk.update();

 

Serial.print(nunchuk.analogX, DEC);

Serial.print(' ');

Serial.print(nunchuk.analogY, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelX, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelY, DEC);

Serial.print(' ');

Serial.print(nunchuk.accelZ, DEC);

Serial.print(' ');

Serial.print(nunchuk.zButton, DEC);

Serial.print(' ');

Serial.println(nunchuk.cButton, DEC);

}

 

 

in den Workspace von der Arduino.exe kopieren und kompillieren ? und soll ich das ganze gleich auf den NANO uploaden?

 

Edit:

´Kompilierung abgeschlossen.

Binäre Sketchgröße: 5.164 Bytes (von einem Maximum von 30.720 Bytes)´

 

wenn ich es auf den Nano uploade dann reagiert der Regler nichtmehr und die LEDs auch nicht.

bearbeitet von sonni
Geschrieben (bearbeitet)

Ich habe den Fehler!

Es ist wirklich der Beschleunigungssensor.

Wenn ich den Controller bei der Bedienung schüttel , dann geht der Motor nicht aus!

Halte ich ihn für 3 Sekunden still, so stoppt der Motor.

Wäre da vielleicht eine hardwaretechnische Änderung sinnvoll, zum überbrücken des Beschleunigunssensors?

 

 

 

 

Hier auch mal eine interessante Sache

Gruß Sonni

bearbeitet von sonni
Geschrieben
Ich habe den Fehler!

Es ist wirklich der Beschleunigungssensor.

Wenn ich den Controller bei der Bedienung schüttel , dann geht der Motor nicht aus!

Halte ich ihn für 3 Sekunden still, so stoppt der Motor.

Wäre da vielleicht eine hardwaretechnische Änderung sinnvoll, zum überbrücken des Beschleunigunssensors?

 

Hi Sonni,

 

das ist kein Bug sondern ein Feature !!! (siehe Beschreiben)

 

Du hast leider unfreiwillig bewiesen, dass es gute und schlechte Nunchuk Nachbauten gibt. Du hast den schlechten erwischt. Mein Nunchuk ist so empfindlich, dass ich ihn ruhig in der Hand halten kann und er dabei immer Beschleunigungswerte liefert.

 

Bitte sende mit mal die Ausgabe des Debugprogramms von gestern, wenn du den Controller ruhig hältst. Dann passe ich ggf. das Programm nochmal an.

 

Aber keine Panik, du kannst im Sourcecode das Timeout festlegen.

 

 

 

Hier auch mal eine interessante Sache

Gruß Sonni

 

30mA saugen das kleine Akku im Nunchuk nach wenigen Stunden leer. Leuchtet dann schon, aber dann wars dann....

Geschrieben (bearbeitet)

Hier mal ein kurzes video.

 

Externe Links nur für Mitglieder sichtbar

 

Ist das bei dir auch so, dass wenn du 3 Sekunden relativ still hälst, dass die Achsenwerte dann stagnieren? Ich habe heute nochmal eine Probefahrt gemacht, wobei der controller öfters mal das Pairing gelostet hat^^.

Ich denke mal das wird dann wohl an dem Logic 3 controller liegen wenn es bei dir anders ist.

 

int PairingLostTrigger = 1000;

int PairingSuccessTrigger = 1;

 

dieser Wert in deiner .ino funktionierte ganz gut.

 

Nur bei der Rückwärtsfahrt verweigert der Motor dann seinen dienst , muss ich mal schauen woarann dass wieder liegt ..

Ist wohl eine reine Reglersache mit Servo ist alles super.

bearbeitet von sonni
Geschrieben

Hi Sonni,

 

nö, bei mir ist der Controller etwas empfindlicher. Ich habe überlegt, ob ich alle drei Achsen für die Lebenderkennung benutzen soll. So wie es aussieht, werde ich das wohl machen müssen. Dann sollte das besser funktionieren.

 

Das Pairing habe ich noch nie verloren. Meinst du die LED vom Empfänger, oder die Pairing Debug Meldung?

Geschrieben (bearbeitet)

Aus irgend einem Grund verhält sich der Xerunregler auch anders als ein Servo. Fällt der Beschleunigungswert, also wenn der Knüppel nach hinten gezogen wird, unter 20 also quasi fast vollgas Rückwärts, so bleibt der Motor stehen.

Das macht sich schlecht wenn man volle kraft bremsen will, denn dann passiert nichts :D

Vielleicht kann man den output zum Regler auf : •Wert 21-245 ändern?

 

Die Proportionalität gibt es beim gasgeben beim Regler auch nicht ,anders als beim Servo.

Beim Regler muss man fast Vollgas geben damit sich etwas tut (Wert: 227 bei Dämpfung 99)

Beim Dämpfungswert 10 tut sich schon Was wenn der Wert der y Achse 130 ist.

 

Das kommt ganz gut rüber wenn du im debugprogramm den wert hinzufügst

 

Serial.print( StellWertMotor, DEC);

Der verändert sich umso später umso höher der Dämpfungswert ist.

bearbeitet von sonni
Geschrieben

Hi Sonni,

 

hier muss ich zu meinem Verständnis es neu formulieren:

 

1. Die Neutralstellung liegt nicht bei 127 sondern bei 20?

2. Rückwärts kann der Regler? oder meinst du der Bremsbereich liegt bei 0-20?

Geschrieben

ja also bezogen auf die y-achse und die werte die mir dein debugprog rausschmeisst.

 

0=max rückwärts ( in real sind ist es der Wert auf dem Controller 3)

127= neutral

245= max vorwärts ( in real 244)

 

 

ich habe den Modus Vorwärts + Bremse und Rückwärts.

 

Wenn ich Bremse oder Rückwärts fahren will dann tut er das auch. Komm ich dabei aber unter den Wert 20, so macht der Regler bzw der Motor nichts mehr.

Geschrieben

Wenn ich Bremse oder Rückwärts fahren will dann tut er das auch. Komm ich dabei aber unter den Wert 20, so macht der Regler bzw der Motor nichts mehr.

 

Der Rückwärtsgang und unter 20 will nicht müssen wir uns näher ansehen.

Du Findest unter der Arduino Beispielsammlung -> Servo -> Sweep.

Bock dein Board auf und verlänger die Sweep time auf ca. 20 Sekunden. Lasse dir die Werte auf der seriellen Schnittstelle ausgeben.

 

Mit den Wert unter 20 kann zwei Gründe haben:

1. Max und Min wurden falsch durch den Xrun angelernt.

Ist Chrizz auch passiert und er hat sich gewundert, warum sein Motor nie Vollpower lief!

2. Du kannst in der Servo-Parametrierung Minimale und Maximale Puls Pausen-Verhältnisse angeben. Es kann sein, dass dein Xrun die Defaultwerte nicht verarbeiten kann.

Externe Links nur für Mitglieder sichtbar

Geschrieben

Fällt mir erst jetzt auf:

 

Für was brauchst du einen Rückwärtsgang? Willst du mit den Board einparken :confused5:

 

Löscht den Modus und nimmt die Einstellung:

1. Running Mode: Vorwärts mit Bremse

Geschrieben

Falls einem das Board mal abhaut und es schnell da weg muss wo es hingerollt ist ^^.

 

Nagut da ist da auch das Problem mit der bremse die sich beim unterschreiten von Wert 20 löst .

 

Einparken klingt aber auch gut :)

Geschrieben

Nagut da ist da auch das Problem mit der bremse die sich beim unterschreiten von Wert 20 löst .

 

Schwitz, dann gehe ich davon aus, dass jetzt alles klappt?

Ist die Beschleunigung jetzt linearer?

Hast du die Min, Max und Mittelposition für den Xerun neu angelernt?

 

0=max rückwärts ( in real sind ist es der Wert auf dem Controller 3)

127= neutral

245= max vorwärts ( in real 244)

 

Das der Nunchuk nicht die 0 oder 255 erreicht ist kein Problem. Darum arbeite ich ja mit der Integrationsroutine. Die erreicht immer die Extrema. Unabhängig vom Nunchuk.

 

Der Totpunkt für den Controller ist dafür da, damit im Falle einer schlechten Neutralstellung des Nunchuk (also nicht der Wert 127) keine Aufsummierung (Integration) stattfindet.

Geschrieben

int PairingLostTrigger = 1000;

 

-> Hatte wir schon zum Anfang diskutiert. Auf eigener Gefahr. Fällt dir der Nunchuk aus der Hand, wird dies erst nach vielen Minuten erkannt. Dein Board wird in der Zwischenzeit zum unkontrollierten Geschoss.

 

int PairingSuccessTrigger = 1;

 

-> Das ist eine ganz schlechte Idee. Du gaukelst den Arduino eine Pairing vor. D.h. Ohne das der Empfänger und Nunchuk miteinander Reden, behauptest du die Verbindung wäre da. Dadurch das du den Lost Trigger auf 1000 gestellt hast, kann es Passieren, dass dein Board für viele Minuten die Flucht ergreift.

Das würde ich an deiner Stelle wieder auf 0 stellen. :devil:

Geschrieben

Okay gut mit

 

 

int PairingLostTrigger = 1000;
int PairingSuccessTrigger = 1;

 

dachte ich die Lösung für die Unterbrechungen gefunden zu haben, nunja ich habe dann auch gemerkt dass die Räder nach ausschalten des Nunchucks weiterdrehten. Schlechte Idee.

 

Wie kann ich denn die Empfindlichkeit der Lebenderkennung im Sourcecode erhöhen?

 

Weißt du noch wo du deinen Nunchuck gekauft hast?

Dann kaufe ich mir den.

 

 

 

 

Zitat von sonni

Nagut da ist da auch das Problem mit der bremse die sich beim unterschreiten von Wert 20 löst .

 

 

Schwitz, dann gehe ich davon aus, dass jetzt alles klappt?

Ist die Beschleunigung jetzt linearer?

Hast du die Min, Max und Mittelposition für den Xerun neu angelernt?

 

Ich habe ihn immer wieder neu angelernt, mit dem immer selben Ergebnis.

Unterschreitet die y Achse den wert 20 so lässt der Regler den Motor los, wenn ich bremse.

Kann ich die Integrationsrutine so einstellen dass der niedrigste wert 21 ist? mein Regler scheint ein kürzeres Signal nicht zu erfassen.

Linear ist es wie gesagt auch nicht. Ist es denn bei dir linear ab der kleinsten Hebelbewegung an?

 

Gruß Sonni

Tritt dem Gespräch bei

Du kannst jetzt posten und dich später registrieren. Wenn du bereits einen Account hast kannst du dich hier anmelden.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...