Projects
Filter by tool or skill. Every writeup follows the same structure: what it is, how it's built, what went wrong, and what came out of it.
-
SRM-CAM: a CAM tool for milling PCBs on a Roland SRM-20
A desktop CAM application that turns KiCad Gerbers into machine code for a Roland SRM-20 mill — with auto bed-leveling, double-sided registration, and a reverse-engineered SPI probe interface.
-
REGBOT Balance: cascaded frequency-domain control for a self-balancing robot
A four-loop cascade controller that balances DTU's REGBOT two-wheeled robot and drives it to a target — designed in MATLAB with the frequency-domain phase-balance method, verified on a non-linear Simscape Multibody model, and validated on the real robot.
-
VLF Metal Detector: induction-balance sensing with real-time DFT phase detection
A very-low-frequency induction-balance metal detector built on an ATmega328P. A single-bin DFT reads the phase of the received-coil signal in real time to tell ferrous from non-ferrous metal, driven by an H-bridge transmitter and a concentric bucking-coil head.
-
KiCad-Autoplace: connectivity-aware auto-placement & routing for KiCad
A desktop app that takes a prepared KiCad board — outline, locked parts, ground pours — generates and scores several placement candidates, refines the winner, and routes it with FreeRouting, handing back a finished, fab-ready .kicad_pcb. Built for the students at DTU Ballerup — and used to mill real boards.
-
ESP32 reflow hotplate, designed from scratch
A 24 V DC SMD reflow hotplate built around an ESP32 and a CNC-milled control board — with a unit-tested PID core, a layered safety watchdog, and copper sized by IPC-2221 for 13 A.
-
Reverse-engineering the Korad KD3005D bench supply
Finding and decoding a bench PSU's hidden UART with a logic analyzer, catching a floating-ground hazard with a multimeter before it destroyed hardware, and designing an isolation-safe ESP32 carrier board around it.
-
A 22-mode digital multimeter on bare-metal AVR
A from-scratch benchtop multimeter — DC/AC volts and current, resistance, capacitance, frequency, and a basic scope mode — built on an ATmega2560 with no Arduino framework, plus a fully documented KiCad design.
-
IR remote wizard: ESP32 firmware + a code-discovery add-on
A standalone ESP32 IR blaster written as a proper ESPHome component, paired with a Home Assistant add-on that discovers IR codes from the Flipper-IRDB database — where most of the work was getting IR protocol encoding right.
-
Pi Zero Spotify streamer with a PWM-to-audio filter
An early project: turning a Raspberry Pi Zero into a Spotify Connect endpoint by filtering its PWM audio output through a Sallen-Key analog stage — measured, not guessed.
-
Componentbot: a grounded local-LLM assistant for the parts shop
A small offline tool that answers "do we have this component?" in natural language — a local Llama model grounded on the DTU shop's real inventory so it only ever recommends parts that are actually in stock.
-
A soft microprocessor in VHDL (DTU 62711)
A working 16-bit soft microprocessor built up over three phases on a Nexys 4 DDR FPGA — ALU and datapath, a microprogrammed controller, then the full system with RAM, a port register, and a seven-segment driver, running assembled microcode programs on real hardware.
-
Oscilloscope & signal generator (FPGA + MCU + LabVIEW)
A full-stack instrument for DTU 30082: an ATmega2560 samples analog waveforms and streams them to a LabVIEW GUI over a framed UART protocol, while the same link commands a Basys 2 FPGA signal generator over SPI to synthesise waveforms through PWM and an active filter.
-
FPGA calculator in VHDL (Basys 2)
A programmable two-stage calculator implemented in VHDL on a Basys 2 FPGA: three 8-bit inputs and two operators drive an FSM through add, subtract, multiply, and a custom sequential-division component, with results on the seven-segment display.