TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
sensor
deutsch   english   français

3. BESCHLEUNIGUNGSSENSOR

 

 

DU LERNST HIER...

 

wie du mit dem Beschleunigungssensor Lageänderungen und Bewegungen des micro:bit erfassen kannst.

 

 

SENSORWERTE

 

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. 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.

 

 

MUSTERBEISPIELE

 
Sensorwerte abfragen

Starte das unten stehende Programm, kippe den micro:bit bit ausgehend von der horizontalen Lage nach links bzw. nach rechts unten und beobachte dabei die Sensorwerte, die im Terminalfenster ausgeschrieben werden.

Im Programm fragst du einer Endlosschleife die Beschleunigung in x-Richtung alle 100 Millisekunden ab und schreibst sie mit print(acc) im Terminalfenster aus. Zudem zeigst du auf dem Display bei einem positiven Wert einen Links- und bei einem negativen Wert einen Rechtspfeil.
 

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)  
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Wasserwaage-Libelle

 
Der micro:bit soll wie eine Wasserwaage-Libelle funktionieren. Dabei verwendest du die Tatsache, dass die x- und y-Komponenten der Beschleunigungen ungefähr 0 sind, wenn sich das Board in waagrechter Lage befindet.
 

 


Es wird nur ein Pixel angezeigt, das sich je nach Neigung nach rechts, links, oben oder unten verschiebt. Ziel ist es, die Libelle so auszurichten, dass die mittlere LED leuchtet.

Im Programm verwendest du vier Bedingungen,  um den x- und y-Wert des Pixels zu bestimmen und löschst dann das Pixel bevor du das neue anzündest.

from microbit import *

x = 1
y = 1

while True:
    accX = accelerometer.get_x()
    accY = accelerometer.get_y() 
    if accX > 100 and x < 4:
        x += 1
    elif accX < -100 and x > 0:
        x -= 1
    elif accY > 100 and y < 4:
        y += 1
    elif accY < -100 and y > 0:
        y -= 1
    display.clear()
    display.set_pixel(x, y, 9)
    sleep(100)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MERKE DIR...

 

Mit dem Beschleunigungssensor kannst du die Bewegungen und die Lage des micro:bits erfassen. Meist werden die Sensorwerte in einer Messschleife regelmässig alle 10 - 100 Millisekunden abgefragt. Man nennt dies auch Pollen der Sensorwerte.

 

 

ZUM SELBST LÖSEN

 

 

1.
Ergänze das erste Beispiel so, dass auch die Drehung des micro:bits in der y-Richtung gemessen und mit den passenden Pfeilen Image.ARROW_N, bzw.Image.ARROW_S angezeigt wird.

2.

Durch Kippen des micro:bits sollen alle Pixel am Rand einzeln eingeschaltet werden.

 

 

3.

Du willst das "Schütteln" des micro:bits messen. Dazu holst du mit a = accelerometer.get_values() die Beschleunigungskomponenten, betrachtest aber nur den Betrag b der x- und  y-Komponenten, der sich wie folgt berechnet

b = √ a[0] * a[0] + a[1] * a[1]

a) Schreibe im Terminalfenster den Betrag in einer Endlosschleife 50x pro Sekunde aus.

b) Führe nach Start des Programm die Messungen nur während 1 Sekunde aus und schreibe das Maximum von b aus.

c) Schreibe das Maximum als Integer auf dem Display aus (als endlosen Scrolltext).
Anleitung: Um aus b einen Integer zu machen, verwendest du n = int(b). Für den Display musst du daraus mit s = str(n) einen String (Text) machen.

d) Mache daraus ein "Schüttelspiel", bei dem derjenige gewinnt, der am stärksten schüttelt. Die Messung soll aber erst beim Erscheinen das Zeichens > nach einer zufälligen Zeit von 3-6 Sekunden beginnen und man darf vorher nicht bereits schütteln.

 
     

 

 

 

3-1
Fachliche Hinweise:

Unter der Beschleunigung versteht man allgemein die Änderungsrate  der Geschwindigkeit, eindimensional also

wo v die Geschwindigkeit ist.

3-2
Fachliche Hinweise:

Aus den drei Beschleunigungskomponenten kannst du die Winkel Pitch und Roll berechnen. Starte das folgende Programm und kippe das Board seitwärts bzw. nach vorne und hinter. Im Terminalfenster werden die Drehwinkel in Grad ausgeschrieben.

from microbit import *
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))
   
while True:
    pitch = getPitch()
    roll = getRoll()
    print("p: " + str(pitch))
    print("r: " + str(roll))
    print()
    sleep(100)