Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| mint_wochen:raketenbau:data [2025-02-10 13:41] – [Sheets] hof | mint_wochen:raketenbau:data [2026-02-01 10:27] (aktuell) – [Data Visualization] hof | ||
|---|---|---|---|
| Zeile 14: | Zeile 14: | ||
| * Arduino | * Arduino | ||
| * Höhenmesser | * Höhenmesser | ||
| - | |||
| - | |||
| #### Microbit | #### Microbit | ||
| Zeile 24: | Zeile 22: | ||
| * [[https:// | * [[https:// | ||
| - | Einfache Datensammlung könnte wie folgt stattfinden. Achtung, der Microbit sammelt Daten, sobald er eingestellt wird, was blitzschnell den Speicher füllt. Für den Raketenbetrieb sollte die Datensammlung erst loslegen, wenn der Countdown beginnt! | + | Einfache Datensammlung könnte wie folgt stattfinden. Achtung, der Microbit sammelt Daten, sobald er eingestellt wird, was blitzschnell den Speicher füllt. Für den Raketenbetrieb sollte die Datensammlung erst loslegen, wenn der Countdown beginnt! |
| <code python collector.py> | <code python collector.py> | ||
| from microbit import * | from microbit import * | ||
| import log | import log | ||
| + | import time | ||
| + | |||
| + | # Logging will be mirrored on console. | ||
| + | log.set_mirroring(True) | ||
| + | # Define which columns we are going to log, and disable timestamps | ||
| + | log.set_labels(' | ||
| - | # Delete last log | ||
| - | log.delete() | ||
| - | # Define which columns we are going to log. | ||
| - | log.set_labels(' | ||
| # The standard setting only allows accelerations up to 2g, we want 8g! | # The standard setting only allows accelerations up to 2g, we want 8g! | ||
| accelerometer.set_range(8) | accelerometer.set_range(8) | ||
| - | def read_compass(): | + | START_TS = time.ticks_ms() # start timestamp |
| - | return compass.get_x(), | + | |
| # Set the timer to log data every 20 milliseconds (50 measurements per second) | # Set the timer to log data every 20 milliseconds (50 measurements per second) | ||
| @run_every(ms=20) | @run_every(ms=20) | ||
| def log_single_row(): | def log_single_row(): | ||
| - | # TODO: do nothing unless | + | # Timestamp in milliseconds since countdown |
| - | | + | |
| - | | + | accel = accelerometer.get_values() |
| - | | + | |
| - | log.add(accel) | ||
| while True: | while True: | ||
| - | | + | sleep(100) |
| - | | + | |
| </ | </ | ||
| #### Altimeter | #### Altimeter | ||
| - | Wir haben einige [[https://www.adafruit.com/ | + | Wir haben einige [[https://learn.adafruit.com/ |
| - | Die `bmp180.py` Datei muss im Projekt im selben Ordner gespeichert werden wie die Hauptdatei. | + | Die `bmp280.py` Datei muss im Projekt im selben Ordner gespeichert werden wie die Hauptdatei. |
| <code python> | <code python> | ||
| - | import | + | BMP280_I2C_ADDR = 0x77 # statt 0x76 |
| - | sensor = bmp180.BMP180() | + | </ |
| + | |||
| + | In der Hauptdatei (`main.py`) kann die Höhe wie folgt ausgelesen werden: | ||
| + | |||
| + | <code python> | ||
| + | import | ||
| + | sensor = bmp280.BMP280() | ||
| while True: | while True: | ||
| + | sleep(500) | ||
| print(sensor.Altitude()) | print(sensor.Altitude()) | ||
| </ | </ | ||
| - | Auf der Hardware-Seite müssen die vier Kontakte des Sensors mit 3V, GND sowie Pins 19 (SCL) und 20 (SDA) am Microbit verbunden werden. | + | Auf der Hardware-Seite müssen die vier Kontakte des Sensors mit 3V, GND sowie Pins 19 (SCL) und 20 (SDA) am Microbit verbunden werden. |
| - | ### Data Processing | + | |
| - | Mit der Data-Collection | + | |
| - | #### Sheets | + | |
| - | Spreadsheets wie Excel sind gute Tools, um moderate Datenmengen zusammenzufassen oder zu visualisieren. | + | |
| - | Beispiel: Eine Videoaufzeichnung des Wasserausstoss in Zeitlupe wird in Shotcut | + | <figure fig_label> |
| + | {{.:data: | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | |||
| + | ### Synchronisation | ||
| + | Ein Problem ist, dass mit dem obigen Code der Log-Speicher schnell voll ist. Weil aber die Befüllung und der Druckaufbau mehrere Minuten Zeit benötigen, kann es sein, dass der Speicher nicht für die eigentlichen Flugdaten reicht. | ||
| + | |||
| + | Es wäre gut, die Datenaufzeichnung erst mit dem Launch-Countdown | ||
| + | |||
| + | |||
| + | |||
| + | ### Data Processing | ||
| + | Mit der Data-Collection ist es aber noch nicht getan. Rohdaten müssen aggregiert (zusammengefasst), | ||
| + | #### Tabellenkalkulationen | ||
| + | Tabellenkalulationen wie Excel und Google Sheets sind gute Tools, um moderate Datenmengen zusammenzufassen oder zu visualisieren. | ||
| + | **Beispiel**: | ||
| <figure fig_label> | <figure fig_label> | ||
| Zeile 90: | Zeile 107: | ||
| | 1.76 | 0 | | | 1.76 | 0 | | ||
| - | In [[https:// | + | In [[https:// |
| <figure expulsion> | <figure expulsion> | ||
| {{: | {{: | ||
| < | < | ||
| </ | </ | ||
| - | |||
| #### Pandas | #### Pandas | ||
| Pandas eignet sich für grosse Datenmengen und professionelle, | Pandas eignet sich für grosse Datenmengen und professionelle, | ||
| - | [[https:// | + | [[https:// |
| {{: | {{: | ||
| Für das Alignment der verschiedenen Sensor-Daten müssen die Zeitstempel synchronisiert werden und mit dem Countdown abgeglichen werden. | Für das Alignment der verschiedenen Sensor-Daten müssen die Zeitstempel synchronisiert werden und mit dem Countdown abgeglichen werden. | ||
| - | |||
| - | |||
| ### Data Visualization | ### Data Visualization | ||
| Bragging Rights gibts nur, wenn die Resultate (erreichte Flughöhe, maximale Flugzeit, Beschleunigung) auch ansprechend dargestellt und verständlich visualisiert werden. | Bragging Rights gibts nur, wenn die Resultate (erreichte Flughöhe, maximale Flugzeit, Beschleunigung) auch ansprechend dargestellt und verständlich visualisiert werden. | ||
| - | {{:mint_wochen: | + | <figure diagram> |
| + | {{.:presentations:pasted:20260121-160920.png? | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <figure video1> | ||
| + | {{: | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <figure video2> | ||
| + | {{: | ||
| + | < | ||
| + | </ | ||
| - | {{: | ||