TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
Deutsch English |
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 |
|
|
from microbit import * t = 0 while True: v = pin0.read_analog() print("t = %4.1f v = %d" %(t, v)) t += 0.1 sleep(100) 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) 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 |
|
Unter der Beschleunigung versteht man allgemein die Änderungsrate der Geschwindigkeit, eindimensional also
wo v die Geschwindigkeit ist.
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)