Projekt: Winkelmessung mit dem MPU6050

Hallo Leute,

erstmal vielen Dank für die Mühe sich mein Anliegen durchzulesen. Damit alles verständlich ist, hole ich weit aus und fange von vorne an:

Hintergrund:
Ich arbeite gerade an einem Projekt für meine Projektarbeit im Studium. Es geht um Wearables, also smarte Technik die man "tragen" kann, wie z.B. Fitnesstracker und Smartwatches. Ich versuche in dieser Projektarbeit einen Prototyp, bzw. ein ganz ganz grobes Modell(siehe *Wichtig), zu entwickeln womit man die Rückenhaltung im Sitzen messen kann.

Dafür benutze ich einen Arduino in Kombination mit dem MPU6050. Das grobe Testmodell, wenn es denn funktioniert, soll folgendermaßen funktionieren:
- der MPU6050 wird in der Mitte eines Gürtels befestigt (Rückenseite des Trägers)
- Die sitzende Testperson hat eine gesunde, aufrechte Rückenhaltung [Zur Vorstellung: Gerader Rücken = der Gürtel des Trägers ist wagerecht]
Es soll einen Basiswert (+- natürliche Abweichung) gemessen/wiedergegeben werden.
- Die sitzende Testperson hat nun eine entspannte Rückenhaltung, also eventuell neigt der Oberkörper mehr nach links oder rechts was gleichermaßen eine kleine Veränderung der Hüftlage verursacht [Zur Vorstellung: Oberkörper nach links oder rechts geneigt = Gürtel ist in einer Schräglage]
Jetzt soll ein neuer Wert gemessen/wiedergegeben werden, der natürlich vom Basiswert abweicht.
- Dazu möchte ich ein separates Bewertungssystem erstellen, mit einer Ausgabe auf einem LCD Display. (Beispiel: Wert weicht weniger als 20% vom Basiswert ab -> "Super Haltung", Wert ist zwischen 20-30% -> "Toleranzbereich", Wert ist über 30% -> "Haltung verbessern".

Wichtig: Diese Punkte sollten nur einen Einblick in die Hintergründe dieses Projektes geben. Getestet wird das Projekt an einem selbstgebauten Modell, wo ein Stück Gürtel mit Sensor an einer Wippe oder so befestigt ist und man den Gürtel in verschiedene Lagen bringen kann (Waagerecht, nach Links geneigt oder nach rechts geneigt)

Aktueller Stand:
Ich bin zwar definitiv kein Arduino Beginner, aber ich benutze zum ersten Mal einen Sensor und das Projekt sorgt für so manche Fragen.

1. Es gibt diverse Anschlussmöglichkeiten für den MPU6050 im Internet. Zum Beispiel wird in manchen Anleitung der INT Anschluss des MPU6050 nicht benutzt, während andere den INT Anschluss mit einem digitalen Pin des Arduinos verbinden. Gibt es da einen Grund / Unterschiede?

2. Ich habe im Internet oft die Einheit DPS (Degree per Second) gelesen. Das beschreibt ja eine zeitgebundene Änderung des Winkels. In meinem Projekt ist die Zeit egal, da ich nur die Abweichung der aktuellen Werte mit einem Basiswert vergleichen will. Ist das trotzdem mit dem DPS Wert möglich?

3. Gibt es eine Möglichkeit den "Basiswert", wo der Gürtel waagerecht ist, festzulegen oder wie könnte ich die Abweichung der aktuellen Messwerte zum "Basiswert" messen?

Ich füge heute oder morgen im Laufe des Tages meinen bisherigen Programmcode hinzu. Ich bekomme dank diversen Beispielcodes im Internet Werte vom MPU6050, allerdings frage ich mich wie realitätsnah diese Werte sind.
Außerdem versuche ich ein kleines Schaubild zur Veranschaulichung zu erstellen, wie mein selbstgebautes Modell zukünftig aussehen/funktionieren soll.

Ich danke euch schon mal vielmals für die Hilfe. Wenn es hier Leute gibt die sehr viel Spaß am Programmieren haben und mir etwas intensiver helfen wollen, wäre ich sehr dankbar.

Liebe Grüße
Mirco

Hmm, was studierst Du denn? Gehört da nicht dazu, Datenblätter von Sensoren zu verstehen, bevor man sie verwendet?

  1. INT ist ein Ausgang, kann verwendet werden, muß nicht.
  2. Der Sensor liefert eine Winkeländerung (DPS, °/s), keine Winkel.
  3. Im Ruhezustand des Sensors zeigt sein Beschleunigungsvektor nach unten.

Vielen Dank für die Antwort DrDiettrich. Ich studiere Sport- und Gesundheitstechnik, ein Studiengang der Maschinenbau, Elektrotechnik, Informatik mit Sportwissenschaften und Medizin verbindet.

Bezüglich des 2. Punktes:
Für mein Projekt heißt das folgendes, ich muss die Winkeländerung(DPS, /s) bewerten.
Ich kalibriere den Sensor so, dass er bei normaler Rückenhaltung seinen Ursprung hat. Anschließend schaue ich mir bei einer Veränderung der Rückenhaltung an, wie hoch die Winkeländerung war/ist?

Ich versuche heute noch meinen Programmcode vernünftig zu schreiben und poste ihn dann hier. Dann ist das ganze auch etwas anschaulicher.

Danke für die Hilfe bisher :slight_smile:

Für den Winkel muß die Winkelgeschwindigkeit aufintegriert werden. Das führt schon bei minimalen Abweichungen dazu, daß der Winkel beliebig wegläuft. Also nicht wundern, wenn's nix wird :frowning:

Deshalb nimmt man für jeden Sensor am besten die dazu gehörende Bibliothek, statt selbst etwas zu erfinden. Beim IMU verknüpft ein Kalman-Filter die Winkelgeschwindigkeit mit der Beschleunigung, damit brauchbarere Werte herauskommen. Und das alles noch vektoriell...

Okay, das hört sich nach ziemlich viel Lernstoff an und sprengt aktuell dem Umfang meines Projekts. Ich werde nochmal mit dem Prof reden und eventuell prüfen ob dieses Modell nicht den Leistungsanforderungen weit überschreitet.

Vielen Dank @DrDiettrich für die schnelle Hilfe.

Der Thread kann erstmal geschlossen werden! :slight_smile:

Du hast dich verwirren lassen!
Bei einer auf dem Stuhl ruhenden Person ist die messbare "Winkelgeschwindigkeit" Null.
Wie sollte es auch anders sein.

Ebenso sind deine Berechnungen, die du für die ruhende Sitzposition brauchst, aller simpelste 3 Dimensionale Transformationen.

--

Spannender wird es, das ganze in Bewegung abzuhandeln.
Dann reicht dein Beschleunigungsmesser nämlich nicht mehr.

Manchmal ist die messbare Geschwindigkeit eine andere als die gemessene :frowning:

Du brauchst für die Anwendung einen Kalman Filter der mit dem ACC und Gyro den Winkel verrrechnet und ausgibt.
Ich habe für meinen Segway auf diesen hier aufgebaut: >Klick<.
Dieser Sketch gibt die einen X und Y Winkel aus, damit hast du bestimmt ein gute Basis.
Gruß
DerDani

Meine Neigung euch beiden zu widersprechen ist groß.

Bei einem Feuerstuhl, würde ich ja sofort zustimmen!
Aber die Sitzposition auf einem Bürostuhl, ist meiner bescheidenen Ansicht nach, bar jeder Dynamik.

Segway

Dynamik pur.

Manchmal ist die messbare Geschwindigkeit eine andere als die gemessene :frowning:

womit man die Rückenhaltung im Sitzen messen kann.

Geschwindigkeit?
Jau, die Erde dreht sich
Sogar um die Sonne (behaupten zumindest manche)
Und die Galaxie rotiert auch.
Hat aber alles keine Auswirkung auf die entspannt auf einem Stuhl sitzende Person.
Und auch nicht auf den Beschleunigungssensor.
Einzig der Zug Richtung Erdmittelpunkt ist interessant.
1G, und dessen Winkel.

Also bleibt für mich die Preisfrage:
Ruhendes System, or not?

Daran macht es sich fest, ob ihr Wahr, oder ich Wahr.

Auch im Sitzen oder Liegen dreht sich ein Mensch in 24h um 360°. Da kann man nur hoffen, daß der Sensor das nicht merkt.

DrDiettrich:
Da kann man nur hoffen, daß der Sensor das nicht merkt.

Was soll sich an der Gravitation ändern?

Jetzt verstehe ich: Wenn sonst keine Kraft auf den Sensor einwirkt, lassen sich die Winkel einfacher aus dem Beschleunigungsvektor ermitteln als aus den Winkelgeschwindigkeiten.

Ja, so ist es gemeint!