STM32-Based Self-Balancing Robot
This project is my hands-on entry into embedded firmware development, writing bare-metal C for an STM32 (ARM Cortex-M) microcontroller using both HAL and Low-Layer drivers for direct control over peripheral registers, interrupts, and timing. I interfaced an MPU-6050 IMU over I2C to pull raw 6-axis accelerometer and gyroscope data, then implemented a real-time complementary filter to fuse the two into a stable tilt-angle estimate. Motor actuation runs through hardware PWM timers, with UART over USB-CDC providing live telemetry for debugging. I'm currently closing the loop: integrating an L298N dual H-bridge driver and tuning a discrete PID controller so the robot can actively balance itself.
Fusing sensor data into a stable balance, one control loop at a time.