Für diesen Abschnitt sind Mathematikkenntnisse mindestens aus der oberen Mittelstufe notwendig (trigonometrische Funktionen, arcus-Funktionen, Hauptwert, Pythagoras).
Für die folgenden Programme ist die Bibliotheksfunktion mma7455.h notwendig.
Mit dem ersten Programm werden die Achsbeschleunigungswerte in Richtung der drei Raumachsen x, y und z im Terminal von SimpleIDE ausgegeben. Dabei bedeuten:
Abb. 2 zeigt drei mögliche unkalibrierte Messwerte eines flach auf einem Tisch liegenden g-Sensors, auf den nur die Gravitationskraft in z-Richtung wirkt. Die hier angezeigten Werte müssen nicht mit den eigenen Messwerten übereinstimmen, da sie - wie gesagt - noch nicht kalibriert wurden.
Im Idealfall sollte die Anzeige die Werte x = 0, y = 0, z = 64 präsentieren. Der Wert 64 ist vom Hersteller vorgegeben und entspricht 1g (g: Schwere- oder Fallbeschleunigung, die ortsabhängig ist und in nördlichen Breiten bei ca. 9,81 m/s² liegt). Wird das Board auf den Kopf gestellt (der Sensor befindet sich unterhalb des Boards), dann sollte im Terminal von SimpleIDE ein negativer Wert angezeigt werden.
Testprogramm Kalibrieren | |
Aufgaben |
|
Das Programm Test_MMA7455.c
Wie arbeitet das Programm Test_MMA7455.c?
In Zeile 2 wird eine neue Bibliotheksdatei mma7455.h in das Programm eingebunden.
Deklaration der drei Variablen x, y und z vom Typ short (16-Bit). Sie werden beim Funktionsaufruf von MMA7455_getxyz10 in Zeile 13 benötigt.
An jeden der drei Parameter der Funktion MMA7455_init wird ein Zahlenwert übergeben. Damit werden die Propeller I/O Pin festgelegt, die mit den Pin DATA, CLK und /CS des Sensors verbunden sind (DATA -> P7, CLK -> P8, /CS -> P6).
An die Funktion werden mit diesem Aufruf die Adressen der drei Achsvariablen übergeben; die Funktion weist die Messwerte dann den drei genannten Variablen zu.
Der Cursor wird im Terminal zunächst in die Homeposition gebracht; anschließend werden die Dezimalwerte der drei Variablen x, y und z im Terminal ausgegeben und alle Zeichen rechts von der Ausgabe gelöscht (CLREOL).
Nach einer Pause von 200ms beginnt das Programm wieder mit Zeile 13.
Die drei Achsen des Sensors werden in diesem Abschnitt kalibriert. Liegt das Board flach auf einem Tisch, dann sollten die x- und y-Werte 0 anzeigen, steht es auf einer Kante lotrecht zum Tisch, dann sollte die z-Komponente 0 anzeigen. Für den Kalibrierungsvorgang gibt es in der Sensorbibliothek drei spezielle Funktionen: MMA7455_setOffsetX, MMA7455_setOffsetY und MMA7455_setOffsetZ.
Kalibrierung des MMA7455 | |
Aufgaben |
|
Das Programm MMA7455_TestKalib.c
Wird der kalibrierte Sensor flach auf einen horizontalen Tisch gestellt, dann sollten die x- und y-Achswerte einen Wert um 0 und der z-Achswert bei ca. 65 (entspricht 1g) liegen.
Mit Hilfe des g-Sensors lassen sich Höhen von Gegenständen und Gebäuden leicht durchführen. Dazu genügt die Aufnahme von zwei Messwerten: Abstand zum Gebäude/Gegenstand und Erhebungswinkel über Grund (Abb. 4).
In einem rechtwinkligen Dreieck kann die Gegenkathete zum Winkel Theta über die trigonometrische Funktion tan bestimmt werden, wenn der Winkel Theta und die Ankathete bekannt sind.
Die Ankathete entspricht dem Abstand des Beobachters vom Gebäude, die sich mit einem Metermaßstab, einem Lasermessgerät o. ä. bestimmen lässt.
Hat man die Gegenkathete bestimmt, dann ergibt sich die Gebäudehöhe aus (2) plus Sehhöhe des Beobachters oder in einer Formel ausgedrückt:
Beispiel
Nehmen wir an, dass der Abstand zu einem Objekt (Ankathete) 10m betrage und die Sehhöhe des Beobachters bei 1,5m liegt. Der Winkel, der mit dem g-Modul bestimmt wurde, liege bei 61°. Mit diesen Werten lässt sich die Höhe eines Objektes berechnen.
Abstand Beobachter - Objekt : 10m
Winkelmessung g-Modul : 61°
Sehhöhe des Beobachters : 1,5m
Aus (2) ergibt sich für die Gegenkathete ein Wert von 18,04 und aus (3) für die Objekthöhe ein Wert von 19,54m.
Das Board muss senkrecht zum Boden gehalten werden und über die x- und y-Achse des Sensors wird der Winkel Theta bestimmt. Dazu muss das Programm so angepasst werden, dass es den Neigungswinkel Theta berechnet und den z-Wert im Terminal mit angibt. Über den z-Wert überprüft man die präzise senkrechte Ausrichtung des Sensors. Das ist genau dann der Fall, wenn z den Wert 0 annimmt.
Winkelmessung mit g-Sensor | |
Aufgaben |
|
Das Programm MMA7455_Winkelmessung.c
Ist der Wert von zf größer als 64,0, dann gibt die Funktion asin(zf/64) (Zeile 27) den Wert nan (not a number) zurück. Über die WENN ... DANN Schleife (Zeilen 28 - 31) wird das überprüft und eine entsprechende Nachricht im Terminal ausgegeben.
Die Funktion atan2 (Zeile 25) verlangt zwei Eingabegrößen; sie gibt den Hauptwert der Funktion arctan von x im Bogenmaß zurück. Der Wert kann mit Bogen * 180 / PI in ein Winkelmaß umgerechnet werden.
asin gibt den Hauptwert der Funktion arcsin von x im Bogenmaß zurück.
Eine mögliche Messung könnte im Terminal von SimpleIDE wie folgt aussehen: