DU LERNST HIER... |
wie du mit dem Lagesensor Lageänderungen und Bewegungen des Calliope erfassen kannst. |
SENSORWERTE |
Der Lagesensor (Beschleunigungssensor) misst sowohl die konstante Erdbeschleunigung von rund 10 m/s2, die vertikal nach unten zeigt, als auch die Beschleunigungen, die durch Bewegungen zustande kommen.
Es ist ähnlich wie bei der Lageanzeige von Flugzeugen, die mit einem künstlichen Horizont angezeigt werden. Wenn man das Board nach vorne oder nach hinten neigt, ändert der Pitch-Winkel, bei der Seitwärtsneigung ändert der Roll-Winkel. Im folgendem Programm verwendest du die Befehle accelerometer.get_x(), accelerometer.get_y() oder accelerometer.get_z() , die Werte im Bereich von ungefähr -2000 bis 2000 liefern (entspricht den Beschleunigungen -20 m/s2 bis 20 m/s2). Mit acceloremeter.get_values() erhältst du alle drei Werte in einem Tupel zurück. Wenn die z-Achse senkrecht nach unten zeigt, muss der Wert der Erdbeschleunigung, also 9.81 m/s2 gemessen werden. Der Sensor gibt bei az umgefähr 981 zurück. from calliope_mini import * while True: ax = accelerometer.get_x() ay = accelerometer.get_y() az = accelerometer.get_z() a = accelerometer.get_values() print(ax, ay, az, a) sleep(500) |
MUSTERBEISPIELE |
Sensorwerte abfragen
Es wird nur ein Pixel angezeigt, das sich je nach Neigung nach rechts, links, oben oder unten verschiebt. Ziel ist es, die Libelle so auszurichten, dass die mittlere LED leuchtet. Im Programm verwendest du vier Bedingungen, um den x- und y-Wert des Pixels zu bestimmen und löschst dann das Pixel bevor du das neue anzündest.
|
MERKE DIR... |
Mit dem Beschleunigungssensor kannst du die Bewegungen und die Lage des Calliope erfassen. Meist werden die Sensorwerte in einer Messschleife regelmässig alle 10 - 100 Millisekunden abgefragt. Man nennt dies auch Pollen der Sensorwerte. |
ZUM SELBST LÖSEN |
|
Unter der Beschleunigung versteht man allgemein die Änderungsrate der Geschwindigkeit, eindimensional also
wo v die Geschwindigkeit ist.
Aus den drei Beschleunigungskomponenten kannst du die Winkel Pitch und Roll berechnen.
def getPitch(a): pitch = atan2(a[1], a[2]) return int(degrees(pitch)) def getRoll(a): anorm = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]) roll = asin(a[0] / anorm) return int(degrees(roll))