Differences

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

Link to this comparison view

pm:prj2023:ncaroi:self-balanced-robot [2023/05/27 23:35]
radu_stefan.zamfir [Hardware Design]
pm:prj2023:ncaroi:self-balanced-robot [2023/05/30 01:11] (current)
radu_stefan.zamfir [Jurnal]
Line 10: Line 10:
 <note tip> <note tip>
 Un robotel ce foloseste un giroscop pentru a intelege in ce directie cade (fata sau spate), intr-un timp destul de scurt cat sa poata actione motoarele pentru a invarti rotile, astfel compensand caderea inclinandu-se in partea opusa necesar cat sa anuleze caderea. Aceasta functie se repeta incontinuu, stand foarte aproape de centrul de balansare tot timpul, rezistand inclusiv la impingeri din partea unei persoane sau alti factori disruptivi decat doar gravitatia. Un robotel ce foloseste un giroscop pentru a intelege in ce directie cade (fata sau spate), intr-un timp destul de scurt cat sa poata actione motoarele pentru a invarti rotile, astfel compensand caderea inclinandu-se in partea opusa necesar cat sa anuleze caderea. Aceasta functie se repeta incontinuu, stand foarte aproape de centrul de balansare tot timpul, rezistand inclusiv la impingeri din partea unei persoane sau alti factori disruptivi decat doar gravitatia.
 +</​note>​
  
- +=== Schema logica ===
-===== Schema logica ​=====+
  
 **Giroscop** ---//​informatii//​--->​ **Microprocesor** ---//​voltaj//​--->​ **Motoare** ---//​invartire//​--->​ **Roti** **Giroscop** ---//​informatii//​--->​ **Microprocesor** ---//​voltaj//​--->​ **Motoare** ---//​invartire//​--->​ **Roti**
  
  
-===== Schema Eagle =====+=== Schema Eagle ===
  
 {{:​pm:​prj2023:​ncaroi:​schema_raduzamfir.png?​650|}} {{:​pm:​prj2023:​ncaroi:​schema_raduzamfir.png?​650|}}
  
  
-===== **Descriere software** ​=====+=== **Descriere software** ===
  
 Foloseste __giroscopul__ pentru a prelua nivelul de inclinare. Porneste __motoarele__ si invarte __rotile__ in directia opusa (aceeasi directie cu caderea) pana se ajunge iar intr-o pozitie verticala. Apoi se permite iar caderea intr-o directie si repornirea rotilor, facand aceste comenzi la infinit. Foloseste __giroscopul__ pentru a prelua nivelul de inclinare. Porneste __motoarele__ si invarte __rotile__ in directia opusa (aceeasi directie cu caderea) pana se ajunge iar intr-o pozitie verticala. Apoi se permite iar caderea intr-o directie si repornirea rotilor, facand aceste comenzi la infinit.
  
  
-===== **Descriere hardware** ​=====+=== **Descriere hardware** ===
  
 Un robotel ce se sprijina de pamant doar folosind 2 __roti__, avand o structura cat de cat inalta, verticala. Rotile sunt conectate la __motoare__,​ alimentate de __baterii__. Motoarele sunt declansate de catre __placuta Arduino__, ce contine __software__-ul prezentat mai sus. __Giroscopul__ transmite informatii despre unghiul de inclinare incontinuu microprocesorului,​ pentru a determina in ce fel sa activeze motoarele. Un robotel ce se sprijina de pamant doar folosind 2 __roti__, avand o structura cat de cat inalta, verticala. Rotile sunt conectate la __motoare__,​ alimentate de __baterii__. Motoarele sunt declansate de catre __placuta Arduino__, ce contine __software__-ul prezentat mai sus. __Giroscopul__ transmite informatii despre unghiul de inclinare incontinuu microprocesorului,​ pentru a determina in ce fel sa activeze motoarele.
  
-</​note>​ 
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +Componente:
-Aici puneţi tot ce ţine de hardware design:+
   * Placa Arduino ​                           -> Pentru partea software a robotului   * Placa Arduino ​                           -> Pentru partea software a robotului
   * Breadboard ​                              -> Pentru a conecta componentele intre ele   * Breadboard ​                              -> Pentru a conecta componentele intre ele
Line 45: Line 43:
   * Modul Giroscop analog ​                   -> Pentru a determina inclinarea robotului   * Modul Giroscop analog ​                   -> Pentru a determina inclinarea robotului
   * Cabluri, elastice, suporti din plastic ​  -> Pentru suport fizic   * Cabluri, elastice, suporti din plastic ​  -> Pentru suport fizic
 +
 +<note tip>
 +Observatie: Din doua servomotoare ce blocau miscarea rotilor la maxim 90 de grade in fiecare parte, am desfacut motoarele, am taiat accesul la cate un potentiometru intern si am taiat un cub ce bloca invartirea rotilor la mai mult de 90 de grade pentru a obtine 2 servomotoare continue.
 </​note>​ </​note>​
  
 +Robotul final:
 +
 +{{:​pm:​prj2023:​ncaroi:​selfbalancingraduzamfir1.jpg?​350|}}{{:​pm:​prj2023:​ncaroi:​selfbalancingraduzamfir2.jpg?​350|}}
 ===== Software Design ===== ===== Software Design =====
