TigerJython4Kids
micro:bit Robotik
kompass
Deutsh   English   Franšais

6. COMPAS (MESURE DU CHAMP MAGNÉTIQUE)

 

 

OBJECTIFS DE CETTE SECTION

 

Cette section montre comment mesurer le champ magnétique à l’aide du compas intégré au micro:bit.

 

 

CALIBRATION DU SENSEUR

 
 


On peut utiliser le micro:bit comme une boussole en mesurant l’orientation du micro:bit par rapport au Nord magnétique. La méthode écart entre l'orientation du micro:bit et le nord magnétique (azimut) peut être déterminé avec compass.heading() qui, lorsque le micro:bit est en position horizontale, retourne l’azimut en degrés. Les angles sont mesurés dans le sens horaire (angle positif vers l’Est).

Le compas est bien visible sur le micro:bit et désigné par COMPASS.

 

Avant de pouvoir commencer à faire des mesures, il est nécessaire de calibrer le senseur avec l’instruction compass.calibrate(). Suite à cet appel de méthode, le programme se bloque et demande de dessiner un cercle sur l’écran (draw a circle). Il s’agit alors d’incliner le micro:bit de différentes manières jusqu’à ce que tous les pixels du cercle soient allumés.

 


Program:

from microbit import *

compass.calibrate()
while True:
    print(compass.heading())
    sleep(300)    
► Copy to clipboard

 

 

EXEMPLES

 
Einen Kompass erstellen

Wie bei einem realen Kompass soll auf dem Display ein Pfeil erscheinen, der ungefähr nach Norden zeigt.

Da du nur Pfeile in 45-Grad-Richtungen darstellen kannst, teilst du das Azimut in 8 Bereiche ein und ordnest jedem Bereich denjenigen Pfeil zu, der am besten passt. Wenn der Sensor noch nicht kalibriert ist, musst du zuerst die Kalibrierung durchführen.

 

Eigentlich müsstest du bei den Bereichsgrenzen auch auf die Gleichheit testen. Da der Sensor aber nur ganzzahlige Werte zurückgibt, kannst du darauf verzichten.

Program:

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) 
► Copy to clipboard

 

Minen suchen

Lege einen kleinen Magneten, wie du ihn für Memoboards finden kannst,  unter einen Kartondeckel. Den Magneten kannst du wie eine Mine auffassen, die man mit dem micro:bit als Minensucher auffinden muss. In deinem Programm leuchtet die mittlere LED umso heller, je näher das Board zur Mine kommt.

Du verwendest den Befehl compass.get_values(), der die Stärke des Magnetfeldes als ein Tupel mit den x-, y- und z-Komponenten zurückgibt.

 

Dann berechnest du den Betrag aus diesen drei Komponenten und skalierst ihn so, dass du einen Helligkeitswert zwischen 0 und 9 erhältst.

Program:

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)
    sleep(10)
► Copy to clipboard

 

Wasserstand messen

Deine Testanlage besteht aus einer Blumenvase und einem Magneten, der auf einem schwimmenden Korkzapfen befestigt ist. Mit drei Nägeln kannst du den Zapfen  so stabilisieren, dass sich der Magnet bei änderndem Wasserstand immer in der gleichen vertikalen Linie bewegt.

Aus der Messung des Betrages des Magnetfeldes erhältst du eine Information über die Höhe der Wassersäule.  Die willst sie in 3 Wasserstandsbereiche einteilen.

 

Am besten stellst du dir vor, dass sich das Gefäss in drei "Zuständen" befindet, die du mit der Variablen state erfasst, welche die Werte "high", "ok" und "low" annehmen kann. Aus dem skalierten Wert des Magnetfelds triffst du den Entscheid, ob sich der Zustand ändert.

Falls du keinen Sound zur Verfügung hast, kannst du auch eine andere Alarmanzeige realisieren.

 

 



Program:

from microbit import *
import math
import music

state = "ok"

while True:
    v = compass.get_values()
    b = math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2])
    z = int(b / 100000)
    if z >= 15 and state != "high":
        state = "high"
        print("->high")
    elif z >= 8 and z < 15 and state != "ok":
        state = "ok"
        print("->ok")
    elif z < 8 and state != "low":
        state = "low"
        print("->low")
    if state == "high":
        music.pitch(2000, 100)
    elif state == "low":
        music.pitch(500, 100)
    sleep(10)
    
► Copy to clipboard

 

 

NOTA BENE

 

Der Magnetfeldsensor kann im Zusammenhang mit Magneten oder zur Bestimmung der Himmelsrichtung als Kompasssensor verwendet werden. In dieser Anwendung muss er vor der ersten Verwendung kalibriert werden.

 

 

EXERCICES

 

 

1.

Baue einen "Pirouettenzähler": Jedes Mal wenn du dich mit dem micro:bit in der Hand einmal um deine eigenen Achse gedreht hast, wird eine weitere LED auf dem Display eingeschaltet.

Anleitung: Wenn sich der micro:bit dreht, liefert compass.heading() einen unregelmässigen Signalverlauf. 

Zum Zählen der Umläufe genügt ein einziger Schaltpegel nicht, sondern es müssen zwei Pegel definiert werden. Beim Überschreiten des oberen Pegels wird der Zähler erhöht und gleichzeitig aber das Zählen inaktiv gemacht. Erst beim Unterschreiten des unteren Pegels wird das Zählen wieder aktiviert.

2.

Berührungslose Umdrehungszähler (z.B. bei Rädern) verwenden oft einen Magneten, der bei jeder Umdrehung einmal vor einem Magnetfeldsensor vorbei läuft. Befestige ein Magnetchen (z.B. von einem Memoboards oder einem Magnetschnäpper) an einem Velorad und schreibe ein Programm, dass im Terminalfenster die Anzahl Umdrehungen ausschreibt. Wie lässt sich damit ein Kilometerzähler bauen?