Jython
Deutsch   English 

7. Physical Computing mit dem micro:bit


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.

# Mq7a.py
from microbit import *

while True:
    v = pin0.read_analog()
    print(v)     
    delay(500)
► In Zwischenablage kopieren
 

 

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"):
Im Programm wird in einer Endlosschleife die Beschleunigung in x-Richtung alle 100 Millisekunden abgefragt und im Terminalfenster mit print(acc) ausgeschrieben.

Zudem wird auf dem Display bei einem positiven Wert ein Links- und bei einem negativen Wert ein Rechtspfeil angezeigt

 
#Mq7b.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)
    delay(100)  
► In Zwischenablage kopieren
 

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

 


Man kann den Magnetfeldsensor dazu benützen, wie mit einem Kompass die Lage des micro:bits in Bezug auf die Nordrichtung zu bestimmen. Dazu verwendet man den Befehl compass.heading(), der bei horizontaler Lage des Boards das Azimut in Grad (positiv gegen Osten) zurückgibt.

Der Sensor ist auf dem micro:bit gut sichtbar und ist mit COMPASS beschriftet.  

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

Wie bei einem realen Kompass soll auf dem Display ein Pfeil erscheinen, der ungefähr nach Norden zeigt. Da man nur Pfeile in 45-Grad-Richtungen darstellen kann, teilt man das Azimut in 8 Bereiche ein und ordnet jedem Bereich denjenigen Pfeil zu, der am besten passt. Wenn der Sensor noch nicht kalibriert ist, muss man zuerst die Kalibrierung durchführen. Eigentlich müsste man bei den Bereichsgrenzen auch auf die Gleichheit testen. Da der Sensor aber nur ganzzahlige Werte zurückgibt, kann man darauf verzichten.

 
#Mq7c.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)
    delay(10) 
► In Zwischenablage kopieren
 

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_values(), der die Stärke des Magnetfeldes als ein Tupel mit den x-, y- und z-Komponenten zurückgibt.

 
#Mq7d.py
from microbit import *
import math

while True:
    v = compass.get_values()
    b = math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2])
    z = min(9, int(b / 500000)) # brightness
    display.set_pixel(2, 2, z)
    delay(10)
► In Zwischenablage kopieren
   

Erklärungen zum Programmcode:

b = math.sqrt(v[0 *v[0] + v[1]*v[1 ] + y[2]*v[2]) Betrag der drei Magnetfeldkomponenten
z = min(0, int(b/500000) Der erhaltene Betrag wird skaliert, so dass man einen Wert zwischen 0 und 9 erhält

 


Aufgaben:


1)


Du willst untersuchen, wie gut deine Finger elektrisch leiten. Dazu berührst du mit dem Zeigefinger den Anschluss 3V und mit dem Mittelfinger den Anschluss P0. Schreibe mit deinem Programm alle 100 ms den Messwert aus.

 


2)

Baue eine Alarmanlage auf, welche überwacht, ob eine Tür geöffnet wird. Tipp::Verwende den  Beschleunigungssensor.
 


3)


Für das nächste Experiment brauchst du einen Kopfhörer und 2 Kabel mit Krokodilklemmen. Mit dem ersten Kabel (hier gelb) verbindest du den Pin GND des micro:bit mit dem hinteren Teil des Kopfhörersteckers. Mit dem zweiten Kabel (hier rot) verbindest du den Pin0 mit dem vorderen Teil des Kopfhörersteckers.

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.