TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
datenerfassung

11. DATENERFASSUNG

 

 

DU LERNST HIER...

 

wie du den Calliope 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 Calliope, der es mit einem Analog-Digital-Wandler (ADC) in eine digitale Zahl im Bereich 0 bis 1023 umwandelt. Verwendest du  P1 als Eingang, so liefert dir der Befehl pin1.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 P1.

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

 

 
from calliope_mini import *

t = 0
while True:
    v = pin1.read_analog()
    print("t = %4.1f v = %d" %(t, v)) 
    t += 0.1
    sleep(100)
► In Zwischenablage kopieren

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 Calliope eine Messserie "draussen im Feld" ohne Verwendung eines PCs aufnehmen kannst, schreibst du die Messwerte in eine Datei. Dazu musst du 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 calliope_mini 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 = pin1.read_analog()
        f.write("%4.1f; %d\n" %(t, v)) 
        t += 0.1
        sleep(100)
display.show(Image.NO)  
► In Zwischenablage kopieren

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 data.log 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 zum Starten den grünen Run-Button verwenden.

from mbm import *

extract('data.log')
 
Ausführen mit Run-Button:

Verwende irgendeinen Editor, um die Daten in der Datei data.log anzuschauen. Mit einer Tabellenkalkulation oder einem anderen Grafiktool (z.B. dem GPanel von TigerJython) kannst du sie grafisch darstellen. Hier ein passendes GPanel-Programm ViewData.py (Download: ViewData.zip) , welches du mit dem TigerJython-Editor mit Klick auf den grünen Run-Button ausführen kannst.

 

 

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 Fotowiderstand (Light Dependent Resistor, LDR), den du zusammen mit einem Widerstand von 1 kOhm in folgender Schaltung am Calliope 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.

def getPitch(a):
    pitch = atan2(a[1], a[2])
    return int(degrees(pitch))

def getRoll(a):
    anorm = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2])
    roll = asin(a[0] / anorm)
    return int(degrees(roll))