This shows you the differences between two versions of the page.
pm:prj2022:avaduva:andrei.ionescu3107 [2022/06/02 00:29] andrei.ionescu3107 [Concluzii] |
pm:prj2022:avaduva:andrei.ionescu3107 [2022/06/02 03:07] (current) andrei.ionescu3107 [Jurnal] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Robot Pendul Invers ====== | ====== Robot Pendul Invers ====== | ||
Autor: Ionescu Andrei | Autor: Ionescu Andrei | ||
- | <note important>Pagina este in constructie!</note> | + | |
+ | Grupa: 333CA | ||
===== Introducere ===== | ===== Introducere ===== | ||
Proiectul consta intr-un robotel pe 2 roti, controlat din telecomanda, ce isi tine singur echilibrul. | Proiectul consta intr-un robotel pe 2 roti, controlat din telecomanda, ce isi tine singur echilibrul. | ||
Line 46: | Line 47: | ||
* 2 condensatoare de decuplare, 0.1uF si 22uF | * 2 condensatoare de decuplare, 0.1uF si 22uF | ||
* 1 condensator de 1nF | * 1 condensator de 1nF | ||
+ | |||
+ | === Piese mecanice inlocuite: === | ||
+ | * 2 roti de diametru 7cm (incompatibile cu axul motoarelor) | ||
=== Piese electronice inlocuite === | === Piese electronice inlocuite === | ||
Line 55: | Line 59: | ||
* 2 condensatoare, 100uF si 1mF | * 2 condensatoare, 100uF si 1mF | ||
* dioda Schottky | * dioda Schottky | ||
+ | * Condensatoare de 1uF (valoare prea mare) | ||
==== Schema electrica ==== | ==== Schema electrica ==== | ||
{{ :pm:prj2022:avaduva:schematicv1.2.png?nolink&800 |}} | {{ :pm:prj2022:avaduva:schematicv1.2.png?nolink&800 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | === Modelul matematic al pendulului invers: === | ||
+ | Pornind de la [[https://en.wikipedia.org/wiki/Inverted_pendulum#Equations_of_motion|ecuatia]]: | ||
+ | |||
+ | $a - \frac{g}{l}sin(\theta) = 0$ | ||
+ | |||
+ | unde: | ||
+ | * $a$ este acceleratia unghiulara | ||
+ | * $g$ este acceleratia gravitationala | ||
+ | * $l$ este lungimea pendulului | ||
+ | * $\theta$ este unghiul fata de pozitia de echilibru | ||
+ | |||
+ | putem prezice miscarea libera a robotului printr-o metoda matematica. Aceasta este folositoare deoarece algoritmul de control automat PID necesita un astfel de model pentru a functiona. | ||
+ | |||
+ | === Algoritmul de control automat: === | ||
+ | Cunoscut ca si algoritmul [[https://en.wikipedia.org/wiki/PID_controller|controller-ului proportional-integral-derivat]] (PID pe scurt), acesta este o metoda bazata pe o bucla de control cu feedback. Concret, consta in calcularea unei valori de eroare $e(t)$, diferenta dintre valoarea tinta $SP$ si variabila de proces masurata $PV$, apoi aplicarea unei corectii bazata pe 3 termeni: | ||
+ | * termenul **proportional** modifica valoarea $e(t)$, precum ii spune si numele, **proportional cu eroarea calculata**. Singur, acesta poate functiona, dar pot aparea probleme in cazuri dinamice, precum miscarea accelerata sau cu acceleratie non-constanta. | ||
+ | * termenul **integral** modifica valoarea $e(t)$ in functie de **eroare si timpul** pentru care aceasta a **persistat**. Singur, acesta poate functiona, dar creaza un raspuns prea slab initial si prea puternic in apropierea punctului $PV$. | ||
+ | * termenul **derivat** modifica **rata de schimbare a erorii**, tintind la una constanta. Singur, acesta nu poate functiona intrucat nu modifica eroarea in sine, dar este cheia functionarii corecte a celorlalti termeni. | ||
+ | |||
+ | Ecuatia: | ||
+ | |||
+ | $u(t) = K_pe(t) + K_i\int_0^t{e(\tau)d\tau} + K_d\frac{de(t)}{dt}$ | ||
+ | |||
+ | unde: | ||
+ | * $u(t)$ este corectia ce va fi aplicata sistemului | ||
+ | * $K_p$, $K_i$ si $K_d$ sunt parametrii alesi prin incercare si esec sau prin calcul matematic (pe baza modelului discutat anterior) | ||
+ | * $t$ este timpul instantaneu | ||
+ | |||
+ | ne ofera schimbarea ce trebuie efectuata asupra puterii motoarelor pentru a mentine echilibrul robotului. | ||
+ | |||
+ | === Lock anti-phase drive: === | ||
+ | |||
+ | Trebuie mentionat ca driverele de motor sunt speciale, avand capacitatea de a fi controlate prin PWM in mod diferit: pinul de PWM poate fi tras la tensiunea de referinta in timp ce pinii de intrare (ce controleaza directia) pot accepta un semnal PWM. Astfel, un duty cycle de 50% reprezinta o franare rigida (motoarele se vor opune activ miscarii) in timp ce 0% si 100% reprezinta miscare la putere maxima inainte sau inapoi. Aceasta caracteristica este avantajoasa robotului intrucat ajuta la un control mai precis. | ||
+ | |||
+ | |||
+ | <note important> Pentru a se deplasa, robotul ar trebui pur si simplu sa isi mentina centrul de greutate in fata sau in spatele axului rotilor. Acest lucru se efectueaza din software prin schimbarea valorii $SP$ DAR mai intai ar trebui ca robotul sa plece brusc in directia opusa directiei dorite de mers, lasand inertia sa "traga" rotile de sub greutatea robotului. </note> | ||
+ | |||
+ | === Comunicare bluetooth: === | ||
+ | |||
+ | Intrucat Arduino are optiunea de a comunica prin bluetooth folosind module externe, am ales un microcontroller ESP32-S3, acesta avand integrat o antena si modulele necesare. Astfel, un controller Duallshock 4 ar putea fi conectata la robot pentru manevrarea wireless a acestuia, intr-un mod relativ simplu: adresa MAC a microcontroller-ului trebuie sa fie aceeasi cu cea stocata de controller. | ||
+ | |||
+ | |||
- | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
- | * (etapa 3) surse şi funcţii implementate | ||
- | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | In final, suportul mecanic hardware este terminat, componentele electronice sunt lipite dar lipsesc conexiunile, dat fiind dificultatea cositoririi firelor, iar partea de software este la stadiul de teorie intrucat este greu de implementat/testat fara robotul fizic. | + | In final, suportul mecanic hardware este terminat, componentele electronice sunt lipite dar lipsesc conexiunile, dat fiind dificultatea cositoririi firelor, iar partea de software este la stadiul de teorie intrucat este greu de implementat/testat fara suportul electronic. |
{{ :pm:prj2022:avaduva:robot1.jpg?nolink&300|}} | {{ :pm:prj2022:avaduva:robot1.jpg?nolink&300|}} | ||
Line 83: | Line 124: | ||
* Driverele de motor ar fi putut fi luate intr-o capsula mai usor de lipit de mana. | * Driverele de motor ar fi putut fi luate intr-o capsula mai usor de lipit de mana. | ||
* Firele ar fi fost mai usor de lipit sub forma de cupru solid, nu manunchi de fire mici. | * Firele ar fi fost mai usor de lipit sub forma de cupru solid, nu manunchi de fire mici. | ||
+ | * O greutate ar putea fi adaugata in varful robotului, pentru ca acesta s-ar putea sa fie prea usor ca sa se deplaseze atunci cand este inclinat in momentul de fata. | ||
- | <note> Sunt de parere ca proiectul a fost unul de o complexitate crescuta intrucat zeci de ore de lucru nu au fost suficiente pentru finalizarea sa! </note> | + | <note> Sunt de parere ca proiectul a fost unul de o complexitate crescuta dar ar fi fost dus la bun sfarsit cu mai mult timp la dispozitie! </note> |
===== Download ===== | ===== Download ===== | ||
Line 93: | Line 135: | ||
</note> | </note> | ||
+ | {{:pm:prj2022:avaduva:eagleproiectpm.zip|Proiectul Eagle ce contine schematicul robotului.}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 98: | Line 141: | ||
* Tema a fost aleasa [[https://docs.google.com/spreadsheets/d/1z4RhEBLrTK5E1BRwp6diB5XuOj8LOmoaigpwqgArTDQ/edit?usp=sharing|aici]]. | * Tema a fost aleasa [[https://docs.google.com/spreadsheets/d/1z4RhEBLrTK5E1BRwp6diB5XuOj8LOmoaigpwqgArTDQ/edit?usp=sharing|aici]]. | ||
* Resurse Hardware au fost adaugate. | * Resurse Hardware au fost adaugate. | ||
- | * (Niste) resurse Software au fost adaugate. | + | * Resurse Software au fost adaugate. |
* Schema electrica a fost adaugata. | * Schema electrica a fost adaugata. | ||
* Lucruri ce pot fi imbunatatite au fost mentionate. | * Lucruri ce pot fi imbunatatite au fost mentionate. | ||
* Functionarea generala a robotului a fost adaugata. | * Functionarea generala a robotului a fost adaugata. | ||
+ | * Design-ul software a fost adaugat. | ||
+ | * Rezultatele obtinute au fost adaugate. | ||
+ | * Concluzia a fost adaugata. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 113: | Line 159: | ||
=== Resurse Software: === | === Resurse Software: === | ||
- | + | * [[https://github.com/aed3/PS4-esp32|Interfatarea unui ESP32 cu un Dualshock 4]] | |
* I2C [[https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/i2c.html|(1)]] [[https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf#i2c|(2)]] pentru ESP32 | * I2C [[https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/i2c.html|(1)]] [[https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf#i2c|(2)]] pentru ESP32 | ||