HomeTurtlegrafikGPanelRobotik WebTigerPython |
Python - Online |
DU LERNST HIER... |
wie du mit dem Calliope das Magnetfeld bestimmen kannst und wie ein Gyrosensor funktioniert. |
SENSORWERTE ANZEIGEN |
Der Magnetfeld- und der Gyrosensor sind hardwaremässig im Lagesensor-Chip integriert. Der Magnetfeldsensor gibt die aktuellen x-, y-, und z-Komponenten der Magnetfeldes an der Stelle des Sensors zurück. Mit magnatometer.get_x() kannst du die x- Komponenten abfragen. Beim Calliope mini3 musst du den Befehl compass.get_x() verwenden.
|
MUSTERBEISPIELE |
Minen suchen
Du verwendest den Befehl magnetometer.get_z(), der die Stärke des Magnetfeldes in der Vertikalen zurückgibt. Dann skalierst ihn so, dass du einen Helligkeitswert zwischen 0 und 9 erhältst. In der Funktion light(v) schaltest du alle LEDs miteinander an. Programm: from calliope_mini import * def light(n): for i in range(5): for k in range(5): display.set_pixel(i, k, n) while True: z = magnetometer.get_z() #z = compass.get_z() v = abs(z // 3300) n = min(9, v) light(n) sleep(20) Wasserstand messen
Programm: from calliope_mini import * import music state = "ok" while True: z = magnetometer.get_z() #z = compass.get_z() #print(z) if z >= 700 and state != "high": state = "high" print("->high") elif z >= 500 and z < 700 and state != "ok": state = "ok" print("->ok") elif z < 500 and state != "low": state = "low" print("->low") if state == "high": music.pitch(2000, 100) elif state == "low": music.pitch(500, 100) sleep(100) Beachte, dass die z-Komponente des Magnetfeldes abhängig vom Magnet, den du in diesem Experiment verwendest. Aktiviere zu Beginn die Zeile print(z) und ändere, falls nötig, die Grenwerte.
Programm: from calliope_mini import * def light(n): for i in range(5): for k in range(5): display.set_pixel(i, k, n) while True: bz = gyrometer.get_z() v = abs(bz // 3300) v = min(9, v) light(v) sleep(20) |
MERKE DIR... |
Der Magnetfeldsensor kann zum berührungslosen Erfassen der Position eines Magneten oder einer Magnetspule verwendet werden. Mit dem Gyrosensor wird die Rotationsgeschwindigkeit bestimmt. |
ZUM SELBST LÖSEN |
|
Die hier gezeigte Lösung verwendet das Programmierparadigma "Zustandsprogrammierung" (state programming), wie es im Zusammenhang mit Automaten (state machines) weit verbreitet ist.
Dabei ist wichtig, dass nur Zuständsänderungen erfasst werden. Die Programmierung mit einer mehrfachen ifelse-Struktur ist nicht selbstverständlich und muss speziell trainiert werden.