Flight Controller
I developed a custom flight controller in C++ using an Arduino Nano and MPU6050 IMU. The controller reads orientation and angular velocity from the IMU, along with throttle, roll, pitch, and yaw commands from the RC receiver. I implemented PID control for roll, pitch, and yaw stabilization, with motor mixing used to convert the controller outputs into individual motor commands.
The flight software communicates with the IMU over I2C and includes safety features such as throttle limiting and PID integrator resets at low throttle. The drone is currently undergoing flight testing and PID tuning, with a focus on achieving consistent roll and pitch stability. The current drone code can be found on my GitHub.
Mechanical Design

I designed the drone’s airframe in SolidWorks, with the frame geometry and component layout built around the motors, battery, and onboard electronics, and soldered the power distribution board as needed. Since motor and propeller vibrations can interfere with the IMU measurements used by the flight controller, I incorporated vibration-reduction measures into the airframe. This includes damping around the motors and secure mounting of the flight controller. The structural components were then 3D printed and assembled into the final airframe.
Future Development
The next version will move from Arduino to STM32 for increased processing capability and more flexible peripheral control. Planned improvements include:
- STM32-based flight controller
- Barometer-based altitude hold
- Improved state estimation
- Raspberry Pi for computer vision
- Autonomous flight capabilities