DU LERNST HIER... |
wie du mit dem Beschleunigungssensor Lageänderungen und Bewegungen der Oxocard erfassen kannst. |
SENSORWERTE |
Der Sensor misst die konstante Erdbeschleunigung von rund 10 m/s2 und kann damit Lageänderungen der Oxocard erfassen, aber auch Beschleunigungen, die auf Grund von Bewegungsänderungen der Oxocard auftreten, beispielsweise weil man ihr einen Stoss gibt.
Wie bei Flugzeugen, kann man die Neigung der Oxocard gegenüber der Erdoberfläche bestimmen. Wenn man die Karte nach vorne oder nach hinten neigt, ändert der Pitch-Winkel bei einer Seitwärtsneigung der Roll-Winkel. |
MUSTERBEISPIELE |
Programm: from oxocard import * from oxoaccelerometer import * acc = Accelerometer.create() while True: roll = acc.getRoll() pitch = acc.getPitch() print("pitch:", pitch, "roll:", roll) sleep(0.3)
Programm: from oxocard import * from oxoaccelerometer import * acc = Accelerometer.create() enableRepaint(False) while True: roll = acc.getRoll() clear() if roll >= 0: arrow(3, 3, 0, 5, RED) if roll <= 0: arrow(4, 3, 4, 5, RED) repaint() print("roll = ", roll) sleep(0.3)
Programm:
from oxocardext import * from oxoaccelerometer import * acc = Accelerometer.create() enableRepaint(False) y = 3 while True: pitch = acc.getPitch() if pitch > 0 and y < 7: y += 1 if pitch < 0 and y > 0: y -= 1 clear() line(0, y, 0, 8, RED) repaint() sleep(0.1)
Programm: from oxocard import * from oxoaccelerometer import * acc = Accelerometer.create() while True: accX = acc.getX() accY = acc.getY() accZ = acc.getZ() print(accX, accY, accZ) #print("(acc_x, acc_y, acc_z) = (5.2f, %5.2f, %5.2f)" %(accX, accY, accZ)) sleep(0.1) Es ist üblich, beim Ausschreiben der Werte auch anzugeben, um welchen Wert es sich handelt. Am besten machst du das mit einer Formatierungsangabe (auskommentierte Zeile). Mit %5.2f legst du fest, dass die Werte als Float auf 2 Nachkommastellen gerundet und einer Feldbreite von 5 Zeichen ausgeschrieben werden. Dies hat auch den Vorteil, dass die Werte exakt untereinander erscheinen.
Du kannst mit der Oxocard ein Messgerät bauen, das wie eine Wasserwaage-Libelle funktioniert. Dazu zeichnest du einen Punkt entsprechend der momentanen Werte der Beschleunigungskomponenten in x- und y-Richtung.
Programm: from oxocardext import * from oxoaccelerometer import * acc = Accelerometer.create() x = 3 y = 3 enableRepaint(False) while True: accX = acc.getX() accY = acc.getY() x = max(min(int(3 - accX), 5), 1) y = max(min(int(3 + accY), 5), 1) clear() circle(3, 3, 2, CYAN) fillRectangle(2, 2, 3, 3, BLUE) dot(x, y, YELLOW) repaint() sleep(0.1)
Programm: from oxocard import * from oxoaccelerometer import * def onTap(): global n n += 1 Accelerometer.create(onTap, trigger_level = 10, rearm_time = 0.2) n = 0 print("Tap detector started") while True: display(n) sleep(0.1) |
MERKE DIR... |
Mit dem Beschleunigungssensor kannst du die Lage und Bewegungsänderungen der Oxocard erfassen. Meist werden die Sensorwerte mit Pollen, d.h. in einer while-True Schleife regelmässig abgefragt. Schnelle Änderungen müssen mit dem Eventmodell erfasst werden. Ein Event wird ausgelöst, wenn der Sensorwert einen Triggerpegel überschreitet. In einer Callbackfunktion definierst du, wie das Programm reagieren soll. |
ZUM SELBST LÖSEN |
|