Skateboard Neigungsmessung

Hallo,
ich habe einen Beschleunigungssensor, welchen ich unter mein Skateboard montieren möchte, um damit in kurven LEDs zu steuern.
Die Elektronik wird auf der Unterseite des Boards mit einem Klettverschluss befestigt.

Mein Problem ist nun, dass ich nicht wirklich einen Anhaltspunkt habe, wie ich die Kalibrierung nach dem einschalten vornehmen soll, da ich eben einen Wert für die Ruhelage brauche, von dem aus ich die Neigung nach links und rechts bestimmen kann.

Ich habe es mir so vorgestellt, dass der Code für fünf oder zehn Sekunden einen stabilen wert mit einer Toleranz von zwei bis drei misst und dann einen dieser Werte quasi als Nullpunkt nimmt.
Wenn allerdings zu starke Änderungen des wertes während der Kalibrierung vorkommen, sollte die Zeit zurückgesetzt werden.

Gibt es sowas in der Art schon als Tutorial, da ich selber nicht wirklich was gefunden habe und die meisten Tutorials bezüglich Kalibrierung auf das Beispiel vom Starterkit führen und ich selber nicht wirklich weiß, wie man den Prozess nennt, wodurch ich nicht auf passende englische Schlagwörter für die Suche komme.

Freue mich auf eure Hilfe/Ratschläge
Katofl

Welchen Sensor hast du verbaut?
Genau bitte mal...

