Projects
Everything I've built, from languages to games to tools. Click any project for details.
Tumble
activeCustom flight controller firmware on STM32. Reads IMU at 1kHz, runs complementary filter for attitude estimation, feeds PID loops for rate and angle control. Tuning interface over serial so I can adjust gains without reflashing.
- - 1kHz IMU read loop with complementary filter fusion
- - Cascaded PID: inner rate loop + outer angle loop
- - Real-time PID tuning over UART without reflashing
Canopy
activeESP32-based sensor nodes for greenhouse monitoring. Three nodes measure soil moisture, temperature, and light, then send readings over LoRa to a Raspberry Pi hub running an MQTT broker. Built a basic SvelteKit dashboard to see live data and set watering alerts.
- - 3 sensor nodes running ~2 weeks on 18650 batteries
- - LoRa radio with deep-sleep between 5-minute readings
Sigil
maintainedCustom keyboard firmware for RP2040-based split keyboards. Matrix scanning, layer switching, RGB underglow, and OLED status display. Written in Rust with embassy-rs for async on bare metal.
Tideline
maintainedArduino-based autopilot for a modified RC boat. Reads GPS and compass heading, computes bearing to next waypoint, and adjusts rudder servo via PD controller. Logs position to SD card for replay. Managed one clean lap of about 500m before the compass went haywire near the metal dock.
Drift
Two-wheeled inverted pendulum robot with an MPU6050 and NEMA 17 steppers. Got it to hold upright on flat ground for about 10 seconds at a time, but any bump or surface change sent it over. Eventually shelved it after the A4988 driver burned out.