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:05]
eduard_andrei.radu [Hardware Design]
pm:prj2024:tdicu:eduard_andrei.radu [2024/05/27 15:55] (current)
eduard_andrei.radu [Bibliografie/Resurse]
Line 1: Line 1:
 ====== Ball Balancing Robot ====== ====== Ball Balancing Robot ======
  
-<note tip> 
 Nume: Radu Eduard-Andrei Nume: Radu Eduard-Andrei
- 
 Grupa: 333CC Grupa: 333CC
-</​note>​ 
- 
-Un robot care foloseste 4 stepper-motors pentru a inclina un plan pe care se afla un touchpad rezistiv care poate detecta pozitia unul ball bearing. Va folosi 2 algoritmi de control de tip PID pentru a muta ball bearing-ul catre centrul sau (sau orice punct de pe suprafata lui. 
  
 ===== Introducere ===== ===== Introducere =====
  
-M-am inspirat din video-uri vazute online, si l-am ales deoarece am vrut ca proiectul meu sa includa ​un algoritm ​de control. Nu are o utilitate practica, dar poate fi vazut ca o jucarie anti-stres.+Un robot care foloseste 4 stepper-motors pentru a inclina ​un plan pe care se afla un touchpad rezistiv care poate detecta pozitia unul ball bearing. Va folosi 2 algoritmi ​de control ​de tip PID pentru a muta ball bearing-ul catre centrul sau (sau orice punct de pe suprafata lui.
  
-<note tip> +M-am inspirat din videoclipuri vazute online, si l-am ales deoarece am vrut ca proiectul meu sa includa un algoritm ​de control. Nu are o utilitate practica, dar poate fi vazut ca o jucarie anti-stres.
-Prezentarea pe scurt a proiectului vostru: +
-  * ce face +
-  * care este scopul lui +
-  * care a fost ideea de la care aţi pornit +
-  * de ce credeţi că este util pentru alţii şi pentru voi +
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +Robotul este format din piese printate 3D si consta intr-platforma care isi poate schimba unghiul cu suprafata orizontala prin intermediul celor 4 motoare ​care controleaza cela 4 picioare.
-O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de descriere a acestora precum şi a modului în care interacţionează.+
  
-Exemplu ​de schemă blochttp://www.robs-projects.com/​mp3proj/​newplayer.html +Se incearca balansarea unei bile de metal pe platforma. Pentru determinarea pozitiei bilei se foloseste un touchpad rezistiv. 
-</​note>​+ 
 +Se foloseste un algoritm de control de tip PID pentru determinarea unghiului optim pentru ca bila sa ajunga in centrul platformei si sa ramana acolo. 
 + 
 +{{:pm:prj2024:​tdicu:​screenshot_2024-05-23_at_15.19.49.png?​700|}}
  
 ==== Hardware Design ===== ==== Hardware Design =====
 +
 +{{:​pm:​prj2024:​tdicu:​img_2646.jpg?​500|}}
  
 == Lista piese: == == Lista piese: ==
Line 35: 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
  
  
-{{:​pm:​prj2024:​tdicu:​ball_balancer_kicad.png?​800|}}+{{:​pm:​prj2024:​tdicu:​ball_balancer_kicad.png?​700|}}
  
  
 ===== 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.1716465941.txt.gz · Last modified: 2024/05/23 15:05 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