TigerJython | xx für Gymnasien |
Deutsch English |
Ein micro:bit (mit oder ohne mbRobot) kann als programmierbarer Kleincomputer verwendet werden. Er verfügt über einen Beschleunigungssensor, einen Kompasssensor und gut zugängliche Input-/Output-Pins, die sich für verschiedene physikalische Experimente eignen. |
Beispiel 1: Wasserstand überwachen
Die kleine Pflanze muss man selten giessen, aber ganz vergessen darf man sie nicht. Mit dem micro:bit kann man die Feuchtigkeit der Pflanzenerde kontrollieren und wenn sie zu niedrig ist, einen Alarm auslösen. (Bei Hydrokulturen kann es sich auch um den Wasserstand handeln). Man verwendet dabei die Eigenschaft von Wasser, Strom zu leiten, Wenn man also von der 3V Spannungsversorgung einen Stromkreis zum Pin0 erstellt, der durch Wasser führt, so wird am Pin0 eine höhere Spannung zu messen sein, als wenn der Stromkreis offen ist. Man braucht für den Aufbau nur zwei Kabel mit Krokodilklemmen und zwei Draht- oder sonstige Metallstücke, die man als Sonden in den Blumentopf steckt. Das eine Kabel verbindet man mit Pin0, das andere mit 3V. |
Für die Programmentwicklung kann man einen beliebigen Wasserbehälter verwenden.
Der Befehl pin0.read_analog() gibt die Spannung an P0 zurück und du schreibst den Wert ins Terminalfenster, damit du den Unterschied siehst, ob die Sonden im Wasser sind oder nicht.
# Mr7a.py from microbit import * while True: v = pin0.read_analog() print(v) sleep(500) |
|
Erklärungen zum Programmcode:
Die Anlage kann mit einer optischen Alarmanzeige auf dem LED-Display ergänzt werden, in dem man beim niedrigen Wasserstand ein Bild auf dem Display anzeigt, z. B. display.show(Image.SAD) |
Beispiel 2: Beschleunigungssensor
Der Beschleunigungssensor des micro:bit misst sowohl die konstante Erdbeschleunigung von rund 10 m/s2, die vertikal nach unten zeigt und Beschleunigungen, die durch Bewegungen zustande kommen.
Der Beschleunigungssensor ist auf dem Board gut sichtbar. Ähnliche Sensoren sind auch in den meisten Smartphones eingebaut. Der Sensor kann die Beschleunigung (inkl. Erdbeschleunigung) in x-, y, und z-Richtung messen. Aus diesen Komponenten kann die Vorwärtsneigung (Pitch) und Seitwärtsneigung (Roll) berechnet werden. |
Es ist ähnlich wie bei der Lageanzeige von Flugzeugen (künstlicher Horizont). Wenn man das Board nach vorne oder nach hinten neigt, ändert der Pitch-Winkel, bei der Seitwärtsneigung ändert der Roll-Winkel. Im Programm verwendest du das Accelerometer-Objekt und rufst accelerometer.get_x(), accelerometer.get_y() oder accelerometer.get_z() auf, die Werte im Bereich von ungefähr -2000 bis 2000 liefern, die den Beschleunigungen -20 m/s2 und 20 m/s2 entsprechen. Mit acceloremeter.get_values() erhältst du alle drei Werte in einem Tupel zurück. |
Sensorwerte abfragen ("Polling"): Zudem wird auf dem Display bei einem positiven Wert ein Links- und bei einem negativen Wert ein Rechtspfeil angezeigt |
#Mr7b.py from microbit import * while True: acc = accelerometer.get_x() print (acc) if acc > 0: display.show(Image.ARROW_E) else: display.show(Image.ARROW_W) sleep(100) |
Zusatzbemerkung
Mit den folgenden Funktionen kannst du den pitch und Rollwinkel berechnen:
from math import * def getPitch(): a = accelerometer.get_values() pitch = atan2(a[1], -a[2]) return int(degrees(pitch)) def getRoll(): a = accelerometer.get_values() anorm = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]) roll = asin(a[0] / anorm) return int(degrees(roll))
Beispiel 3: Magnetfeldsensor
|
Bevor man mit der Messung beginnen kann, muss man den Sensor mit dem Befehl compass.calibrate() kalibrieren. from microbit import * compass.calibrate() Nach dem Aufruf blockiert das Programm und es erscheint auf dem Display die Aufforderung, eine Kreisfigur zu erstellen. Man muss das Board in alle Richtungen kippen, bis alle äusseren LEDs einen leuchtenden Kreis bilden. Sogleich wird auf dem Display das Image HAPPY angezeigt. |
Einen Kompass erstellen
|
#Mr7c.py from microbit import * if not compass.is_calibrated(): print("Perform calibration please!") compass.calibrate() while True: h = compass.heading() print(h) if h >= 22.5 and h < 67.5: display.show(Image.ARROW_NW) elif h >= 67.5 and h < 112.5: display.show(Image.ARROW_W) elif h >= 112.5 and h < 157.5: display.show(Image.ARROW_SW) elif h >= 157.5 and h < 202.5: display.show(Image.ARROW_S) elif h >= 202.5 and h < 247.5: display.show(Image.ARROW_SE) elif h >= 247.5 and h < 292.5: display.show(Image.ARROW_E) elif h >= 292.5 and h < 337.5: display.show(Image.ARROW_NE) else: display.show(Image.ARROW_N) sleep(10) |
Erklärungen zum Programmcode:
h = compass.heading() Gibt den Azimut in Grad |
Beispiel 4: Mit Magnetfeld Minen suchen
Man legt einen kleinen Magneten, wie man ihn für Memoboards findet, unter einen Kartondeckel. Den Magneten kann man wie eine Mine auffassen, die man mit dem micro:bit als Minensucher auffinden muss. IDie mittlere LED leuchtet umso heller, je näher das Board zur Mine kommt. Man verwendet den Befehl compass.get_field_strength(), der die Stärke des Magnetfeldes zurückgibt. |
#Mr7d.py from microbit import * while True: b = compass.get_field_strength() z = min(9, int(b / 500000)) # brightness display.set_pixel(2, 2, z) sleep(10) |
Erklärungen zum Programmcode:
b = compass.get_field_strength() Stärke des Magnetfeldes | |
z = min(0, int(b/500000) Der erhaltene Betrag wird skaliert, so dass man einen Wert zwischen 0 und 9 erhält |
Aufgaben: |
1) |
|
2) |
Baue eine Alarmanlage auf, welche überwacht, ob eine Tür geöffnet wird. Tipp::Verwende den Beschleunigungssensor. |
3) |
Im Programm importierst du das Modul music und spielst mit dem Befehl play(ENTERTAINER) den Song Entertainer ab. Weitere eingebaute Songs findest du in der Dokumentation.
|