Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/okalachev/flix
Making an ESP32-based quadcopter from scratch
https://github.com/okalachev/flix
arduino autopilot control-theory drone esp32 flight-control flight-controller mavlink quadcopter quadcopter-firmware uav
Last synced: 2 days ago
JSON representation
Making an ESP32-based quadcopter from scratch
- Host: GitHub
- URL: https://github.com/okalachev/flix
- Owner: okalachev
- Created: 2020-09-06T21:33:57.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-12-27T18:53:28.000Z (4 days ago)
- Last Synced: 2024-12-27T19:33:32.714Z (4 days ago)
- Topics: arduino, autopilot, control-theory, drone, esp32, flight-control, flight-controller, mavlink, quadcopter, quadcopter-firmware, uav
- Language: C++
- Homepage: https://t.me/opensourcequadcopter
- Size: 14 MB
- Stars: 339
- Watchers: 17
- Forks: 52
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Flix
**Flix** (*flight + X*) — making an open source ESP32-based quadcopter from scratch.
Version 1 (3D-printed frame)
Version 0
## 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:
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!**)||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|
|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:[email protected]), [Telegram](https://t.me/okalachev)).
## Schematics (version 1)
### Simplified connection diagram
Motor 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|VC (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):
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/.