TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
datenerfassung

10. DATENERFASSUNG

 

 

DU LERNST HIER...

 

wie du den micro:bit als Datenerfassungsgerät einsetzen kannst, das Messwerte aufnimmt und speichert (Datenlogger) und wie du nachher die Daten auf einen PC transferierst.

 

 

VERWENDUNG DES ANALOGEN EINGANGS

 

Um eine physikalische Grösse  zu erfassen und digital weiter zu bearbeiten, benötigst du einen Sensor, der den Messwert in eine Spannung umwandelt. Diese kann im Gegensatz zu einem digitalen Signal grundsätzlich beliebige Werte annehmen, deshalb spricht man von einem analogen Signal. Dieses legst du an einen Eingang des micro:bits, der es mit einem Analog-Digital-Wandler (ADC) in eine digitale Zahl im Bereich 0 bis 1023 umwandelt. Verwendest du  P0 als Eingang, so liefert dir der Befehl pin0.read_analog() den Messwert.

 

 

MUSTERBEISPIELE

 

 

Für deine ersten Versuche willst du untersuchen, wie gut deine Finger elektrisch leiten. Du berührst dazu mit dem Zeigefinger den Anschluss 3V und mit dem Mittelfinger den Anschluss P0.

Mit deinem Programm machst du alle 100 ms eine Messung und schreibst die aktuelle Zeit (in 1/10s) und den Messwert aus.

 

 
from microbit import *

t = 0
while True:
    v = pin0.read_analog()
    print("t = %4.1f v = %d" %(t, v)) 
    t += 0.1
    sleep(100)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Beim Ausscheiben verwendest du eine elegante Formatierungsangabe, damit die Werte auch gleich automatisch auf die gewünschte Stellenzahl gerundet werden. Dazu brauchst du im String Platzhalter, beispielsweise für eine Dezimalzahl %4.1f, was sagt, dass du ein Feld der Länge 4 mit einer Dezimalzahl (float) ausgeben willst, die auf 1 Kommastelle gerundet ist. %d ist ein Platzhalter für eine Ganzzahl. Die Werte selbst folgen dann nach dem String in einer Klammer, die mit % eingeleitet wird.

Damit du mit dem micro:bit eine Messserie "draussen im Feld" ohne Verwendung eines PCs aufnehmen kannst, schreibst du die Messwerte in eine Datei. Dazu musst du einfach mit open('data.log') eine Textdatei öffnen und mit f.write() Zeile um Zeile in die Datei schreiben. Die Felder t und v trennst du hier zweckmässigerweise mit einem Strichpunkt und die Feldbezeichner kannst du weglassen. Dabei darfst du aber das Zeilenendzeichen \n nicht vergessen. Durch Klick auf den Button A startest du die Datenaufnahme, die 10 s dauert.

from microbit import *

display.show(Image.SQUARE_SMALL) 
while not button_a.was_pressed():
    sleep(10)
display.show(Image.SQUARE) 

T = 10
with open('data.log', 'w') as f:
    t = 0
    while t < T:
        v = pin0.read_analog()
        f.write("%4.1f; %d\n" %(t, v)) 
        t += 0.1
        sleep(100)
display.show(Image.NO)  
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Kommst du vom Ausseneinsatz zurück, so willst du die Daten natürlich auf einen PC transferieren, um sie dort weiter zu bearbeiten. Du kannst dazu das Modul mbm von TigerJython verwenden, welches mit der Funktion extract() die Datei in das Verzeichnis, indem sich das Programm befindet, kopiert. Da es sich ja um ein Python-Programm handelt, das auf dem PC ausgeführt wird, musst du den grünen Run-Button und nicht etwa den schwarzen Download/Execute-Button klicken.

from mbm import *

extract('data.log')

Verwende irgendeinen Editor, um data.log zu öffnen. Du hast sicher Freude, dass alle draussen im Feld aufgenommenen Messwerte auf dem PC angekommen sind. Mit einer Tabellenkalkulation oder einem anderen Grafiktool (z.B. dem GPanel von TigerJython) kannst du sie grafisch darstellen.

 

 

MERKE DIR...

 

Ein Datenlogger konvertiert die physikalischen Messwerte in eine digitale Zahl und schreibt diese, meist versehen mit einem Zeitstempel (timestamp), in eine Datei.

 

 

ZUM SELBST LÖSEN

 

 

1.

Schreibe die Messwerte des Beschleunigungssensors in eine Datei und stelle den Verlauf grafisch dar. Nimm beispielsweise der Betrag der Beschleunigung während 2 Sekunden alle 20 Millisekunden auf. Damit kannst du sogar den freien Fall untersuchen.

2.
Du willst die Helligkeit erfassen. Beschaffe dir dazu im Elektronikhandel einen Lichtwiderstand (Light Dependent Resistor, LDR), den du zusammen mit einem Widerstand von 1 kOhm in folgender Schaltung am micro:bit anschliesst. Nimm beispielsweise den Helligkeitsverlauf während 10 s alle 0.1 s auf und stelle ihn grafisch dar.  

3.

Du kannst im Terminalfenster kontrollieren, ob das Schreiben in die Datei gelungen ist. Dazu tippst du beim Python-Prompt ein:
>>> from os import *
Jetzt stehen dir die Funktionen des Moduls os zur Verfügung. Mit
>>> listdir()
werden alle Dateien ausgeschrieben und mit
>>> size('data.log')
siehst du die Grösse der Log-Datei.

 

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)