Table of Contents

M.U.S.C.A.

Introducere

Ce face proiectul: M.U.S.C.A. (Modular Uncrewed Self-Controlled Aircraft) este o drona cu 4 motoare controlata autonom prin intermediul unui ESP-32. In etapa curenta de dezvoltare, sistemul va fi capabil sa decoleze si sa efectueze un zbor la punct fix pentru un interval fixat de timp.

Scopul proiectului: Scopul este implementarea si validarea unui sistem de control pentru drone pe un microcontroller, pentru a fi folosit in urmatoarele etape de dezvoltare a proiectului.

Care a fost ideea: Ideea de la care am pornit a fost ca dronele existente de obicei au o arhitectura optimizata pentru un scop anume (cinema, militar, etc). Implementarea curenta este concentrata pe sistemul de control al dronei, scopul fiind obtinerea unui zbor stabil.

De ce este util: Proiectul propune o arhitectura de tip modular, ce le permite utilizatorilor sa schimbe payload-ul transportat de drona, folosind astfel o singura drona pentru multiple activitati, reducand astfel costurile necesare testarii unei varietati de modele diferite. In implementarea curenta, proiectul demonstreaza capacitatea de zbor stabil.

Descriere generală

Proiectul este construit pe baza unui microcontroller ESP-32, responsabil de a citi datele de la senzori, a calcula parametrii de zbor pentru drona si de a actiona motoarele.

Module: - o baterie LiPo 3s1p 2.1Ah (12V, 30C), din care sunt alimentate motoarele - 4 Motoare BLDC A2212, fiecare putand genera ~700g de thrust la capacitate maxima - 4 ESC-uri de 30A, fiecare primind semnal de la microcontroller prin GPIO si controland individual cate un motor - ICM-20602 este accelerometrul folosit pentru a determina inclinarea si acceleratia dronei, comunicand cu microcontroller-ul prin SPI - VL53L0X este un senzor de ToF, folosit pentru a estima distanta dronei pana la sol, care comunica cu microcontroller-ul prin IIC.

Hardware Design

Software Design

Mediu de dezvoltare

Firmware-ul a fost dezvoltat folosind PlatformIO (extensie VS Code), cu framework-ul Arduino pentru ESP-32. Configuratia proiectului se gaseste in platformio.ini, unde sunt specificate viteza de clock a CPU-ului (80 MHz), viteza flash-ului (40 MHz) si dependintele de biblioteci.

Biblioteci si surse 3rd-party

Algoritmi implementati

1. Citirea accelerometrului (SPI burst read)

La fiecare iteratie a buclei principale, microcontroller-ul initiaza o tranzactie SPI si citeste in mod secvential 6 octeti incepand de la registrul ACCEL_XOUT_H (0x3B), cu bitul de citire setat (OR 0x80). Cei 6 octeti reprezinta valorile brute pe 16 biti ale acceleratiei pe axele X, Y si Z.

2. Calculul unghiurilor de inclinare (pitch si roll)

Din valorile brute ale accelerometrului se calculeaza unghiurile de inclinare ale dronei folosind functia atan2:

roll  = atan2(ay, az) * 180 / PI
pitch = atan2(-ax, sqrt(ay*ay + az*az)) * 180 / PI

Aceste formule ofera o estimare stabila a inclinarii in conditii de acceleratie dominata de gravitatie.

3. Algoritm de control proportional (P-controller)

Semnalul PWM de baza pentru toate motoarele este de 1300 µs. Fiecare motor primeste o corectie proportionala cu unghiurile de pitch si roll, cu gainul kp = 4.0 pe ambele axe. Semnalele sunt calculate astfel incat fiecare motor sa compenseze inclinarea in directia sa:

Motor Formula semnal PWM
Fata-Stanga base + kp*(−pitch) + kr*roll
Fata-Dreapta base + kp*(−pitch) + kr*(−roll)
Spate-Stanga base + kp*pitch + kr*roll
Spate-Dreapta base + kp*pitch + kr*(−roll)

Semnalele sunt limitate (clamp) la intervalul [1000, 1500] µs pentru a nu depasi 50% din turatia maxima in aceasta faza de testare.

4. Failsafe

Daca unghiul de pitch sau roll depaseste 60°, sistemul intra in modul failsafe si trimite semnal de 1000 µs (oprire) tuturor motoarelor, prevenind un accident in caz de inclinare extrema.

5. Sincronizare non-blocking

Bucla principala ruleaza fara delay-uri blocante, folosind timestamp-uri (millis()):

Surse si functii implementate

Rezultate Obţinute

In urma dezvoltarii proiectului, zborul propriu-zis nu a putut fi testat din cauza defectarii a doi senzori cheie pe parcursul lucrarilor: senzorul de distanta VL53L0X (ToF) si senzorul de monitorizare a curentului INA226. Fara senzorul ToF, sistemul nu are informatie despre altitudine, deci nu poate stabiliza drona pe verticala. Fara INA226, nu exista protectie la supracurent in software.

In schimb, a fost realizata si validata o simulare de zbor pe banc, in care drona este tinuta fixata si se testeaza raspunsul sistemului de control:

Concluzii

Proiectul a demonstrat ca un controller proportional de baza pentru stabilizarea unei drone poate fi implementat si validat pe un microcontroller ESP-32, chiar si in absenta unui zbor real. Logica de control raspunde corect la variatiile de inclinare, ceea ce confirma ca arhitectura software este functionala.

Principala lectie invatata este legata de robustetea hardware: senzorii periferici sunt vulnerabili in contextul unui sistem alimentat la 12V cu motoare BLDC, iar izolarea galvanica sau protectia la supratensiune pe liniile de semnal sunt necesare intr-o iteratie viitoare.

Ca directii de continuare:

Download

pm-musca.zip — arhiva cu sursele firmware (src/main.cpp, platformio.ini) si schemele hardware ale proiectului.

Jurnal

Bibliografie/Resurse

- datasheet motor A2212: https://cdn.robotshop.com/rbm/a00a7635-653b-4220-aac9-b0c23c5c5e2c/5/520795f9-301f-4e66-a0a3-019811d1f78b/222c434c_a2212-brushless-motor.pdf

- datasheet accelerometru: https://bluerobotics.com/wp-content/uploads/2022/05/ICM20602-DATASHEET.pdf

- datasheet senzor ToF: https://cdn-learn.adafruit.com/downloads/pdf/adafruit-vl53l0x-micro-lidar-distance-sensor-breakout.pdf