PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SparkFun MMA8452Q



Moppi
09.05.2019, 13:41
Hallo,

ich trete auf der Stelle:

Ich habe bei Conrad vor längerer Zeit einen Neigungssensor/Lagesensor gekauft. Bezeichnung s. Titel.

Nun ist das ein Accelerometer. Hier das erste Fragezeichen :?:

Ein Accelerometer ist ein Beschleunigungssensor. Zweites Fragezeichen :?:

Ein Neigungssensor ist ein Accelerometer, ist ein Beschleunigungssensor. :confused:

Ich habe lange Zeit dazu geschwiegen.
Habe mich jetzt damit beschäftigt.

Mit dem Teil kann man die Lage bestimmen. Dreh ich es auf den Kopf, bekomme ich negativen Wert von -1. Dreh ich es richtig, bekomme ich einen Wert von +1. Das geht sowohl in der Horizontalen, als auch in der Vertikalen.
Dabei sind auch Beispielsketche, aber so weit ich gesehen habe, kein einziger, der eine Geschwindigkeit ausgeben würde oder einen G-Kraft-Wert.
Wo ist da die Beschleunigung? Wieder Fragezeichen :?:

Einstellen lässt sich das Teil aber in g-Bereichen.

Vielleicht kann jemand erklären, was man damit genau tun kann. Außer Werte auslesen, die etwas zur Lage des Sensors aussagen.
Gibt es da für diese Teile auch externe Störquellen?

Das Teil hat wohl 2 Interruptausgänge (?) Weiß aber nicht, wie man das nutzen kann, sprich programmieren.

Hier das Teil, dass ich habe: https://botland.com.pl/en/accelerometers-and-przyspieszeniomierze/13017-velleman-vma208-3-axis-mma8452q-i2c-digital-accelerometer-with-connectors-5410329683450.html


MfG

Searcher
09.05.2019, 15:39
Hallo Moppi,

vielleicht hilft Dir das Datenblatt von NXP weiter:
https://www.nxp.com/docs/en/data-sheet/MMA8452Q.pdf

Gruß
Searcher

HaWe
09.05.2019, 17:03
Mit dem Teil kann man die Lage bestimmen. Dreh ich es auf den Kopf, bekomme ich negativen Wert von -1. Dreh ich es richtig, bekomme ich einen Wert von +1. Das geht sowohl in der Horizontalen, als auch in der Vertikalen.
Dabei sind auch Beispielsketche, aber so weit ich gesehen habe, kein einziger, der eine Geschwindigkeit ausgeben würde oder einen G-Kraft-Wert.
Wo ist da die Beschleunigung? Wieder Fragezeichen

3D Accelerometer (Beschleunigungsmesser) messen (auch) immer die Erdbeschleunigung mit.
In Standardausrichtung misst in Ruhe also die Achse nach oben/unten (oft als z bezeichnet) die volle Erdbeschleunigung (+1 G),
während die anderen beiden Achsen (dann x und y) horizontal liegen und daher in Ruhe keine Beschleunigung erfahren.

Drehst du ihn 90° auf die Seite, erfährt nun die y-Achse die volle Erdbeschleunigung, während x und z horizontal liegen und keine Beschleunigung erfahren.
Drehst du ihn stattdessen 90° nach vorn, erfährt die x-Achse die volle Erdbeschleunigung, während y und z horizontal liegen und keine Beschleunigung erfahren.

Drehst du ihn 180°, erfährt wieder die z-Achse die volle Erdbeschleunigung, aber "verkehrt herum", daher nun -1 G.

Bewegst du ihn aber zügig hin und her oder rauf und runter, erhalten die Achsen zusätzliche Beschleunigeung durch deine beschleunigte Bewegung.



Du misst aber Beschleunigung, keine Geschwindigkeit.
Beschleunigung ist immer (nur) die ÄNDERUNG einer Geschwindigkeit, also während sie gebremst oder beschleunigt oder die Bewegungsrichtung geändert wird.
eine gleichmäßige, geradlinige Geschwindigkeit (also z.B. konstant mit 100km/h geradeaus) bedeutet daher immer :
du hast keine anderen Messergebnisse als in Ruhe.




