Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
phtg:bp:ch3 [2024-05-15 09:03] – hof | phtg:bp:ch3 [2024-05-28 19:23] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
# Data Processing | # Data Processing | ||
- | ## Data Collection | + | Um unsere Batterie auszumessen müssen wir zweierlei tun: |
- | Keine Batterie hält ewig - nun möchten wir wissen, wie lange unsere Batterie Strom liefert, und wieviel Energie wir praktisch nutzen konnten, bis sie leer ist. Aus der Physik wissen wir, dass $Spannung\cdot{}Strom$ die Leistung unserer Batterie (bzw. die Leistungsaufnahme der Leuchte) ergibt. Wenn wir die Leistung über die ganze Lebensdauer unseres Systems aufzeichnen, | + | * Die Spannung |
+ | * Die Messdaten auswerten und darstellen: [[phtg: | ||
- | ### Ziel | + | ## Lernjob-Produkte |
- | Schreibe Python-Code wie folgt. Falls die nötigen Python-Kenntnisse noch nicht vorhanden sind, folgst du den untenstehenden Tutorials. | + | |
- | * Datei `batterie.csv` im Schreibmodus öffnen. | + | * Teile deine Tabelle |
- | * Eine Schleife ausführen, die alle zehn Sekunden die Strom- und Spannungswerte ausliest. | + | |
- | * Für jede Lesung wird eine Zeile (en. _record_) in die Datei geschrieben im folgenden Format: | + | |
- | + | ||
- | `< | + | |
- | * also zum Beispiel (für eine Messung von $U = 1.37V$ und $I = 300mA$): | + | ## Challenge-Produkt |
- | + | * Füge die Diagramme | |
- | `2024-06-13 14: | + | |
- | + | ||
- | <nodisp 0> | + | |
- | ++++Lösung| | + | |
- | <code python> | + | |
- | from datetime import datetime | + | |
- | import time | + | |
- | from gdx import gdx | + | |
- | + | ||
- | gdx = gdx.gdx() | + | |
- | + | ||
- | gdx.open(connection=' | + | |
- | gdx.select_sensors() | + | |
- | gdx.start() | + | |
- | + | ||
- | interval = 10 | + | |
- | with open(' | + | |
- | | + | |
- | | + | |
- | + | ||
- | while True: | + | |
- | timestamp = datetime.now() | + | |
- | measurements = gdx.read() | + | |
- | if measurements == None: | + | |
- | break | + | |
- | voltage = measurements[0] | + | |
- | current = measurements[1] | + | |
- | + | ||
- | # Wir messen, bis die Spannung unter 0.05V fällt | + | |
- | if voltage < 0.05: | + | |
- | break | + | |
- | + | ||
- | line = f' | + | |
- | outfile.write(line) | + | |
- | + | ||
- | time.sleep(interval) | + | |
- | + | ||
- | gdx.stop() | + | |
- | gdx.close() | + | |
- | </ | + | |
- | ++++ | + | |
- | </ | + | |
- | + | ||
- | ### Tutorials | + | |
- | #### Python: Sensoren auslesen | + | |
- | + | ||
- | Einmalig muss in Python die `godirect` Bibliothek installiert werden ([Anleitung](https:// | + | |
- | <code bash> | + | |
- | pip3 install godirect | + | |
- | </ | + | |
- | + | ||
- | Anschliessend hat Python Zugriff auf die verwendeted _godirect_ Sensoren. Der folgende Code liest 5 Messwerte vom via USB angeschlossenen Sensor und gibt sie auf der Konsole aus: | + | |
- | + | ||
- | <code python> | + | |
- | from gdx import gdx | + | |
- | gdx = gdx.gdx() | + | |
- | + | ||
- | gdx.open(connection=' | + | |
- | gdx.select_sensors() | + | |
- | gdx.start() | + | |
- | + | ||
- | for i in range(5): | + | |
- | measurements = gdx.read() | + | |
- | if measurements == None: | + | |
- | break | + | |
- | print(measurements) | + | |
- | + | ||
- | gdx.stop() | + | |
- | gdx.close() | + | |
- | </ | + | |
- | + | ||
- | ##### Aufgabe | + | |
- | Schliesse deinen Spannungs-Sensor an und führe obigen Code aus. Die gemessene Spannung sollte nahe bei null sein. | + | |
- | + | ||
- | #### Python: Datei Ein- und Ausgabe | + | |
- | + | ||
- | Wie lesen wir Daten in einer Text-Datei? | + | |
- | + | ||
- | <code python> | + | |
- | # Opens a file for writing (and closes it again after the ' | + | |
- | with open(' | + | |
- | for i in range(10): | + | |
- | line = 'Zeile ' + str(i) + ' | + | |
- | outfile.write(line) | + | |
- | </ | + | |
- | + | ||
- | Beachte: | + | |
- | * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, | + | |
- | * Die Datei (hier ' | + | |
- | * `' | + | |
- | * `str()` verwandelt die Zahl in einen Text. | + | |
- | * `' | + | |
- | + | ||
- | ##### Aufgabe | + | |
- | Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben.. | + | |
- | . | + | |
- | #### Python: Schlafen | + | |
- | Wir wollen nur alle zehn Sekunden einen neuen Record schreiben, aber der Computer ist viel schneller. Zwischen den Messungen schlafen wir also: | + | |
- | + | ||
- | <code python> | + | |
- | import time | + | |
- | duration = 5 | + | |
- | print(f' | + | |
- | time.sleep(duration) | + | |
- | print(' | + | |
- | </ | + | |
- | + | ||
- | ##### | + | |
- | + | ||
- | Führe den obigen Code aus. Ändere ihn so ab, dass der Schlaf nur noch $2.5s$ dauert! | + | |
- | #### Python: Zeitstempel formatieren | + | |
- | + | ||
- | Zeitstempel können aus der `datetime` Bibliothek geholt werden: | + | |
- | + | ||
- | <code python> | + | |
- | from datetime import datetime | + | |
- | + | ||
- | print(datetime.now()) | + | |
- | </ | + | |
- | + | ||
- | Mit Python f-Strings können mehrere Argumente praktisch in einen String gepackt werden: | + | |
- | + | ||
- | <code python> | + | |
- | from datetime import datetime | + | |
- | timestamp = datetime.now() | + | |
- | planet = ' | + | |
- | magnitude = ' | + | |
- | print(f' | + | |
- | </ | + | |
- | + | ||
- | ##### | + | |
- | + | ||
- | Ändere den Code so ab, dass eine _small_ disturbance auf dem Planet _Coruscant_ rapportiert wird. | + | |
- | + | ||
- | (Du weisst nicht, was mit _Alderaan_ oder _Coruscant_ gemeint ist? -> [[wpde> | + | |
- | #### CSV-Format | + | |
- | Unsere Log-Datei ist im [[wpde> | + | |
- | + | ||
- | Oft werden in der ersten Zeile die Namen der abgespeicherten Werte festgelegt: | + | |
- | + | ||
- | <code csv> | + | |
- | Zeitstempel, | + | |
- | 2024-06-13 14: | + | |
- | 2024-06-13 14: | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | ##### Aufgabe | + | |
- | + | ||
- | Schreibe Code, der drei Zeilen ähnlich wie oben in eine CSV-Datei schreibt. Verwende f-Strings um die drei Werte auszugeben. | + |