Skip to content

okalachev/flix

Repository files navigation

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.
  • 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.

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.

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 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 flix-frame.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
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, or directly to the author (E-mail, Telegram).

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 VC (or 3.3V depending on the receiver)
    Signal GPIO4⁶

⁶ — UART2 RX pin was changed 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 to learn axis orientation of other IMU boards.

Version 0

See the information on the obsolete version 0 in the corresponding article.

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/.