Es ist ein MMA7361, ich glätte aber die Werte im Code (http://arduino.cc/en/Tutorial/Smoothing), damit Erschütterungen beim Fahren nicht so arg Wahrgenommen werden.

Du mußt dir zuerst darüber klar werden wie der Ablauf beim Einschalten und hinstellen des Boards ablaufen soll. erstmal ganz ohne Software.
Z.B.:

  • Board hochnehmen, Elektronik montieren.
  • Elektronik einschalten.
  • Board hinstellen.
  • Sensor kalibriert sich.
  • Piep oder LED-Blitzen zum Zeichen dass Kalibrierung abgeschlossen.

oder, kürzer:

  • Board abstellen.
  • Elektronik einschalten.
  • Sensor kalibriert sich.
  • Piep oder LED-Blitzen zum Zeichen dass Kalibrierung abgeschlossen.

Erst wenn du das für dich geklärt hast, dann kannst du anfangen das in SW umzusetzen.

Zum Abgleich selber:
Wenn du den Punkt, an dem deine Abgleich beginnen soll festgelegt hast, dann fängst du an, in festgelegten Abständen zu messen. (z.B. 1 sek). Dann prüfst du immer die letzten 5(?) Messwerte darauf, ob sie gleich sind. (innerhalb eines Fensters liegen)
Wenn sie gleich sind, dann ist der Wert gültig, wird gespeichert und das "Fertig" Signal ausgegeben.

Das bringt mich schon ein wenig mehr auf den grünen Zweig. Ich schau mal, ob ich was in der Richtung zusammenschreiben kann.
Vielen Dank für deinen Ratschlag :slight_smile:

katofl:
ich habe einen Beschleunigungssensor, welchen ich unter mein Skateboard montieren möchte, um damit in kurven LEDs zu steuern.
Die Elektronik wird auf der Unterseite des Boards mit einem Klettverschluss befestigt.

Mein Problem ist nun, dass ich nicht wirklich einen Anhaltspunkt habe, wie ich die Kalibrierung nach dem einschalten vornehmen soll, da ich eben einen Wert für die Ruhelage brauche, von dem aus ich die Neigung nach links und rechts bestimmen kann.

Fährst Du Skateboard nur in der flachen Ebene?

Du fährst nicht auf geneigten, schiefen Ebenen?
Du fährst nicht in einer Halfpipe?
Du hast ständigen Bodenkontakt und machst keine Sprünge?

Normalerweise hast Du den falschen Sensor gewählt, wenn Du gefahrene Kurven erkennen möchtest.
Du benötigst eigentlich einen Gyroskopsensor, um gefahrene Kurven zu erkennen.
Suche bei eBay mal nach MPU-6050, das ist ein kombinierter 6-Achsen Beschleunigungs- und Gyroskopsensor, den es bei chinesichen Versendern sehr preiswert gibt. Für Dein Vorhaben "Kurvenerkennung" würdest Du den Gyroskopwert beim Drehen um die Hochachse (Z-Achse) benötigen.

Dann würden Drehungen des Boards um die Hochachse nicht nur beim Fahren in der Ebene korrekt nach Linkskurve und Rechtskurve unterschieden werden, sondern auch beim Fahren auf schiefen Ebenen, beim Fahren in der Halfpipe, und Drehungen mit dem Board in der Luft (bei Sprügen) würden genau so nach Links- und Rechtsdrehung erkannt werden.

Dreht sich das Deck nicht um die Hochachse, ist der Gyro-Z Wert bei nahe null. Dreht sich das Deck um die Hochachse nach rechts, sind die Werte größer null, dreht es sich um die Hochachse nach links sind sie kleiner Null. Der Gyro-Wert reagiert auf die dynamische Drehung.

jurs:

katofl:
ich habe einen Beschleunigungssensor, welchen ich unter mein Skateboard montieren möchte, um damit in kurven LEDs zu steuern.
Die Elektronik wird auf der Unterseite des Boards mit einem Klettverschluss befestigt.

Mein Problem ist nun, dass ich nicht wirklich einen Anhaltspunkt habe, wie ich die Kalibrierung nach dem einschalten vornehmen soll, da ich eben einen Wert für die Ruhelage brauche, von dem aus ich die Neigung nach links und rechts bestimmen kann.

Fährst Du Skateboard nur in der flachen Ebene?

Du fährst nicht auf geneigten, schiefen Ebenen?
Du fährst nicht in einer Halfpipe?
Du hast ständigen Bodenkontakt und machst keine Sprünge?

Tatsächlich Fahre ich mit einem Longboard und damit meistens irgendwelche Hügel/Abhänge runter, also nichts mit Halfpipe oder Sprüngen. Ich habe ständigen Bodenkontakt.

Normalerweise hast Du den falschen Sensor gewählt, wenn Du gefahrene Kurven erkennen möchtest.
Du benötigst eigentlich einen Gyroskopsensor, um gefahrene Kurven zu erkennen.
Suche bei eBay mal nach MPU-6050, das ist ein kombinierter 6-Achsen Beschleunigungs- und Gyroskopsensor, den es bei chinesichen Versendern sehr preiswert gibt. Für Dein Vorhaben "Kurvenerkennung" würdest Du den Gyroskopwert beim Drehen um die Hochachse (Z-Achse) benötigen

Ich möchte nicht die Kurven messen, sondern die Neigung des Brettes. Schließlich lenkt man auf einem Skateboard/Longboard durch Gewichtsverlagerung, dadurch neigt sich das Board der Längsachse entlang und die Achsen lenken.

Ziel ist es ja, dass dadurch auf der linken oder rechten Seite des Boards LED Streifen angesteuert werden, wenn ein bestimmter Schwellenwert erreicht wird.
Und bis jetzt denke ich, dass der Beschleunigungssensor dafür ausreicht.

Und bis jetzt denke ich, dass der Beschleunigungssensor dafür ausreicht.

Ich bin nun wirklich kein Skateboard-Experte, aber:
Wenn dein Board seitlich geneigt ist und du gleichzeitig eine Kurve fährst, sollte die resultierende Beschleunigung wieder einigermassen nach "unten" relativ zum Brett sein (nur mit ein bisschen mehr als 1g).

"Jurs" MPU 6050 hat neben dem BeschleunigungsSensor auch eine Gyro-Komponente, die da evtl. sinnvollere Signale liefert.

"Kalibrieren nach dem Einschalten" ist wohl weniger das Problem, wenn der Sensor einigermassen starr mit dem Brett verbunden ist.
Wenn denn wildes Flackern bis das Brett auf dem Boden ist, nicht dein Problem ist...
Sonst würde ich eher eine Verzögerung von wenigen sec, nachdem Rückenlage (Räder nach oben) erkannt war, einbauen.

michael_x:
“Jurs” MPU 6050 hat neben dem BeschleunigungsSensor auch eine Gyro-Komponente, die da evtl. sinnvollere Signale liefert.

Sein Problem dürfte hauptsächlich sein, dass er mit seinem Beschleunigungssensor zwar im Stand ein supertolles Signal über das gekippte Board bekommt, aber nicht, wenn er in Bewegung ist.

Im Stand: Board kippt nach links, Schwerpunktvektor verändert sich, wird gemessen ==> Signal links
Und das Signal bleibt so lange auf links, wie das Board nach links geneigt ist.

In dynamischer Fahrt sieht es anders aus. Da passiert das nur sehr kurzfristig, weil nach dem Kippen des Boards im weiteren Verlauf eine Kurvenfahrt eingeleitet wird.

In der Fahrt: Board kippt nach links, Schwerpunktvektor verändert sich, wird gemessen ==> Signal links
Den Bruchteil einer Sekunde später: Das Board fährt eine Linkskurve. Bei dem nach links geneigten Board entsteht eine Fliehkraftkomponente nach rechts. Und bei einer idealen Ausbalancierung ist die entstehende Fliehkraftkomponente nach rechts exakt genau so groß wie die Schwerkraftkomponente nach links, die durch die Linksneigung des Boards entsteht.

Genau deshalb fällt der Fahrer beim Kurvenfahren nicht vom Board: Durch die Linksneigung würde er eigentlich links vom Board herunterfallen. Durch die Fliehkräfte in einer Linkskurve würde er eigentlich rechts vom Board herunterfallen. Durch die Ausbalancierung ist es allerdings so, dass sich die Kräfte nach links und die Kräfte nach rechts aufheben, zwischen Fahrer und Board herrscht auch bei Kurvenfahrt nur eine senkrechte Kraft auf das Board.

D.h. im Idealfall “Stillstand” wird bei gerade ausgerichtetem Board nur eine Z-Komponente gemessen.
Und im Idealfall “Fahren einer Kurve mit idealer Ausbalancierung” wird bei schräg stehendem Board ebenfalls nur eine Z-Komponente gemessen.

Nur während eines ganz kurzen Zeitraums beim Einleiten der Kurve, wenn das Board geneigt wird, aber die Kurvenfahrt noch nicht begonnen hat und noch nicht ausbalanciert ist, liefert der g-Sensor ein brauchbares Signal über die nachfolgend gefahrene Kurve.

In ausbalancierter Kurvenfahrt wirkt nur eine Z-Kraft und ein g-Sensor kann ausschließlich an der plötzlich etwas höheren Schwerkraft feststellen, dass er sich in einer Kurvenfahrt befindet, aber die Richtung der Kurve kann damit nicht mehr bestimmt werden.

Auweia, das mit der Fliehkraft habe ich schon befürchtet.
Also heißt das, dass ich doch mit den Ausgabewerten eines Gyroskops, wie zum Beispiel den von dir vorgeschlagenen MPU-6050, besser bedient wäre, auch während der Fahrt?

Übrigens: Vielen vielen Dank für eure Ratschläge und Tips, ich bin in der Richtung relativ unerfahren was diese Art von Sensoren angeht. Den Code zur Kalibrierung habe ich allerdings doch noch selber zusammenschustern können.

katofl:
Auweia, das mit der Fliehkraft habe ich schon befürchtet.
Also heißt das, dass ich doch mit den Ausgabewerten eines Gyroskops, wie zum Beispiel den von dir vorgeschlagenen MPU-6050, besser bedient wäre, auch während der Fahrt?

Nein, NUR während der Fahrt bist Du mit Gyros besser bedient.

Im Stand kannst und musst Du die Neigung des Decks mit den Beschleunigungssensoren messen, wenn Du auch im Stand Lichteffekte schalten möchtest. Genau so im Augenblick des Umsteuerns: Im Übergang von einer Rechtskurve zu einer Linkskurve gibt es einen Wimpernschlag lang den Moment, wo das Board weder rechtsherum noch linksherum dreht. Aber im Moment des Umsteuern dürfte Höchstwahrscheinlich das Board bereits in die entgegengesetzte Richtung geneigt sein, zur Einleitung einer entgegengesetzten Kurve.

Mal kurz die Gyrodaten eines MPU-6050 nachgeschlagen auf http://www.invensense.com/mems/gyro/mpu6050.html
Im empfindlichsten Gyrobereich gibt es einen Messwert von 131 LSB pro °/s.

1°/s entspricht einem Vollkreis von 360° in 360 Sekunden, also 6 Minuten, was schon einem recht langsam gefahrenen Kreis entspricht.

Wenn Du diese Geschwindigkeit als Grenzwert zwischen Stillstand und Bewegung festlegst, dann würdest Du also als Programmlogik für Lichteffekte im Stand und in Bewegung zuerst prüfen, ob die Grenze beim Drehen überschritten wird, und wenn ja, entsprechende Kurveneffekte schalten:

Ich würde es anfänglich mal mit diesem mit einer solchen Logik und einem MPU-6050 probieren (Pseudocode):

  if (gyroZ>131) LichteffektRechtskurve();
  else if (gyroZ<-131) LichteffektLinkskurve();
  else if (rollWinkel>5) LichteffektRechtsImStand();
  else if(rollWinkel<-5)LichteffektLinksImStand();
  else LichteffekteAus();

Der aus den Beschleunigungssensoren ermittelte Rollwinkel würde dann nur ausgewertet werden, wenn die Kurvengeschwindigkeit zu gering ist, z.B. im Augenblick des Umsteuerns von Rechtskurve auf Linkskurve (und umgekehrt). Und auch im Stand.

Ich habe mir nun den MPU 6050 bestellt und werde dann mal, sobald er da ist, gucken, ob ich was damit anfangen kann.

Eine andere Methode, die mir heute allerdings eingefallen ist, um die Neigung vom Brett festzustellen wäre doch durch messen des Abstandes zum Boden mit einem Ultraschallsensor.
Der Sensor könnte so weit wie möglich von der längsachse entfernt am Rand des Brettes befestigt werden und durch höheren oder niedrigeren Abstand zum Asphalt wird die Neigung festgestellt.
Wobei wieder sich für mich die Frage stellt: Würde bei höheren Geschwindigkeiten (25km/h - 35km/h) der Sensor noch Funktionieren oder würde ich da einfach dem Echo davonfahren?

Ultrtaschall wird da kaum klappen. Die sind einfach zu langsam- viel mehr als 10 Messungen die Sekunde bekommst du effektiv nicht hin.
Dazu erschütterungsempfindlich-ich würd da Infrarot nehmen.

katofl:
Eine andere Methode, die mir heute allerdings eingefallen ist, um die Neigung vom Brett festzustellen wäre doch durch messen des Abstandes zum Boden mit einem Ultraschallsensor.
Der Sensor könnte so weit wie möglich von der längsachse entfernt am Rand des Brettes befestigt werden und durch höheren oder niedrigeren Abstand zum Asphalt wird die Neigung festgestellt.

Wenn ich mich nicht täusche, erzeugen Skateboardrollen eine Geräuschkulisse, mit der Du schwerhörige Omas belästigen kannst. Auf 50 Meter Entfernung.

Die Geräuschkulisse im Ultraschallbereich dürfte sich kaum von der Geräuschkulisse im hörbaren Schallbereich unterscheiden. Meiner Meinung nach würde ein Ultraschallsensor während der Fahrt versagen. Und zwar nicht, weil Du dem Echo davonfährst, sondern weil das Echo-Mikrofon vor lauter Störschall das Ping nicht mehr wahrnehmen kann.

Ich beschäftige mich gerade mit Rabenauges Vorschlag und suche nach einem passenden IR Sensor, wobei ich nur den GP2Y0A41SK0F von Sharp finde, welcher auch nur schwer erhältlich ist (Wartezeit bei C bis ende Juni oder importieren lassen).
Und andere IR Sensoren mit ähnlicher Reichweite (4cm bis 30cm) finde ich nicht wirklich.

Ich warte jetzt erst mal ab, bis ich den MPU-6050 habe und werde dann mal schauen, ob ich das vielleicht nicht mit dem schon ordentlich hinbekomme.

hi,

geht Ihr da nicht zu kompliziert ran?

am einfachsten und auch am exaktesten wäre es doch, den winkel zwischen board und achse zu messen, zb mit einem poti.

gruß stefan

Und noch einfacher ein Röhrchen mit einer Kugel drin und dann an beiden Enden auswerten, ob Kugel anliegt :wink:

Wenn ihr hier schon mal den MPU-6050 erwähnt dann kann mit dem Kalmanfilter den absoluten Neigungswinkel von X und Y und die Winkeländerung Z ausrechnen.
Hier sind die passendes Sketche dazu. Rabenauge kann auch Erfahrungen teilen, Dieser Filter schaft es unabhängig vom Startwert ohne kalibrieung auf den Richtigen Winkel zu kommen.

Damit wirst du verschleißfrei (Poti) deinen Winkel deines Boardes bekommen.
Der Kalman Filter nutzt die Gyros und Accerelometer zur Winkelbestimmung.

Nochmal ne Richtigstellung

Mal kurz die Gyrodaten eines MPU-6050 nachgeschlagen auf http://www.invensense.com/mems/gyro/mpu6050.html
Im empfindlichsten Gyrobereich gibt es einen Messwert von 131 LSB pro °/s.

1°/s entspricht einem Vollkreis von 360° in 360 Sekunden, also 6 Minuten, was schon einem recht langsam gefahrenen Kreis entspricht.

Dies ist die Empfindlichkeit und nicht die Auflösung.

Digital
output X, Y-, and Z-Axis angular rate sensors (gyroscopes) with a user programmable full-scale range of ±250, ±500,
±1000, and ±2000°/sec

Seite 10 der orignal Spec des MPU. Wenn er wircklich 6min/für 360° braucht wäre mein Copter schon längst ganz weit unter Null.

Gruß
DerDani

Hm, könnte funktionieren.
Tatsache ist: der Kalmanfilter benötigt keine Kalibrierung- er ermittelt allein, wo "unten" ist.
Wenn man die Längsachse des Boards nutzt, müsst es eigentlich klappen, da es ja in Kurven um diese Achse gekippt wird.
Dann hat man sogar ein "analoges" Signal.

Allerdings wäre es denkbar, dass beim fahren in Kurven, durch die Fliehkraft, der Wert nicht mehr stimmt, da dann die Beschleunigung eher wieder nach "unten" (aus Sicht des Boards) wirkt. Aber dazu kann man wahrscheinlich den Gyro ja zusätzlich alleine auslesen.
Viel Aufwand ist das nicht-ich würds so einfach mal ausprobieren.
Das von enthaltene Beispielprogramm gibt die Werte ja auf verschiedene Weise aus: geKomplementärfiltert, roh, und auch geKalmanfiltert. Einfach mal aufspielen und während ner kleinen Testfahrt mitloggen lassen (nen Display ablesen ist während der Fahrt wohl nicht zu empfehlen)..

Habe heute den MPU-6050 bekommen und habe den Filter nach ein wenigen Startproblemen zum laufen gebracht.
Sobald schöneres Wetter hier ist und die Straßen trocken sind, probiere ich das mal während der Fahrt auf dem Board aus.

Eine Alternative Idee wäre doch auch, einen zweiten Beschleunigungssensor an die Achse zu montieren. Die wird schließlich nicht geneigt wie das Brett. So könnte ich zum Beispiel im Stillstand die Neigung des Brettes und während der Fahrt die Fliehkraft auf den Achsen messen, oder?