This shows you the differences between two versions of the page.
pm:prj2025:avaduva:alexandru.chiorean [2025/05/11 14:09] alexandru.chiorean |
pm:prj2025:avaduva:alexandru.chiorean [2025/05/30 02:30] (current) alexandru.chiorean |
||
---|---|---|---|
Line 15: | Line 15: | ||
Schema bloc a proiectului: | Schema bloc a proiectului: | ||
- | {{:pm:prj2025:avaduva:schema_block_drona.png?800|}} | + | {{:pm:prj2025:avaduva:schema_block_drona.png?700|}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 30: | Line 30: | ||
* Baterie: **Tattu 600mAh 3.7V 30C** | * Baterie: **Tattu 600mAh 3.7V 30C** | ||
* Senzor ultrasonic: **HC-SR04** | * Senzor ultrasonic: **HC-SR04** | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Bateria are un curent de 3.7V insa regulatorul de tensiune al microcontroller-ului ESP8266 il coboara la 3.3V. Astfel, polul pozitiv al bateriei va fi conectat la pinul VCC al microcontrollerului, iar cel negativ la GND. In ceea ce priveste senzorii, atat MPU-ul cat si HC-SR04 au elementele de alimentare: VCC respectiv GND conectate la ESP prin 3V3 respectiv GND. Senzorul ultrasonic are nevoie de tensiune de 5V, motiv pentru care se foloseste amplificatorul de tensiune XL6009E1. Comunicarea I2C a acestora cu ESP-ul se realizeaza astfel: MPU-ul are pinul SCL conectat la D1 si SDA la D2 pe microcontroller, in timp ce senzorul ultrasonic are pinul Trig conectat la D5 si Echo la D6. Mai raman motoarele coreless, conectate pe diagonala secundara cu polaritate normala la polul pozitiv al bateriei, iar pe diagonala secundara cu polaritate opusa, pentru a obtine o rotatie in sensul acelor de ceasornic pe diagonala secundara si trigonometric pe cea principala. Celelalte fire se conecteaza la pinul Drain al MOSFET-urilor, pinii GND la GND-ul de pe ESP, iar pinii Source sunt legati de pinii de pe D3 (dreapta fata), D4 (stanga fata), D5 (dreapta spate), D6 (stanga spate) de pe ESP. | ||
</note> | </note> | ||
Schema electrica a proiectului: | Schema electrica a proiectului: | ||
- | {{:pm:prj2025:avaduva:circuit_image.png?800|}} | + | {{:pm:prj2025:avaduva:circuit_image.png?700|}} |
- | ===== Software Design ===== | ||
+ | Implementare hardware a proiectului: | ||
+ | |||
+ | {{:pm:prj2025:avaduva:imagine_hardware_drona.jpg?700|}} | ||
+ | |||
+ | {{:pm:prj2025:avaduva:whatsapp_image_2025-05-19_at_13.43.52.jpeg?700|}} | ||
+ | |||
+ | {{:pm:prj2025:avaduva:whatsapp_image_2025-05-30_at_01.39.11_ad5ab41b.jpg?700|}} | ||
+ | |||
+ | ===== Software Design ===== | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | Programul ruleaza pe un ESP8266 si ofera atat stabilizare automata, cat si pilotaj manual printr-o pagina web accesibila de pe telefon. La pornire, microcontrolerul se conecteaza la primul SSID definit; daca nu reuseste in intervalul de siguranta trece automat pe o a doua retea. Serverul HTTP integrat, disponibil pe portul 80, serveste o singura pagina HTML care contine patru slidere: Throttle, Pitch, Roll si Yaw. Sliderul de putere ramane pe valoarea setata, in timp ce celelalte trei revin la zero imediat ce utilizatorul nu le mai atinge, imitand revenirea unui stick cu arc. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Pentru comanda motoarelor sunt folosite patru MOSFET-uri low-side legate la pinii D3-D6. ESP8266 genereaza semnal PWM cu rezolutie de zece biti, ridicat la 16 kHz astfel incat zgomotul sa iasa din banda audibila a motoarelor coreless. Pentru a preveni blocarea rotorului la turatii prea mici exista o valoare "idle"; sub acest prag motoarele sunt oprite complet, peste el nu scad niciodata sub aproximativ doisprezece procente din ciclu. |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | Codul verifica prezenta unui senzor MPU6050 pe magistrala I2C. Daca senzorul raspunde, se face o calibrare scurta a giroscoapelor, iar apoi se ruleaza continuu un filtru complementar care combina giroscopul (98 %) cu accelerometrul (2 %), rezultand unghiurile Pitch si Roll. Daca senzorul nu este detectat programul continua totusi; variabila "mpuOK" ramane falsa si stabilizarea este omisa, drona functionand strict pe comenzile transmise din telefon. |
+ | |||
+ | La fiecare iteratie a buclei principale se citesc eventualele unghiuri stabilizate si se aduna cu valorile provenite din slidere. Se obtin astfel trei termeni: pTerm pentru fata-spate, rTerm pentru stanga-dreapta si yTerm pentru rotatie. Acesti termeni se combina cu throttle-ul intr-un mixer clasic de quadcopter: motoarele din spate primesc supliment de turatie cand se inclina in fata, motoarele de pe partea stanga cresc cand se cere deplasare la dreapta, iar perechile de motoare CW si CCW se aduna sau se scad pentru rotatie. Fiecare rezultat este trecut prin functia "mixMotor" care aplica regulile de idle si saturatie, dupa care se trimite catre pinul corespunzator. | ||
+ | |||
+ | Interfata web trimite cereri "fetch" catre doua rute. "/throttle" modifica puterea principala, iar "/ctrl" transmite simultan cele trei deviatii Pitch, Roll si Yaw. Logica se executa integral in browser, fara reimprospatarea paginii, iar pachetele HTTP pastreaza conexiunea deschisa pentru latenta minima. In partea de sus a paginii este afisat un mesaj care confirma daca stabilizarea este activa ("MPU OK – stabilisation on") sau daca zborul este strict manual ("MPU OFFLINE – manual only"). | ||
+ | |||
+ | Auditarile de siguranta sunt simple: lipsa retelei nu blocheaza controlerul, ci pastreaza PWM-ul la ultima valoare; coborarea throttle-ului sub prag aduce toate motoarele la zero; iar esecul initializarii senzorului nu mai conduce la blocarea aplicatiei, doar la dezactivarea filtrului de stabilizare. In ansamblu, firmware-ul inglobeaza patru straturi – retea, senzor, control si hardware – intr-un singur binar capabil sa functioneze indiferent daca MPU-ul este prezent sau nu, facilitand testare rapida, zbor manual si, atunci cand hardware-ul permite, stabilizare automata. | ||
</note> | </note> | ||
Line 50: | Line 68: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Continutul video care suprinde diferite etape din realizarea proiectului poate fi regasit pe pagina de **GitHub** de mai jos. In mod regretabil, transformatorul de curent nu a obtinut un flux constant de curent, variatiile acestuia fiind suficient de mari incat la una dintre testari s-au produs scantei, motiv pentru care am renuntat la el, nedorind ca proiectul sa devina un fire hazard. |
- | </note> | + | |
- | ===== Concluzii ===== | + | Dintr-un motiv pe care nu mi-l pot explica, odata cu lipirea firelor motoarelor, la primul test, modulul MPU 6050 a cedat, acesta nemaiputand fi detectat de microcontroller. In ciuda unor verificari extinse, a refacerii conexiunilor fizice si a activitatii vizibile ale ledului de la senzor, acesta a ramas inaccesibil de pe microcontroller. Acest lucru m-a determinat sa adaptez codul si la o versiune manuala de control, pentru a putea face un demo chiar si in lipsa stabilizarii. |
- | ===== Download ===== | + | In cadrul ultimului test, suprins de altfel si intr-unul din videoclipuri, se poate vedea cum un motoras a cedat, iar celalalt cedeaza in timpul filmarii. Asta se dovedeste a fi natura efemera a motoarelor coreless, care tind sa aiba o durata de viata extrem de scurta. |
- | + | ||
- | <note warning> | + | |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
</note> | </note> | ||
- | ===== Jurnal ===== | + | ===== Concluzii ===== |
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Concluzia acestui proiect, de altfel, pe atat de interesant pe cat a fost de ambitios, este ca, din pacate, socoteala de acasa nu e intotdeauna ca aceea din targ. In definitiv, atat lipsa de experienta, cat si limitarile hardware-ului si-au spus cuvantul, intrucat, in ciuda precautiilor si masurilor luate, am intampinat dificultati la concretizarea proiectului, dupa cum se poate vedea si in videoclipuri. Acesta a fost, insa, un prilej excelent de invatare. |
</note> | </note> | ||
- | ===== Bibliografie/Resurse ===== | + | ===== Download + Jurnal ===== |
+ | |||
+ | <note warning> | ||
+ | Fisierele proiectului si jurnalul progresului surprins in **commit-uri** sunt regasite pe urmatorul link de **GitHub**: | ||
- | <note> | + | * **https://github.com/AlexChiorean/Quadcopter**. |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||