Differences

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

Link to this comparison view

pm:prj2023:adarmaz:drone [2023/05/28 20:54]
eduard.mihai [Software Design]
pm:prj2023:adarmaz:drone [2023/05/29 00:08] (current)
eduard.mihai [Bibliografie/Resurse]
Line 34: Line 34:
  
 <note tip> <note tip>
-===== Caracteristici tehnice ​=====+Caracteristici tehnice
 +  * Giroscop: ​  
 +   - Output digital cu range programabil de ±250, ±500, ±1000 și ±2000°/​sec;​ 
 +   - ADC pe 16 biți integrat; 
 +   - Filtru trece jos programabil;​ 
 +   - Curent de operare: 8uA - 3.2mA, în funcție de modul de operare; 
 +  * Accelerometru:​ 
 +   - Output digital cu range programabil de ±2g, ±4g, ±8g și ±16g; 
 +   - ADC pe 16 biți integrat; 
 +   - Curent consumat: 8uA - 450uA, în funcție de modul de operare 
 +   - Întreruperi programabile;​ 
 +   - 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 48: 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
  
-==== Caracteristici tehnice ==== +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.
-<note tip>+
  
 +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.
  
-</​note>​+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 68: 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 83: 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>​
  
pm/prj2023/adarmaz/drone.1685296459.txt.gz · Last modified: 2023/05/28 20:54 by eduard.mihai
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