Project 33

Architecture

Project 33 is split into four subsystems: the airframe/CAD package, the rocket flight computer, the launcher ground station, and the Python dashboard.

flowchart LR
    Dashboard[Python telemetry dashboard] <-->|UDP 4444 over launcher AP| Launcher[Launcher ESP32]
    Launcher <-->|UART2 115200| Rocket[Rocket ESP32 flight computer]
    Rocket --> MPU[MPU6050 IMU]
    Rocket --> Canards[Four canard servos]
    Rocket --> Ignition[Ignition servo]
    Launcher --> GPS[GPS]
    Launcher --> Compass[QMC5883L compass]
    Launcher --> Barometer[BMP180 barometer]
    Launcher --> Interlocks[Arm switch, launch button, LED, buzzer]

Responsibilities

Subsystem Responsibility Main files
Rocket flight computer IMU roll integration, PID output, canard servo control, rocket-side arming, ignition acknowledgement, RAM ring-buffer log dump Firmware/Rocket/src/main.cpp
Launcher ground station WiFi AP, dashboard UDP link, UART relay to rocket, GPS/barometer/compass telemetry, physical launch interlock Firmware/Launcher/src/main.cpp
Dashboard Live plot, PID tuning commands, launch/calibration commands, automatic CSV logging, graph export, PID comparison, onboard log dump request Firmware/dashboard.py, Firmware/telemetry_log.py, Firmware/analyze_pid.py, Firmware/session_artifacts.py
Protocol reference Generates firmware protocol constants and Markdown docs from one JSON source protocol/project33_protocol.json, tools/generate_protocol.py
Simulation/CAD OpenRocket stability model, CAD packages, airfoil generation script, CAD render/material notes Simulation/, CAD Files/, docs/CAD_ASSEMBLIES.md

Launcher State Machine

stateDiagram-v2
    [*] --> SAFE
    SAFE --> ARMING: arm switch active
    ARMING --> READY: rocket READY received
    ARMING --> SAFE: timeout or switch reset
    READY --> IGNITING: physical hold or explicitly enabled dashboard launch
    READY --> SAFE: switch reset or heartbeat timeout
    IGNITING --> SAFE: rocket IGNITED ack or timeout

Safety behavior:

Rocket State Machine

stateDiagram-v2
    [*] --> IDLE
    IDLE --> ARMED: ARM (IMU healthy)
    ARMED --> IGNITING: IGNITE and deploy flag set
    ARMED --> ARMED: IGNITE without deploy flag / CMD_REJECT:ignite_fins_not_deployed
    IGNITING --> FLIGHT: 2.5 second ignition servo window complete
    FLIGHT --> FLIGHT: stabilization loop

Safety behavior:

Bench Evidence Flow

The dashboard owns per-session evidence capture. Each run creates a local session folder containing raw CSV telemetry, an exported graph, a PID comparison report, and a summary. If live telemetry drops, the dashboard can request the rocket RAM ring buffer with dumplog; the launcher forwards the request as DUMPLOG and relays LOG rows back to the dashboard.

Evidence Architecture

flowchart LR
    Records[evidence/*.json<br>claims, requirements, predictions,<br>measurements, sessions, discrepancies] --> Validate[Structural validation<br>refuses promotion]
    Artifacts[Cited artifacts<br>source, model outputs, tests] --> Evaluate
    Validate --> Evaluate[Requirement evaluation<br>drift, freshness, support level]
    Evaluate --> Packet[Portable review packet<br>scoped verification]
    Evaluate --> Docs[Generated passports,<br>traceability, fragments]
    Session[Dashboard raw session] --> Passport[Session passport<br>audit + declaration] --> Human{Named human<br>accepts?} --> Records

The Evidence Observatory is a separate standard-library package with no network or command-transport dependency. It reads committed files or completed captures and writes review packets; it never talks to firmware. A successful check cannot change an evidence class, accept a session, or approve hardware readiness.

Clock Domains

Live T packets are stamped with the launcher’s millis() when it relays a rocket DATA line; DATA carries no rocket timestamp. Recovered LOG rows carry the rocket’s millis() at sample time. The two clocks are never mixed in timing statistics (D-018).

Protocol Reference

The canonical wiring reference lives in WIRING.md. Message constants live in protocol/project33_protocol.json and generate both PROTOCOL.md and Firmware/shared/Project33Protocol.h.