https://i.ytimg.com/vi/4xwgxZ_eNFY/maxresdefault.jpg

Moppi
09.05.2019, 17:18
Danke für die Erläuterung!

Das Datenblatt habe ich gesichtet und gespeichert. Register sind beschrieben, müsste ich mit klar kommen.


Ich habe da was von "E-compass applications" gelesen. Also müsste man damit praktisch auch die Richtung bestimmen können(?)


MfG

HaWe
09.05.2019, 19:21
Danke für die Erläuterung!

Das Datenblatt habe ich gesichtet und gespeichert. Register sind beschrieben, müsste ich mit klar kommen.
Ich habe da was von "E-compass applications" gelesen. Also müsste man damit praktisch auch die Richtung bestimmen können(?)
MfG

Von Kompass sehe ich hier bisher nichts.
Wie lautet das Zitat vollständig?

Mit Accelerometern kann man keine (relative oder absolute) Richtung bestimmen, sondern nur mit Gyroskopen (Rotationssensoren) oder Magnetometern (Kompass-Sensoren), meist sind sie miteinander kombiniert (sog. IMU = inertial measurement unit).

Der MPU6050 (Acc.+Gyro), MPU9050 (Acc.+Gyro+Kompass) oder CMPS11/12 (Acc.+Gyro+Kompass) wären hier gute Beispiele.

Moppi
09.05.2019, 20:50
Datenblatt erste Seite


Typical applications
• E-compass applications
• Static orientation detection (portrait/landscape, up/down, left/right, back/front
position identification)
• Notebook, e-reader, and laptop tumble and freefall detection
• Real-time orientation detection (virtual reality and gaming 3D user position feedback)
• Real-time activity analysis (pedometer step counting, freefall drop detection for HDD, dead-reckoning GPS backup)
• Motion detection for portable product power saving (auto-sleep and auto-wake for cell phone, PDA, GPS, gaming)
• Shock and vibration monitoring (mechatronic compensation, shipping and warranty usage logging)
• User interface (menu scrolling by orientation change, pulse detection for button replacement)

HaWe
09.05.2019, 21:03
E-compass applications

höchstens zu verstehen in Verbindung mit anderen externen Sensoren, ich sehe keinen eingebauten Gyro oder Kompass (CMIIW)

Moppi
10.05.2019, 08:26
Ja, sieht danach aus.


MfG

Moppi
21.05.2019, 09:03
Ich habe jetzt das Accelerometer so weit im Programm eingebunden.

Bevor ich jetzt wieder selber das Rad erfinde, folgende Frage:

Hat schon jemand einen Algorithmus gesichtet, der die Werte eines Lagesensors auf 6 Beine, bei einem Hexapod - als Offset - berechnet? Oder was ähnliches?

Ich habe die Werte so weit verarbeitet, dass ich in jeder Achse 0 bis +/-15 erhalte.
Also 0 wäre waagerecht, -15 (max). zu der einen Seite, +15 (max.) zu der andern Seite gekippt.
Jetzt muss ich, je nachdem wie der Sensor aus der Waagerechten gekippt wird, verschiedene Werte berechnen, die sich zu den einzelnen Beinen addieren lassen, so dass der Hexapod-Körper die Waagerechte in X und Y wieder einnimmt.




MfG

HaWe
21.05.2019, 09:17
"so etwas ähnliches": ja.
Allerdings für den mpu6050, der aber für die Lage-Berechnung ebenfalls seine Accelerometer benutzt.
Da sie als raw-Werte sehr verrauscht sind, wird ein Kalmanfilter verwendet:
https://github.com/TKJElectronics/KalmanFilter
https://github.com/TKJElectronics/KalmanFilter/blob/master/examples/MPU6050/MPU6050.ino

(Anm.: Da dein Sensor sehr "ungewöhnlich" ist, er keine Gyros zur Stabilisierung per Sensorfusion hat und ich keine Arduino-Libs dafür kenne, würde ich dir empfehlen, ebenfalls auf den mpu6050 zu wechseln, er ist sehr preiswert erhältlich.)

