# Flix **Flix** (*flight + X*) — making an open source ESP32-based quadcopter from scratch.
Version 1 (3D-printed frame) Version 0
Flix quadcopter Flix quadcopter
## Features * Simple and clean Arduino based source code. * Acro and Stabilized flight using remote control. * Precise simulation using Gazebo. * [In-RAM logging](docs/log.md). * 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](https://quadcopter.dev)). * *Position control and autonomous flights using external camera¹*. * [Building and running instructions](docs/build.md). *¹ — planned.* ## It actually flies See detailed demo video (for version 0): https://youtu.be/8GzzIQ3C6DQ. Version 1 test flight: https://t.me/opensourcequadcopter/42. ## Simulation The simulator is implemented using Gazebo and runs the original Arduino code: Flix simulator See [instructions on running the simulation](docs/build.md). ## Components (version 1) |Type|Part|Image|Quantity| |-|-|:-:|:-:| |Microcontroller board|ESP32 Mini||1| |IMU (and barometer²) board|GY‑91 (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 or [analog](https://t.me/opensourcequadcopter/33)||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.stl`](docs/assets/flix-frame.stl) [`flix-frame.step`](docs/assets/flix-frame.step)||1| |Frame top part|3D printed:
[`esp32-holder.stl`](docs/assets/esp32-holder.stl) [`esp32-holder.step`](docs/assets/esp32-holder.step)||1| |Washer for IMU board mounting|3D printed:
[`washer-m3.stl`](docs/assets/washer-m3.stl) [`washer-m3.step`](docs/assets/washer-m3.step)||1| |*RC transmitter (optional)*|*KINGKONG TINY X8 or other⁵*||1| |*RC receiver (optional)*|*DF500 or other⁵*||1| |Wires|28 AWG recommended||| |Tape, double-sided tape|||| *² — barometer is not used for now.*
*³ — change `MPU9250` to `ICM20948` in `imu.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 the [official Telegram chat](https://t.me/opensourcequadcopterchat), or directly to the author ([E-mail](mailto:okalachev@gmail.com), [Telegram](https://t.me/okalachev)). ## Schematics (version 1) ### Simplified connection diagram Flix version 1 schematics Motor connection scheme: MOSFET connection scheme Complete diagram is Work-in-Progress. ### Notes * 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| |Motor 1|Rear right|Clockwise|Blue & Red|GPIO13| |Motor 2|Front right|Counter-clockwise|Black & White|GPIO14| |Motor 3|Front left|Clockwise|Blue & Red|GPIO15| 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|GPIO4⁶| *⁶ — UART2 RX pin was [changed](https://docs.espressif.com/projects/arduino-esp32/en/latest/migration_guides/2.x_to_3.0.html#id14) to GPIO4 in Arduino ESP32 core 3.0.* ### IMU placement Default IMU orientation in the code is **LFD** (Left-Forward-Down): GY-91 axes In case of using other IMU orientation, modify the `rotateIMU` function in the `imu.ino` file. See [FlixPeriph documentation](https://github.com/okalachev/flixperiph?tab=readme-ov-file#imu-axes-orientation) to learn axis orientation of other IMU boards. ## Version 0 See the information on the obsolete version 0 in the [corresponding article](docs/version0.md). ## Materials 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/.