Diesen Baustein kennen wir bereits aus dem PBASIC Kapitel BS - Intelligente Sensoren - Beschleunigungssensor. Dort wurde er mit einer BASIC Stamp betrieben. Aufbau und Wirkungsweise dieses interessanten Bausteins könnt ihr dort nachlesen.
Der MX2125 gibt für die beiden Achsrichtungen x und y je eine Messgröße aus. In dieser Übung werden über P11 und P10 die Messdaten dem Propeller-Controller übergeben und im Terminal angezeigt.
Material |
|
Aufgaben |
|
Programm Neigung1.c
Wie arbeitet das Programm Neigung1.c?
Der Sensor MX2125 liefert zwei Datenströme, einen für die x-Achse, einen für die y-Achse. Die Impulse habe eine Länge von ca. 5000µs, wenn das Board flach gehalten wird.
Wird es geneigt, variieren die Impulslängen zwischen 3175 und 6125µs. Über Funktionen in der mx2125 Bibliothek werden diese Messwerte auf einen Bereich von -1250 bis +1250 skaliert und anschließend in Winkelwerte zwischen -90° und +90° umgewandelt (der Ausgangswertebereich kann, Sensor bedingt, etwas variieren).
Wer etwas mehr über Skalierung wissen möchte, erfährt hier mehr.
Die mx2125-Bibliothek lässt sich in jedes Projekt aus dem Hauptmenü mit Project > Add Simple Library einbinden. Im Simple Library Folder > Sensor > libmx2125 wird der Ordner ausgewählt. Alle Funktionen aus dieser Bibliotheksdatei stehen dann mit dem Aufruf
#include "mx2125.h"
im Projekt zur Verfügung.
Auszug aus der Simple Library Reference
In der Simple Library Reference findet man Hinweise zu den Funktionen der Bibliothek mx2125.h. Sie enthält drei neue Funktionen:
int mx_accel (int axisPin)
Misst die Beschleunigung in Vielfachen von g (Erdbeschleunigungsgröße g). Ein Wert von +/- 1250 entspricht ungefähr +/- 1g.
int mx_rotate(int xPin, int yPin)
Bei vertikal gehaltenem Accelerometer wird der Drehwinkel bestimmt. Zeigt die Spitze des Dreiecks auf dem Chip nach oben, dann sollte der Drehwinkel 0° angezeigt werden.
int mx_tilt(int axisPin)
Misst den Neigungswinkel im Bereich von +/- 90°. 0° liegt dann vor, wenn die Oberfläche des Sensor parallel zum Untergrund steht.
In diesem Versuch ist P10 mit dem Anschluss Xout des MX2125 verbunden.
int x = mx_tilt(10)
holt sich den x-Messwert über P10 vom MX2125 und speichert ihn in der Variablen x ab. Entsprechendes passiert unter
int y = mx_tilt(11)
mit dem y-Messwert an P11, der der Variablen y zugewiesen wird.
Die Messungen werden in einer Endlosschleife alle 200ms im Terminal ausgegeben.
Versuch mal dies!
Halte das Board senkrecht vor den Körper und drehe es wie ein Steuerrad nach links und nach rechts. Mit Hilfe der Funktion mx_rotate aus der mx2125 Bibliothek wird der Drehwinkel in einem Bereich von 0 bis 359° im Terminal angezeigt.
Aufgaben |
|
Programm Drehung.c
Jetzt kommst du!
Versuche einmal den Drehwinkel aus der Messung von mx_rotate auf ein anderes Gerät und seine Eigenschaften zu übertragen, wie zum Beispiel die Helligkeit einer LED, die Position des Steuerrades eines Servos oder auf die Position eines Zeichens im SimpleIDE Terminal.
Tipp: zur Positionierung eines Zeichens benötigt man etwas Mathematik und Kenntnisse über Skalierungen. Die x- und y-Werte müssen auf einen Bereich von 0 bis 20 übertragen werden. Wenn das erfolgt ist, kann über
print(“%c%c%c*”, CRSRXY, x, y)
ein Sternchen (*) im Terminal ausgegeben werden oder alternativ mit
print(“%c%c%c ”, CRSRXY, xAlt, yAlt)
das vorher angezeigte Zeichen wieder gelöscht werden.