Moppi
21.05.2019, 09:22
Neee, ich bleib dabei. Der Sensor ist nicht schlecht. Funktioniert ja auch. Wozu jetzt einen andern nehmen? Ich habe ein Vermögen dafür ausgegeben (Conrad eben).


:)


Danke, trotzdem für die Quellen!

Ist mir aber zu kompliziert. Es muss einfacher funktionieren.


Der Sensor wäre vom Prinzip auch egal, ich würde dieselben Wertebereiche für weitere Berechnungen verwenden.




MfG

HaWe
21.05.2019, 09:28
Neee, ich bleib dabei. Der Sensor ist nicht schlecht. Funktioniert ja auch. Wozu jetzt einen andern nehmen? Ich habe ein Vermögen dafür ausgegeben (Conrad eben).
:)
Danke, trotzdem für die Quellen!
Ist mir aber zu kompliziert. Es muss einfacher funktionieren.
MfG

die wesentliche Funktion ist doch gar nicht kompliziert, siehe ino code:

double roll = atan(accY / sqrt(accX * accX + accZ * accZ)) * RAD_TO_DEG;
double pitch = atan2(-accX, accZ) * RAD_TO_DEG;

du brauchst nur echte absolute acc Werte als Bruchteile der Erdbeschleunigung.

Moppi
21.05.2019, 11:07
roll und pitch hört sich für mich nach Flugzeug an :)

Wozu ich da einen Arkustangens brauche, weiß ich noch nicht. Ist doch: atan() ??


Ich habe mal eine Skizze angefertigt und mir ein paar Gedanken dazu gemacht.

Ich denke, es gibt dafür eine einfache Lösung:
Wenn eine Seite 1cm angehoben ist, muss auf der gegenüberliegenden Seite 1cm dazu addiert werden.

Erhalte ich auf einer Seite positive Werte, muss ich die gegenüberliegend auf die beiden Beine auf den Ecken addieren (oder subtrahieren, je nach dem), mit einem Wert, der dann die Differenz ausgleicht und auf dem Gemessenen basiert. Das müsste für X- und Y-Achse gemacht werden.
Ein Grund, warum das nicht funktionieren würde, ist mir nicht eingefallen.

Die Position in der Z-Achse der verbleibenden 2 Beine müssten aus den dann nebenliegenden Beinen errechnet werden (eines links und eines rechts).

Für die weitere Betrachtung kommen sicher noch andere Aspekte hinzu. So könnte auch eine Seite 2 Beine abgesenkt und die gegenüberliegende Seite 2 Beine angehoben werden.
Da wird es situationsbedingt verschiedene Ansätze geben, bzw. Korrekturen, die angewendet werden müssen, wenn bestimmte Fälle eintreten.


Es könnte berechnet werden, welcher Winkel benötigt wird, um den Körper einer Seite eine bestimmte Strecke anzuheben (weil die Beinglieder ja einer Kreisbahn folgen).
Aber es kann eigentlich auch ein Regelkreis verwendet werden, um den Körper schrittweise anzuheben bis die Waagerechte wieder hergestellt ist. Würde ich so meinen.
Nur das Verhältnis zwischen den Beinen, die angehoben oder abgesenkt werden, müsste dann ermittelt werden. Das müsste sich aus den X- und Y-Werten ergeben.

Letzteres würde mir sogar noch besser gefallen. Wenn nicht zu langsam.




MfG

HaWe
21.05.2019, 11:14
roll und pitch hört sich für mich nach Flugzeug an :)
MfG
selbstverständlich, genau dort werden ja solche Lagefunktionen benötigt, sie können auf Drohnen oder ATVs im schweren Gelände übertragen werden - und genau so macht man das! 8)

Moppi
21.05.2019, 11:32
Ich habe in der Formel noch was entdeckt. Das ist der Z-Wert. Ich glaub den braucht man auf dem Boden nicht (?)

HaWe
21.05.2019, 11:36
Ich habe in der Formel noch was entdeckt. Das ist der Z-Wert. Ich glaub den braucht man auf dem Boden nicht (?)

