// ARM trigger -- re-zeros sensor at pad level at the last momentvoidhandleLaunchTrigger() {
isLaunched = true; maxRelativeAltitude = 0;
groundLevel = getSmoothedAltitude();
server.send(200, "text/plain", "OK");
}
// 200 ms background loopif (isLaunched && (millis() - lastLog > 200)) {
float current = getSmoothedAltitude() - groundLevel;
updateApoapsis(current);
logDataToSD(current, maxRelativeAltitude);
lastLog = millis();
}
dataFile.print(millis()); dataFile.print(",");
dataFile.print(alt, 2); dataFile.print(",");
dataFile.println(maxAlt, 2);
Live ground control dashboard
ROCKET GROUND CONTROL · SSID: Rocket-Monitor · PAD 1
LIVE FEED: PAD 1 · ESP32-CAM @ 192.168.4.2:81/stream
Current Altitude
47.3
155.2 ft
Apogee
312.8
1026.2 ft
What makes this non-trivial
All kinematics computed onboard, velocity and acceleration available in real-time during flight without any post-processing
10-sample rolling average removes barometric noise without meaningful lag at 5 Hz polling rate
ESP32 runs as its own WiFi access point, no router or infrastructure needed at the launch site
Dual independent logging: SD card raw CSV for post-flight Python analysis plus live JSON endpoint for dashboard, two failure modes, not one
ARM/launch trigger re-zeros the sensor at pad level at the last possible moment, eliminating drift from temperature and pressure changes during setup
Separate ESP32-CAM streams MJPEG at a different IP, integrated into the same dashboard, two processors, one ground control interface
Project 2 - avionics and power electronics
Avionics and Power Electronics — CU Sounding Rocket Laboratory (Spaceshot)
Altium Designer · STM32H723 (Cortex-M7) · I2C/CAN sensor bus · DC-DC power design · Six-sheet hierarchical schematic
Ongoing avionics work on the Spaceshot flight computer, a composite R-impulse solid rocket motor vehicle targeting 350,000+ ft apogee as part of a bid to be the second student rocketry organization in the world to reach space. Work spans sensor integration, power system redesign, protection circuitry, and multi-sheet schematic verification.
350,000+ ft
target apogee
6
sheets in hierarchical schematic
103x
pyro sense current margin below no-fire threshold
Sensor bus integration
Selected a Bosch BMM150 magnetometer for attitude determination and built its schematic symbol from the LGA-12 datasheet, assigning correct electrical pin types and package data
Configured the part for I2C via the PS protocol-select pin and strapped CSB/SDO for a unique address, verifying no collision against the five other devices already on the bus (BMI270, ADXL375, BMP390, NEO-M8U)
Initially routed to a dedicated I2C bus, then consolidated onto the existing multi-drop bus after design review, eliminating two nets and a redundant pull-up pair; broke out DRDY and INT to EXTI-capable pins
Power supply redesign
Replaced two TPS563300 buck converters (12V to 3.3V and 12V to 5V) with TPS62933F after evaluating four candidate parts against input voltage range, current rating, reference tolerance, package, and pin compatibility
Verified against the TI datasheet that six of eight pins were positionally identical, keeping the existing footprint and feedback dividers (0.8V reference unchanged)
Added required soft-start capacitors from existing BOM inventory and calculated the resulting 14.5 ms soft-start and 152 ms hiccup interval; selected the FCCM variant over PFM for a constant, predictable switching frequency across the sensor stack
Pyro continuity sensing
Designed continuity sense circuitry for both pyro channels, adapting the measurement concept from the team's igniter resistance meter and eliminating its isolation stage after determining the pyro and avionics domains share ground
Implemented a 100K/22K divider tapping the MOSFET drain node, giving a go/no-go reading distinguishable at the ADC between an intact e-match (~2.16V) and an open circuit (0V), sized to hold sense current near 98 μA
Added BAT54S dual-diode clamps to protect the ADC inputs against inductive transients from MOSFET switching, and specified extended ADC sampling time to accommodate the divider's ~18 kΩ source impedance
Schematic integration and verification
Diagnosed and resolved cross-sheet connectivity failures in a six-sheet hierarchical Altium project, identifying that ports required matching sheet entries on the parent sheet symbols
Worked through ERC violations across duplicate net names, pin-type mismatches, off-grid objects, unique-ID collisions, and orphaned nets to reach a clean compile
Verified netlist correctness through the design Navigator panel rather than relying on compiler output alone
Designed Hadamard and CNOT quantum logic gates implemented as Mach-Zehnder interferometer (MZI) architectures in silicon photonics. Simulated entirely in Synopsys RSoft using FDTD and eigenmode expansion, optimising coupling ratios and arm phase to achieve target unitary behaviour.
98%
match to target unitary
20%
gate efficiency gain
2
gates designed (H + CNOT)
RSoft gate layout
Full Hadamard gate layout in RSoft
Hadamard gate, closeup section view of coupling region
RSoft FDTD Hadamard gate state simulations
Each image shows the optical field intensity profile (top) and the corresponding launch power and phase plots (bottom) for a different Hadamard gate input state.
Hadamard gate state 1, asymmetric output, right arm dominant
Hadamard gate state 2, right arm dominant, oscillating phase
Hadamard gate state 3, single arm dominant, near-equal phase
Hadamard gate state 4, symmetric dual output
Project 4 - silicon photonics fabrication
Silicon Photonic Ring Resonators, Taped Out and Tested