- Notifications
You must be signed in to change notification settings - Fork64
Making an ESP32-based quadcopter from scratch
okalachev/flix
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Flix (flight + X) — making an open source ESP32-based quadcopter from scratch.
Version 1.1 (3D-printed frame) | Version 0 |
![]() | ![]() |
- Simple and clean Arduino based source code.
- Acro and Stabilized flight using remote control.
- Precise simulation using Gazebo.
- In-RAM logging.
- Command line interface through USB port.
- Wi-Fi support.
- MAVLink support.
- Control using mobile phone (with QGroundControl app).
- Completely 3D-printed frame.
- Textbook for students on writing a flight controller (in development).
- Position control and autonomous flights using external camera¹.
- Building and running instructions.
¹ — planned.
See detailed demo video (for version 0):https://youtu.be/8GzzIQ3C6DQ.
Version 1 test flight:https://t.me/opensourcequadcopter/42.
See theuser builds gallery.
The simulator is implemented using Gazebo and runs the original Arduino code:
Seeinstructions on running the simulation.
Type | Part | Image | Quantity |
---|---|---|---|
Microcontroller board | ESP32 Mini | ![]() | 1 |
IMU (and barometer²) board | GY‑91, MPU-9265 (or other MPU‑9250/MPU‑6500 board), ICM‑20948³ | ![]() ![]() | 1 |
Motor | 8520 3.7V brushed motor (shaft 0.8mm). Motor with exact 3.7V voltage is needed, not ranged working voltage (3.7V — 6V). | ![]() | 4 |
Propeller | Hubsan 55 mm | ![]() | 4 |
MOSFET (transistor) | 100N03A oranalog | ![]() | 4 |
Pull-down resistor | 10 kΩ | ![]() | 4 |
3.7V Li-Po battery | LW 952540 (or any compatible by the size) | ![]() | 1 |
Battery connector cable | MX2.0 2P female | ![]() | 1 |
Li-Po Battery charger | Any | ![]() | 1 |
Screws for IMU board mounting | M3x5 | ![]() | 2 |
Screws for frame assembly | M1.4x5 | ![]() | 4 |
Frame bottom part | 3D printed⁴:flix-frame-1.1.stl flix-frame-1.1.step | ![]() | 1 |
Frame top part | 3D printed:esp32-holder.stl esp32-holder.step | ![]() | 1 |
Washer for IMU board mounting | 3D printed:washer-m3.stl washer-m3.step | ![]() | 2 |
RC transmitter (optional) | KINGKONG TINY X8 (warning: lacks USB support) or other⁵ | ![]() | 1 |
RC receiver (optional) | DF500 or other⁵ | ![]() | 1 |
Wires | 28 AWG recommended | ![]() | |
Tape, double-sided tape |
² — barometer is not used for now.
³ — changeMPU9250
toICM20948
inimu.ino
file if using ICM-20948 board.
⁴ — this frame is optimized for GY-91 board, if using other, the board mount holes positions should be modified.
⁵ — you may use any transmitter-receiver pair with SBUS interface.
Tools required for assembly:
- 3D printer.
- Soldering iron.
- Solder wire (with flux).
- Screwdrivers.
- Multimeter.
Feel free to modify the design and or code, and create your own improved versions of Flix! Send your results to theofficial Telegram chat, or directly to the author (E-mail,Telegram).
Motor connection scheme:
You can see a user-contributedvariant of complete circuit diagram of the drone.
Seeassembly guide for instructions on assembling the drone.
Power ESP32 Mini with Li-Po battery using VCC (+) and GND (-) pins.
Connect the IMU board to the ESP32 Mini using VSPI, power it using 3.3V and GND pins:
IMU pin ESP32 pin GND GND 3.3V 3.3V SCL(SCK) SVP (GPIO18) SDA(MOSI) GPIO23 SAO(MISO) GPIO19 NCS GPIO5 Solder pull-down resistors to the MOSFETs.
Connect the motors to the ESP32 Mini using MOSFETs, by following scheme:
Motor Position Direction Wires GPIO Motor 0 Rear left Counter-clockwise Black & White GPIO12 (TDI) Motor 1 Rear right Clockwise Blue & Red GPIO13 (TCK) Motor 2 Front right Counter-clockwise Black & White GPIO14 (TMS) Motor 3 Front left Clockwise Blue & Red GPIO15 (TD0) Counter-clockwise motors have black and white wires and clockwise motors have blue and red wires.
Optionally connect the RC receiver to the ESP32's UART2:
Receiver pin ESP32 pin GND GND VIN VCC (or 3.3V depending on the receiver) Signal (TX) GPIO4⁶
⁶ — UART2 RX pin waschanged to GPIO4 in Arduino ESP32 core 3.0.
Default IMU orientation in the code isLFD (Left-Forward-Down):
In case of using other IMU orientation, modify therotateIMU
function in theimu.ino
file.
SeeFlixPeriph documentation to learn axis orientation of other IMU boards.
See the information on the obsolete version 0 in thecorresponding article.
Subscribe to the Telegram channel on developing the drone and the flight controller (in Russian):https://t.me/opensourcequadcopter.
Join the official Telegram chat:https://t.me/opensourcequadcopterchat.
Detailed article on Habr.com about the development of the drone (in Russian):https://habr.com/ru/articles/814127/.
About
Making an ESP32-based quadcopter from scratch