This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:drone [2023/05/28 20:57] eduard.mihai [Hardware Design] |
pm:prj2023:adarmaz:drone [2023/05/29 00:08] (current) eduard.mihai [Bibliografie/Resurse] |
||
---|---|---|---|
Line 46: | Line 46: | ||
- Întreruperi programabile; | - Întreruperi programabile; | ||
- Poate ieși din modul low power dacă detectează mișcare; | - Poate ieși din modul low power dacă detectează mișcare; | ||
+ | * Curent total de operare: 3.5mA; | ||
+ | * Comunicație I2C la 400kHz sau SPI la 1MHz sau SPI la 20MHz pentru citire senzori; | ||
+ | * Tensiune de funcționare modul: 3V - 5V; | ||
+ | * Senzor de temperatură cu output digital; | ||
+ | * Digital Motion Processing. | ||
</note> | </note> | ||
Line 60: | Line 64: | ||
* Wire.h | * Wire.h | ||
- | Codul implementeaza controlarea si stabilizarea unei drone folosind un PID. | + | Codul implementeaza controlarea si stabilizarea unei drone folosind un controler PID si un filtru Kalman pentru a combina datele de la giroscop si datele de la accelerometru. |
- | Sunt preluate date de la modulul__Senzor cu 9 Axe MPU9250__ care are urmatoarele caracteristici tehnice: | + | Sunt preluate date de la modulul__Senzor cu 9 Axe MPU9250__: aceeleratie si rotatie |
+ | Functia "kalman_1d" primește starea curentă a sistemului (KalmanState), incertitudinea (KalmanUncertainty), intrarea sistemului (KalmanInput) și măsurarea curentă (KalmanMeasurement). Calculează și actualizează starea Kalman și incertitudinea. Ieșirile sunt stocate într-un vector numit Kalman1DOutput. | ||
+ | |||
+ | Functia "pid_equation" implementează ecuația unui controler PID. Primește eroarea curentă (Error), coeficienții P, I și D, eroarea anterioară (PrevError) și integrala anterioară (PrevIterm). Calculează termenii P, I și D și returnează ieșirea controlerului PID și valorile de eroare și integrală actualizate. | ||
+ | |||
+ | Functia "reset_pid" reseteaza valorile anterioare ale roarilor si integralelor pentru o noua iteratie. | ||
+ | |||
+ | Functia "setup" intializeaza sistemul: | ||
+ | * Inițializarea și configurarea conexiunii cu ESC-urile (Electronic Speed Controllers) utilizate pentru controlul motoarelor quadcopterului. | ||
+ | * Inițializarea comunicării seriale pentru comunicarea cu computerul. | ||
+ | * Inițializarea și configurarea senzorului MPU9250. | ||
+ | * Calibrarea automată a senzorului MPU9250 pentru a determina offset-urile necesare pentru o măsurare corectă. | ||
+ | * Configurarea setărilor pentru filtrarea și scalarea valorilor de la giroscop și accelerometru. | ||
+ | |||
+ | * Functia "loop" realizeaza in bucla continua controlul dronei: | ||
+ | * Controlul treptat al motoarelor quadcopterului prin modificarea valorilor de intrare pentru ESC-uri (val1, val2, val3, val4). | ||
+ | * Citirea datelor de la senzorul MPU9250, cum ar fi accelerația (AccX, AccY, AccZ), viteza unghiulară (RateRoll, RatePitch, RateYaw) și unghiurile de înclinare (AngleRoll, AnglePitch). | ||
+ | * Calculul unghiurilor de înclinare filtrate utilizând algoritmul Kalman (KalmanAngleRoll, KalmanAnglePitch). | ||
+ | * Calculul erorilor unghiurilor de înclinare și aplicarea controlerului PID pentru a obține ratele de înclinare dorite (DesiredRateRoll, DesiredRatePitch). | ||
+ | * Calculul erorilor de rate de înclinare și aplicarea controlerului PID pentru a obține valorile de intrare finale pentru motoare (InputRoll, InputPitch, InputYaw). | ||
+ | * Limitarea valorilor de intrare pentru a se potrivi cu limitele motoarelor și apelarea funcțiilor ESC pentru a seta noile valori pentru motoare (esc1.writeMicroseconds, esc2.writeMicroseconds, esc3.writeMicroseconds, esc4.writeMicroseconds). | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Am reusit sa control fiecare motor individual in urma prelucarii datelor primite de la girscop si accelerometru. | ||
+ | |||
+ | Am reusit sa ridic drona de la sol, dar stabilizarea ei nu a fost realizata in practica, probabil deoarece frecventa microcontroller-ului atmega328p, ce ruleaza la o freceventa de 16MHz nu reuseste sa proceseze suficient de repede datele. | ||
+ | |||
+ | In practica se vede cum datele giroscopului se modifica la modificarea pozitiei dronei si cum valorile de input ale ficarui motor sunt modificate individual incercandu-se stabilizarea sistemului. | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:whatsapp_image_2023-05-28_at_21.17.34.jpg?200|}} | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:whatsapp_image_2023-05-28_at_21.17.28.jpg?200|}} | ||
+ | |||
+ | <html> | ||
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/xSdw3-DCegk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> | ||
+ | | ||
+ | </html> | ||
+ | |||
+ | |||
<note tip> | <note tip> | ||
Line 75: | Line 116: | ||
===== Download ===== | ===== Download ===== | ||
- | <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**. | + | {{:pm:prj2023:adarmaz:test_flight_controler.zip|}} |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 90: | Line 129: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Bibliografie |
+ | |||
+ | [[https://youtube.com/playlist?list=PLeuMA6tJBPKsAfRfFuGrEljpBow5hPVD4]] | ||
+ | |||
+ | [[https://youtube.com/playlist?list=PLeuMA6tJBPKvqIveRYTqwBjjXLblVpeoh]] | ||
+ | |||
+ | [[https://projecthub.arduino.cc/edocit/arduino-drone-692690]] | ||
+ | |||
</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> | ||