ich denke doch, du hast ja Neigung in 3D, nicht ausschließlich zur Seite oder ausschließlich nach vorn/hinten, sondern uU beides gleichzeitig oder alternativ.

Moppi
21.05.2019, 12:26
Das bildet die X- und Y-Achse ab, so wie es aussieht.

Ich gucke mal nach...

An Z kann man erkennen, wenn X und Y = 0, ob das Gerät auf dem Rücken liegt.
Richtig herum bekomme ich dann Z = 15. Auf dem Kopf anscheinend Z = -0.
Wobei das die Werte nach meiner Umrechnung sind.

Also für mich würden X und Y ausreichend sein.

HaWe
21.05.2019, 13:54
Das bildet die X- und Y-Achse ab, so wie es aussieht.

Ich gucke mal nach...

An Z kann man erkennen, wenn X und Y = 0, ob das Gerät auf dem Rücken liegt.
Richtig herum bekomme ich dann Z = 15. Auf dem Kopf anscheinend Z = -0.
Wobei das die Werte nach meiner Umrechnung sind.

Also für mich würden X und Y ausreichend sein.

wenn du meinst -
üblicherweise ist bei flacher horizontaler Lage z die senkrechte Achse (accz=1) und x+y sind waagerecht (accx=accy=0) , wie bereits oben geschrieben.
wenn du nach vorn kippst, werden die Absolutwerte von x größer und z kleiner,
wenn du zur Seite drehst, werden die Absolutwerte von y größer und z kleiner
(Vorzeichen je nach Drehrichtung),
alle 3 werden aber für die Berechnung der Lage benötigt.

edit: Wertebereich jeweils -1...+1

Moppi
21.05.2019, 15:07
wenn du meinst -
üblicherweise ist bei flacher horizontaler Lage z die senkrechte Achse (accz=1) und x+y sind waagerecht (accx=accy=0) , wie bereits oben geschrieben.
wenn du nach vorn kippst, werden die Absolutwerte von x größer und z kleiner,
wenn du zur Seite drehst, werden die Absolutwerte von y größer und z kleiner
(Vorzeichen je nach Drehrichtung),
alle 3 werden aber für die Berechnung der Lage benötigt.

Ich glaub so weit ist das schon richtig.

Zumindest beim Fliegen muss man wohl die Z-Achse dazu nehmen.

Jetzt habe ich hier eine Situation, wo sich das Kippen, über die X-Achse und über die Y-Achse, im Bereich <90° abspielt. In die eine Richtung gibt das positive Werte und in die entgegengesetzte Richtung negative Werte. Der Z-Wert ist, wie Du sagst, 1, bei flacher horizontaler Lage. Ist richtig.



MfG

HaWe
21.05.2019, 15:44
Vermutlich verstehst du noch nicht ganz den Sinn oder die Herleitung der Formeln -
der Mathematik aber ist es egal, ob du fliegst oder kriechst oder rollst, die Formeln bleiben identisch - auch wenn du immer weniger als nur 90° kippst oder drehst. 8)
Schließlich geht es alleinig um die Berechnung einer (schiefen) Lage, egal ob du dabei in der Luft fliegst oder hängst oder auf dem Boden stehst: daher werden bei Berechnungen per trigonometrischer Winkelfunktionen IMMER die Werte aller 3 Achsen benötigt!

Moppi
21.05.2019, 15:55
bei Berechnungen per trigonometrischer Winkelfunktionen

Ich denke nicht, dass das notwendig wird. Wenngleich Du anderer Meinung bist.
Berechnen kann man mathematisch sehr viele Dinge. Aber ist das wirklich immer sinnvoll?

HaWe
21.05.2019, 16:06
du kannst es natürlich immer anders machen und die Rechenvorraussetzungen ändern, ganz klar, aber die Frage ist dann, ob es für deine abweichenden Vorraussetzungen auch fertige Lösungsformeln gibt. Annähern/approximieren könnte man es ntl auch, aber ich selber würde mich nicht damit aufhalten, eine Approximierung zu entwickeln, wenn ich das Ergebnis einfach per existierender Formeln auch sofort exakt bekommen kann.