Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:bianca.popa1106:nicolae.macovei1412 [2026/05/08 04:13]
nicolae.macovei1412 created
pm:prj2026:bianca.popa1106:nicolae.macovei1412 [2026/05/25 06:20] (current)
nicolae.macovei1412
Line 1: Line 1:
-=== test 3 === +====== M.U.S.C.A. ====== 
-== test 2 == + 
 +===== 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. 
 + 
 +{{:​pm:​prj2026:​bianca.popa1106:​block_diagram_cristian_macovei_332ca.png|}} 
 + 
 +===== Hardware Design ===== 
 + 
 +{{:​pm:​prj2026:​bianca.popa1106:​circuit_cristian_macovei_332ca.png?​500|}} 
 + 
 +===== 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 ==== 
 + 
 +  * **Arduino SPI** (built-in) — comunicatie cu accelerometrul ICM-20602; configurat la 1 MHz, MSB first, SPI Mode 3 
 +  * **Arduino Wire** (built-in) — linie IIC disponibila pentru senzorul ToF VL53L0X (neutilizata in implementarea curenta) 
 +  * **ESP32Servo** (''​madhephaestus/​ESP32Servo@^3.0.5''​) — generare semnale PWM pentru controlul ESC-urilor; foloseste timer hardware dedicat si permite setarea perioadei la 50 Hz si a pulsului in microsecunde 
 +  * **INA226** (''​robtillaart/​INA226@^0.5.2''​) — biblioteca pentru senzorul de monitorizare a tensiunii/​curentului de pe magistrala de alimentare; senzorul fizic nu mai este functional, codul aferent este comentat 
 + 
 +==== 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'':​ 
 + 
 +<​code>​ 
 +roll  ​atan2(ay, az) * 180 / PI 
 +pitch atan2(-ax, sqrt(ay*ay + az*az)) * 180 / PI 
 +</​code>​ 
 + 
 +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()''​):​ 
 +  * semnalele PWM catre ESC-uri sunt actualizate la **50 Hz** (la fiecare 20 ms) 
 +  * telemetria seriala (roll, pitch, semnale motoare) este afisata la **5 Hz** (la fiecare 200 ms) 
 + 
 +==== Surse si functii implementate ==== 
 + 
 +  * ''​spi_write(byte reg, byte data)''​ — scrie un octet intr-un registru al IMU-ului prin SPI 
 +  * ''​clip(float raw, float min, float max)''​ — limiteaza o valoare in intervalul [min, max] 
 +  * ''​setup()''​ — initializeaza comunicatia SPI, scoate IMU-ul din sleep (''​PWR_MGMT_1 = 0x00''​),​ configureaza si armeaza cele 4 ESC-uri (semnal 1000 µs timp de 10 secunde pentru procedura de armare) 
 +  * ''​loop()''​ — bucla principala: citeste accelerometrul,​ calculeaza pitch/roll, calculeaza semnalele PWM pentru fiecare motor, scrie semnalele catre ESC-uri si afiseaza telemetria pe UART 
 + 
 +===== 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: 
 + 
 +  * Accelerometrul ICM-20602 citeste corect datele prin SPI si calculeaza unghiurile de pitch si roll in timp real 
 +  * La inclinarea manuala a placii (tilt), motoarele de pe partea ridicata cresc turatia, iar cele de pe partea coborata o reduc, ceea ce reprezinta comportamentul corect al unui controller proportional pentru stabilizare 
 +  * Mecanismul de failsafe functioneaza:​ la inclinari mai mari de 60° pe orice axa, toate motoarele sunt oprite imediat 
 +  * Semnalele PWM sunt generate stabil la 50 Hz catre toate cele 4 ESC-uri 
 +  * Telemetria seriala afiseaza in timp real valorile de roll, pitch si semnalele trimise fiecarui motor 
 + 
 +===== 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:​ 
 +  * Inlocuirea senzorilor defecti si validarea zborului real 
 +  * Adaugarea datelor de la giroscop (disponibil tot pe ICM-20602, neutilizat momentan) pentru un controller PID complet, care sa elimine deriva acumulata in timp ce apare la controlul bazat exclusiv pe accelerometru 
 +  * Implementarea controlului de altitudine pe baza senzorului ToF 
 + 
 +===== Download ===== 
 + 
 +[[https://​static.cristimacovei.dev/​pm-musca.zip|pm-musca.zip]] — arhiva cu sursele firmware (''​src/​main.cpp'',​ ''​platformio.ini''​) si schemele hardware ale proiectului. 
 + 
 +===== Jurnal ===== 
 + 
 +  * **Saptamana 1 (28 apr – 4 mai)**: Sosirea componentelor,​ documentare datasheet-uri,​ definirea arhitecturii generale a sistemului. 
 + 
 +  * **Saptamana ​(5 – 11 mai)**: Primul test hardware: un motor conectat la un ESC, motorul a pornit si a raspuns corect la semnal PWM. Conectarea IMU-ului (ICM-20602) prin SPI, verificarea datelor brute prin monitor serial. Tentativa de conectare a senzorului ToF (VL53L0X) — defectat in urma unei conexiuni gresite de alimentare. 
 + 
 +  * **Saptamana 3 (12 – 18 mai)**: Montarea tuturor celor 4 motoare pe cadru. Conectarea ESC-urilor si a senzorului de curent INA226; sistemul functional, senzorul raporta date corecte. Defectarea INA226 prin descarcare electrostatica (ESD) la atingerea cu mana neizolata — codul aferent comentat. Dezvoltarea algoritmului de control proportional. 
 + 
 +  * **Saptamana 4 (19 – 25 mai)**: Implementarea failsafe-ului si a sincronizarii non-blocking. Teste de simulare pe banc: tilt al IMU-ului si observarea raspunsului diferentiat al motoarelor. Ajustarea gainurilor. Finalizare firmware si documentatie. 
 + 
 +===== 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]] 
pm/prj2026/bianca.popa1106/nicolae.macovei1412.1778202838.txt.gz · Last modified: 2026/05/08 04:13 by nicolae.macovei1412
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0