Wir wollen die Raketenstarts möglichst detailliert vermessen und dokumentieren. Dazu können externe Sensoren (z.B. statische Kameras) verwendet werden, aber auch Nutzlast-Sensoren mit der Rakete mitfliegen. Werden die Daten nicht erst nach dem Flug ausgewertet, sondern während des Flugs an die Bodenstation übertragen, sprechen wir von Telemetrie.

Damit die Sensorik-Einheit die Landung übersteht und wie die SpaceX-Raketen wiederverwendet werden können, muss eine entsprechende Nutzlastverkleidung, eine Aufpralldämpfung oder ein Fallschirmsystem gebaut werden.

Sensoren

  • Bodenkamera
    • Stativ, Zeitlupenaufnahme…
  • Microbit:
    • Beschleunigungsmesser
    • Magnetometer (Kompass)
    • Interner Speicher zur Aufzeichnung.
  • Arduino
    • Höhenmesser

Microbit

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! Es wäre also gut, den Countdown für Kameras und die Onboard-Sensorik per Bluetooth zu synchronisieren.

collector.py
from microbit import *
import log
 
# Delete last log
log.delete()
# Define which columns we are going to log.
log.set_labels('ax', 'ay', 'az', 'mx', 'my', 'mz', timestamp=log.MILLISECONDS)
# The standard setting only allows accelerations up to 2g, we want 8g!
accelerometer.set_range(8)
 
def read_compass():
    return compass.get_x(), compass.get_y(), compass.get_z()
 
# Set the timer to log data every 20 milliseconds (50 measurements per second)
@run_every(ms=20)
def log_single_row():
    # TODO: do nothing unless countdown has started!
    accel = dict(zip(('ax', 'ay', 'az'), accelerometer.get_values()))
    bearing = dict(zip(('mx', 'my', 'mz'), read_compass()))
    accel.update(bearing)
 
    log.add(accel)
 
while True:
    # Needed so that the program doesn't end prematurely.
    sleep(100)

Altimeter

Wir haben einige BMP280 Höhenmesser von Adafruit. Diese lassen sich mit dieser Bibliothek einlesen.

Die bmp280.py Datei muss im Projekt im selben Ordner gespeichert werden wie die Hauptdatei. Dabei muss die I2C-Adresse in der Datei noch angepasst werden:

BMP280_I2C_ADDR = 0x77  # statt 0x76

In der Hauptdatei (main.py) kann die Höhe wie folgt ausgelesen werden:

import bmp280
sensor = bmp280.BMP280()
 
while True:
    sleep(500)
    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.

Mit der Data-Collection ist es aber noch nicht getan. Rohdaten müssen aggregiert (zusammengefasst), verknüpft und aufbereitet werden. Einschlägige Tools sind Excel, Google Sheets und Pandas.

Tabellenkalkulationen

Tabellenkalulationen wie Excel und Google Sheets sind gute Tools, um moderate Datenmengen zusammenzufassen oder zu visualisieren.

Beispiel: Eine Videoaufzeichnung des Wasserausstosses in Zeitlupe wird in Shotcut mit einer Stoppuhr überlagert. Anschliessend erfolgt das Auslesen des Wasserstands zu den verschiedenen Zeiten.

Fig. 1: 1l Wasser, 2bar, 1.67s
Elapsed [s] Remaining Water [liters]
0 1
0.3 0.5
0.74 0.3
0.87 0.2
1.24 0.1
1.76 0

In Google Sheets erfolgt die Visualisierung und die Auswertung mit Log-Trendlinie:

Fig. 2: Wasseraustoss

Pandas

Pandas eignet sich für grosse Datenmengen und professionelle, automatisierte Verarbeitung von vielen Datensätzen.

Beispiel, Dokumentation.

Für das Alignment der verschiedenen Sensor-Daten müssen die Zeitstempel synchronisiert werden und mit dem Countdown abgeglichen werden.

Bragging Rights gibts nur, wenn die Resultate (erreichte Flughöhe, maximale Flugzeit, Beschleunigung) auch ansprechend dargestellt und verständlich visualisiert werden.

  • mint_wochen/raketenbau/data.1768565479.txt.gz
  • Zuletzt geändert: 2026-01-16 12:11
  • von hof