- 
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware):​ +  ​libraria <Servo.h> - pentru controlul servomotoarelor 
-  ​mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +  * librariile "​Wire.h"​ si "​I2C.h"​pentru a comunica cu componente I2c (giroscopul) - [[https://​www.optimusdigital.ro/​ro/​produse-resigilate-la-pret-redus/​12835-modul-10dof-mpu9250-i-bmp280-accelerometru-giroscop-magnetometru-i-barometru-digital-gy.html?​search_query=Modul+10DOF+MPU9250+%C8%99i+BMP280+Accelerometru%2C+Giroscop%2C+Magnetometru+%C8%99i+Barometru+Digital+GY+%28+Resigilat+%29&​results=1||Sursa librarii]] 
-  * librării şi surse 3rd-party (e.gProcyon AVRlib) +  * [[https://​github.com/​br3ttb/​Arduino-PID-Library/​tree/​master||libraria "​PID_v1.h"​]] - pentru calculul complex si fine-tuned al vitezelor servomotoarelor
-  * algoritmi şstructuri pe care plănuiţi să le implementaţ+
-  * (etapa 3) surse şi funcţii implementate+
 </​note>​ </​note>​
  
-===== Rezultate Obţinute ​=====+Tot algoritmul este format in mare din 3 mari componente:​ 
 +=== 1. Giroscopul: ​=== 
 +Folosind functii specifice I2C, se preiau din senzor datele giroscopului. Avem acces si la un accelerometru,​ barometru si senzor de temperatura prin modulul ales, dar ne intereseaza doar giroscopul. In special, pe directia Ox, intrucat avem 2 roti si ne intereseaza doar miscarea fata-spate. 
 + 
 +=== 2. Servomotoarele: ​=== 
 +Cea mai simpla parte, atasam pinii 11 si 12 la cele 2 motoare si atasam unghiuri suplementare celor 2 servomotoare pentru o rotatie continua in aceeasi directie a robotului. 
 + 
 +=== 3. PID === 
 +Se foloseste algoritmul PID (Proportional-Integral-Derivative) pentru a determina viteza servomotoarelor in functie de datele de la giroscop. 
 +Se primeste un input (in acest caz, unghiul dat de giroscop), un ideal (unghiul de echilibru al robotului) si rezulta un output din algortimul de PID control, folosind 3 valori ce trebuie tunate unic pentru fiecare robot: 
 + 
 +__Proportional__:​ se calculeaza un output de viteza in functie de eroarea curenta fata de ideal. 
 + 
 +__Integral__:​ In functie de magnitudiea si durata erorii, se calculeaza acceleratia. 
 + 
 +__Derivative__:​ In functie de rata de schimbare a erorii se mai influenteaza viteza motoarelor.
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+O foarte mare parte a timpului a fost consumat facand fine-tuning pe valorile acestui sistem. Acesta foloseste aceste 3 variabile de mai sus (Kp, Ki, Kd), care depind foarte mult de specificatii gen greutatea robotului, diametrul rotilor etc, care se pot afla doar prin trial and error pentru ca robotul sa se balanseze bine.
 </​note>​ </​note>​
 +===== Rezultate Obţinute =====
  
 +Un robot nu foarte precis. Acesta are nevoie de sprijin din partea userului, din cauza unor caracteristici atat software cat si hardware:
 +- motoare nu destul de puternice
 +- neacuratati hardware din modul cum a fost construit, atat pentru directia imperfecta a motoarelor, cat si a centrului de greutate pozitionat mult in fata robotului
 +- calibrare a constantelor pentru PID imprecise
 +
 +[[https://​imgur.com/​a/​N18VPaD|Videouri exemplu]]
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Personal, a fost o provocare sa construiesc acest robot cu resurse minime cat sa fie stabil si cat de cat ok.
  
-<note warning>​ +Insa, obiectiv si de departe, partea cea mai dificila dar si cea mai importanta a acestui proiect ​este __calibrarea__.
-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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Cele trei constante, ​**Kp** = Proportional gain, **Ki** = Integral gain si **Kd** = Derivative gainsunt foarte variabile in functie de fiecare robot si de specificatiile acestuia, cum ar fi greutatea, diametrul rotilor, puterea motoarelor, cat de des se primesc date de la senzor.
-</​note>​+
  
-===== Jurnal =====+Aceste constante sunt extrem de dificil de calculat de mana sau cu vreun tool online, astfel incat pentru controllere PID in aproape toate cazurile se foloseste metoda "Trial and error"​. Am subestimat cat timp imi va lua acest lucru si nu am ajuns sa ajung la rezultate ideale. Un alt motiv pentru aceasta concluzie este si ca nu am gasit motoare potrivite, iar servomotoarele mele hackuite cat sa fie continue nu au destula putere cat sa permita robotului sa raspunda la erori mari.
  
-<note tip> +Totusi, pot spune ca pentru un astfel ​de robot, daca se doreste ajungerea la niste rezultate multumitoare,​ se pot petrece lejer cateva saptamani doar pe calibrarea parametrilor de mai sus. A fost un proces foarte interesant, foarte frustrant si foarte rewarding (nu in acelasi timp). As recomanda oricui sa parcurga un astfel ​de proiect. 
-Puteți avea și o secțiune ​de jurnal în care să poată urmări asistentul ​de proiect ​progresul proiectului+===== Download ===== 
-</​note>​+ 
 +{{:​pm:​prj2023:​ncaroi:​selfbalancingrobot_raduzamfir.zip|Arhiva pentru software}}
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2023/ncaroi/self-balanced-robot.1685219720.txt.gz · Last modified: 2023/05/27 23:35 by radu_stefan.zamfir
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