Ich würde, wie du schon gesagt hast, den Sensor auf waagerechter Fläche nullen und mit den "kalibrierten" Werten rechnen.
Hallo,
ich möchte mit einem Beschleunigungssensor Winkel auswerten, um so Neigungswinkel und Drehung an einem Brett zu erfahren.
Dazu habe ich einen Beschleunigungssensor in einem Plastikgehäuse.
Allerdings kann ich den Sensor nicht 100% parallel zum Brett oder seinem Gehäuse ausrichten, weshalb ich auf einem absolut graden Tisch/Brett x Werte auslese, darauß den Mittelwert bilde und diese quasi zum 'Nullen' des Sensors verwenden möchte.
Wenn ich die Daten des Sensors nun mit µ (steht für X/Y/Z):
(asin(µ/sqrt( (x*x) + (y*y) + (z*z)))* 180 / 3.14159265)
auswerte, bekomme ich den Winkel der aktuellen Lage des Sensors ausgegeben.
Solange der Sensor nur in der Ebene liegt, kann ich meine auf der graden Ebene ausgelesenen Werte einfach bei den entsprechenden Winkeln addieren und somit den Sensor nutzen, um die Lage des Bretts bei 0° zu bestimmen.
Wenn ich nun allerdings den Winkel der Y-Achse ändere, verändere ich gleichzeitig den Winkel der X-Achse, da der Sensor nicht parallel zum Brett aufliegt.
Nun ist meine Überlegung, dass ich nicht erst die Sensordaten in WInkel umrechne und dann korrigiere, sondern dass ich zuerst den Korrekturfaktor einreechne und dann in die entsprechenden Winkel umrechne.
Die Sensordaten bestehen aus Werten um die +/-4100 pro Achse.
Wäre es logisch, dass der Winkel dann richtig angezeigt wird, wenn ich die Eichungs-Werte vor der Winkelberechnung einlese?
Oder muss ich einen Weg wählen, wie ich die Sensorkoordinaten auf den Weltkoordinaten projeziere?
Ich hoffe, mir kann hier jemand meine mathematischen Lücken füllen und mir zum Erfolg verhelfen
Ich würde, wie du schon gesagt hast, den Sensor auf waagerechter Fläche nullen und mit den "kalibrierten" Werten rechnen.
Gruß
Dirk
Nun ja, das ist der erste Schritt, den ich machen muss, um ne Relativität zur Erdbeschleunigung zu bekommen.
Aber wenn die Y-Achse nun gedreht wird und die X-Achse nicht 100% orthogonal zur bewegten Achse steht (weil der Sensor nicht 100% parallel zur Drehachse steht), beeinflusst der Y-Winkel den X-Winkel.
Ich könnte jetzt versuchen, eine Wertetabelle zu erstellen, damit ich weiß, bei welchem Winkel der X-Wert wie stark und in welcher Richtung beeinflusst wird...aber das wär sehr, sehr aufwändig und müsste bei jedem neuen Durchgang zur Kalibrierung (z.B. auf nem anderen Brett, ich bekomm den Sensor ja niemals auf zwei Brettern haargenau gleich ausgerichtet!) in zwei Positionen durchgeführt werden (einmal wenn der Sensor liegt und einmal, wenn er um 90° gekippt ist, damit man quasi eine virtuelle Ebene errechnen kann, auf der sich der Sensor dreht).
Die Korrekturwerte muss ich sowieso einfluießen lassen.
Aber würdest du diese in den Wertebereich des Sensors vor der Umrechnung in Winjkel (also bei den Werten +/- ~4100) oder nach der Umrechnung in Winkel einfließen lassen?
Cysign:Ich würde das schon mit den ADC- bzw. Ausgabe-Werten machen.Die Korrekturwerte muss ich sowieso einfluießen lassen. Aber würdest du diese in den Wertebereich des Sensors vor der Umrechnung in Winjkel (also bei den Werten +/- ~4100) oder nach der Umrechnung in Winkel einfließen lassen?
Klar kann der Sensor nur in seinem eigenen Koordinatensystem messen. Die Umrechnung in ein anderes Koordinatensystems ("Brett") ist sehr aufwändig und bei deiner Anwendung (derselbe Sensor auf unterschiedlichen "Brettern" oder Gehäuseformen) auch kaum durchführbar. Auf welche Lage in Bezug auf den "Untergrund" soll sich denn der Sensor einstellen? Letztlich kann man ja auch nur eine Größe messen, wenn eine feste Beziehung zwischen "Messgerät" und "Messobjekt" definiert werden kann.
Gruß
Dirk
Ich würde gerne die Y-Achse des Sensors mit der Länge des Bretts parallelisieren, damit ich in jeder Y-Lage den passenden X-Wert bestimmen kann (Y-Achse = Längskante des Bretts, x * kurze kante des Bretts. Z-Achse geht in die Höhe und wird von mir nicht benötigt).
Also meinst du, dass es mehr sinn macht, eine Vergleichstabelle automatisiert bei einer definierten Drehung als Messreferenz aufzunehmen und diese hinterher zu interpolieren, um den passenden X-Null-Winkel zu bekommen?
An den unterschiedlichen Brettern wird der Sensor annähernd gleich montiert. Aber halt nur zu 99,5% gleich.
@Cysign: Ich kann wenig helfen, weil ich noch nicht genau weiss, was du messen willst.
Baust du prinzipiell so etwas: http://www.elv.de/output/controller....&detail2=13927
... auch evtl. in 2 Ebenen oder auch noch die 3. Ebene (Z-Achse), also die Rotation des Brettes um eine Art zentrale Achse.
Fragen:
1. Um welche Achsen kippt das Brett? Um alle drei?
2. Auf welche Dreh-Achse kommt es dir an, d.h. welche willst du messen und welche ist/bleibt konstant?
3. Warum ist die Lage des Sensors auf dem Messobjekt variabel und nicht genau zu definieren?
4. Kannst du vielleicht einmal die konkrete Anwendung beschrieben?
Gruß
Dirk
Ich möchte im Endeffekt die Neigung (nennen wir sie X-Achse) um die schmale Achse des Brettes messen. Da ich den Sensor aber nie 100% genau ausrichten kann und die Messwerte vom der Neigung um die Längsachse (nennen wie diese Y-Achse) somit abhängig sind, muss ich diesen Messfehler korrigieren.
Vom Prinzip her ist es also so etwas, was du da verlinkt hast.
1. Das Brett kippt um Y-Achse (lange Seite vom Brett) und um die X-Achse (kurze Seite vom Brett). Die Z-Achse (nach oben) benötige ich nicht.
2. Die Längsseite bleibt während des Messens konstant, ich möchte die X-Achse messen.
3. Die Lage ist variabel, weil ich den Sensor nicht fest verkleben kann, da ich ihn für mehrere Bretter nutzen muss. Ich kann ihn zwar versuchen präzise auszurichten, aber wenn er nicht 100% genau sitzt, beeinträchtigt das die Messwerte um bis zu 2° bei einer Drehung von 90°, was ich korrigieren möchte.
Ich versuche morgen mal eine Skizze zu zeichnen, woran es dann leichter fallen sollte, das Problem nachzuvollziehen. Aber jetzt muss ich erstmal tot umfallen
Ich denke da ans Skalarprodukt. Und z ist dabei genau so wichtig!
Egal wie schief der Sensor in Deiner Box liegt. Hauptsache er ist darin irgendwie fixiert. Der Accelerometer Vektor (x,y,z) zeigt immer zum Erdmittelpunkt.
- Kleb die Box irgendwo auf's gerade Brett, ließ den Sensor aus und nenne den Vektor A.
- Dann neige das Brett um die y-Achse und der Sensor liefert Vektor B.
- Mit Hilfe des Skalarproduktes A*B kannst Du den Neigungswinkel ausrechnen.
Das Skalarprodukt liefert Dir den Winkel zwischen den Brettebenen in 1 und 2. D.h. mit dem Skalarprodukt kannst Du nicht zwischen einer Neigung um y-Achse und/oder x-Achse unterscheiden.
Wahrscheinlich habe ich bis hierhin Dein Problem nicht gelöst aber hoffentlich ein wenig mit der Mathematik geholfen.
So, hier mal eine grobe Übersicht. Ich hfofe, es ist verständlich. Der rosane Kasten soll der Sensor sein.
Der Sensor ist in der Box fixiert, die ich auf das Brett lege.
Das Brett ist zum Testen da, wo die X-Achse eingezeichnet ist, fixiert, so dass ich es zum Testen um den Winkel ß drehen kann.
Da ich immer noch nicht so ganz durchblicke, ist mein Ansatz derzeit, dass ich das Brett langsam um ß drehe und dabei Nullwerte für α einlese. Um α auszuwerten werden diese Werte dann hinterher addiert.
Also wenn α bei ß 15° z.B. um 0,3° abweicht, kann ich anhand des Arrays ablesen, dass bei ß 15° a -0,3° sein muss, um eigentlich 0° anzuzeigen.
So, nachdem ich mich nun etwas mehr mit der Materie auseinandergesetzt habe und der Sensor komischweweise bei Wiederholungsmessungen (ohne dass man ihn berührte/bewegte) Abweichungen in zu großem Maße aufweist, hab ich mich entschieden den Sensor ohne Gehäuse direkt auf der Platine mal unter die Lupe zu nehmen.
Vor allem auffällig ist, dass er in der Regel die ersten paar Minuten nach der Inbetriebnahme Werte ausspuckt, die etwa um 0,2° (Raw-daten in Winkel umgerechnet) von den Werten, die nach einigen Minuten ausspuckt abweichen. Für die gewünschte Anwendung ist das zu unpräzise.
Aus dem Grund möchte ich mich nun einem Oak Tilt (http://developer.toradex.com/files/t..._Datasheet.pdf) widmen.
Hier bekomme ich die Koordinaten jedoch nicht als Rohdaten ausgespuckt, sondern direkt Winkel für Azimuth (Wikel in Bezug zur X-Achse um Z gedreht) und Zenith (Winkel zur Z-Achse).
Nun überlege ich, wie ich diese Winkel umrechnen kann, da ich eine Kalibrierungsemssung vornehmen möchte, die etwa parallel zur Y-Achse liegt und quasi den Winkel Z-X-darstellt.
Lesezeichen