skip to content

Projects

Everything I've built, from languages to games to tools. Click any project for details.

Tumble

active

Custom 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
CSTM32FreeRTOS
2026

Canopy

active

ESP32-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
C++ESP32SvelteKitMQTT
2026

Sigil

maintained

Custom 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.

RustRP2040embassy-rs
2025

Tideline

maintained

Arduino-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.

C++ArduinoGPS
2025

Drift

archived

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.

C++ArduinoMPU6050
2025