Differences

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

Link to this comparison view

pm:prj2024:tdicu:eduard_andrei.radu [2024/05/23 15:26]
eduard_andrei.radu [Introducere]
pm:prj2024:tdicu:eduard_andrei.radu [2024/05/27 15:55] (current)
eduard_andrei.radu [Bibliografie/Resurse]
Line 20: Line 20:
  
 ==== Hardware Design ===== ==== Hardware Design =====
 +
 +{{:​pm:​prj2024:​tdicu:​img_2646.jpg?​500|}}
  
 == Lista piese: == == Lista piese: ==
Line 26: Line 28:
   * 4x AzDelivery A4988 Stepper Motor Driver   * 4x AzDelivery A4988 Stepper Motor Driver
   * 1x VSDISPLAY 8.4" Resistive Touch Sensor   * 1x VSDISPLAY 8.4" Resistive Touch Sensor
-  * 1x Sursa DC 24V 0-6.5A+  * 1x Sursa DC 24V 0-20A
   * 1x LM2596 DC-DC Buck Converter Step Down Modul   * 1x LM2596 DC-DC Buck Converter Step Down Modul
 +  * 1x CNC Arduino Shield
  
  
Line 35: Line 38:
 ===== Software Design ===== ===== Software Design =====
  
 +Pentru implementare am folosit un arduino uno R3 cu procesor atmega328p. ​
 +Am folosit biblioteca AccelStepper pentru controlul mai facil al motoarelor.
  
-<note tip> +== Structuri folosite== 
-Descrierea codului aplicaţiei (firmware)+  * pidX - pentru controlul unghiului dintre plan si axa OX 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +  * pidY pentru controlul unghiului dintre plan si axa OY 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +  * touchpad - pentru furnizarea pozitiei bilei 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +  * stepperController - pentru setarea celor 4 steppere in pozitiile corecte rezultate din PID-uri
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+== Algoritmi folositi: ​==
  
-<note tip> +====== PID ======
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+<code cpp> 
 +class PID { 
 +public: 
 +    PID(float kP, float kI, float kD, float target); 
 +    void set_target(int target); 
 +    void update(int current); 
 +    float get_value();​ 
 +private: 
 +    float kP; 
 +    float kI; 
 +    float kD;
  
-===== Download =====+    float target;
  
-<note warning> +    float proportional;​ 
-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ă ;-).+    float integral; 
 +    float derivative; 
 +};
  
-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**. +PID::PID(float kP, float kI, float kD, float target) ​kP(kP), kI(kI), kD(kD), target(target) { 
-</note>+    proportional = 0; 
 +    integral = 0; 
 +    derivative = 0; 
 +
 + 
 +void PID::set_target(int target) { 
 +    this->​target = target; 
 + 
 +    this->​proportional = 0; 
 +    this->​integral = 0; 
 +    this->​derivative = 0; 
 +
 + 
 +void PID::update(int current
 +    current -= 512; 
 +    float normalized_current = current / 512.0; 
 +    derivative = target ​normalized_current - proportional;​ 
 +    proportional = target - normalized_current;​ 
 +    integral += proportional;​ 
 +
 + 
 +float PID::get_value() { 
 +    return kP proportional + kI integral + kD * derivative;​ 
 +} 
 +</code> 
 + 
 +===== Rezultate Obţinute ===== 
 + 
 +In final robotul functioneaza fiind capabil sa balanseze o bila de metal fara ca aceasta sa pice de pe platforma pe o perioada lunga de timp. Totusi merita subiliniate impreciziile mecanice pe care robotul le are. Cea mai importanta este ca piesele printate 3d nu au un sistem de prindere cu motoarele adecvat, ceea ce duce la deviatii de unghi ale bratelor in timpul utilizarii. Consecinta acestui luctu este incapacitatea de a face punctul de echilibru al robotului constant. O a doua problema intampinata este un defect de fabricatie al senzorului touchscreen care face ca uneori citirea sa fie complet eronata. 
 + 
 +===== Download =====
  
-===== Jurnal =====+Am adaugat codul pentru algoritmul de control si modelele 3mf ale pieselor necesare in acest repository de github:​[[https://​github.com/​radueduard/​BallBalancingRobot]]
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  ​[[https://​www.arduino.cc/​reference/​en/​libraries/​accelstepper/​]] 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * [[https://​www.arduino.cc/​reference/​en/​libraries/​adafruit-touchscreen/]]
-</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/prj2024/tdicu/eduard_andrei.radu.1716467201.txt.gz · Last modified: 2024/05/23 15:26 by eduard_andrei.radu
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