kompass

8. MAGNETFELD- UND GYROSENSOR

 

 

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 get_x(), get_y() und get_z() kannst du die einzelnen Komponenten abfragen. Die Werte liegen zwischen -32768 und 32767.

from calliope_mini import *

while True:
    bx = magnetometer.get_x()
    by = magnetometer.get_y()
    bz = magnetometer.get_z()
    print(bx, by, bz)
    sleep(500)
► In Zwischenablage kopieren

 

 

MUSTERBEISPIELE

  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 Calliope als Minensucher auffinden muss. In deinem Programm leuchten alle LEDs umso heller, je näher das Board zur Mine kommt.

 

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.

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 = magnetometer.get_z()
    v = abs(bz // 3300)
    n = min(9, v)
    light(n)
    sleep(20) 
    
► In Zwischenablage kopieren

 

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 der z-Komponente des Magnetfeldes erhältst du eine Information über die Höhe der Wassersäule.  Du teilst sie in 3 Wasserstandsbereiche "zu hoch", "ok" und "lzu tief" .

 

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.

Mit Sound kannst du auch einen akustischen Alarm realisieren.

 

 



from calliope_mini import *
import music

state = "ok"

while True:
    z = magnetometer.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)
    
► In Zwischenablage kopieren

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.

Gyrometer verwenden

Der Gyrosensor misst die Rotationsgeschwindigkeit (Winkel pro Zeiteinheit, auch Winkelgeschwindigkeit genannt), im Gegensatz zum Lagesensor bleiben die Werte in der Nähe von Null, wenn sich der Calliope nicht mehr bewegt. Mit gyrometer.get_x(), gyrometer.get_y() und gyrometer.get_z() erhält man Werte im Bereich -32768 und 32767. Analog wie beim Minensuchen, werden alle LEDs heller, wenn die Rotationsgeschwindigkeit um die z-Achse grösser wird.

 

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)
► In Zwischenablage kopieren

 

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

 

 

 
1.

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?

 

 

 

 

8-2
Didaktische Hinweise:

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.