Scopul proiectului este realizarea unui robot care isi mentine echilibrul, idee provenita de la o jucarie din copilarie, numita Hopa-mitica. Aceasta este reprezentata de o silueta cu partea de jos mai grea decât cea de sus și rotunjită astfel încât atunci când este înclinată spre orizontală și apoi eliberată, forța gravitației o face să revină la poziția verticală, balansându-se în preajma acestei axe până la stabilizare, stând astfel „în picioare” tot timpul. Asadar, m-am gandit sa construiesc un robot pe doua roti care sa aiba acelasi comportament ca jucaria descrisa mai sus. Robotul poate fi comandat de la distanta prin intermediul bluetooth-ului. Dupa orice miscare (deplasare fata/spate) aplicata asupra robotului, acesta prin balansare va trebui sa gaseasca centrul de greutate si sa isi mentina echilibrul.
Lista de piese
Robotul a fost dezvoltat in C, programul ruland pe microcontroller-ul Atmega324PA. Mediu de dezvoltare: Sublime - pe Linux, iar compilarea se face cu ajutorul unui Makefile ce se poate gasi in arhiva atasata mai jos. Pe langa bibliotecile comune din avr, am folosit o biblioteca MPU6050.h - pe care am luat-o de pe GitHub. Aceasta era realizata pentru Arduino, iar eu am adaptat-o pentru a putea folosi senzorul in proiectul meu. Comunicatia cu acesta se realizeaza prin I2C. Pentru aceasta interfata am folosit biblioteca i2c_master.h definita in laborator.
Unghiul de inclinatie este format din doua componente: unghiul calculat pe baza informatiilor date de accelerometru si unghiul calculat pe baza informatiilor date de giroscop. Cum accelerometru este afectat de zgomot si giroscopul are drift, trebuie luate in calcul ambele unghiuri pentru a obtine un unghi de inclinatie cat mai precis. Se obtin valorile accelerometrului pe axele Y si Z, se calculeaza unghiul dat de aceste axe si se obtine prima componenta. Apoi, se citeste valoarea data de giroscop pe axa X si se obtine a doua componenta.
Se determina unghiul de inclinatie, combinand cele doua componente astfel: se aplica un filtru complementar, prin care se incearca anularea deviatiilor celor doua elemente (accelerometru si giroscop). Prin urmare, unghiul curent este format din 90% unghiul calculat pe baza giroscopului si 10% unghiul calculat pe baza accelerometrului.
Pentru ca unghiul calculat nu este 100% precis, atunci cand robotul sta vertical unghiul lui de inclinatie variaza intre 0° - 2°. Astfel, am considerat un unghi mort, in care robotul se considera vertical si trebuie sa stea pe loc. Acest unghi a fost calculat empiric, valoarea lui in final fiind de maxim 3°. Prin urmare, orice unghi de inlinatie mai mic decat 3° nu este considerat o eroare. In caz contrar, unghiul este considerat o eroare si se aplica formula controllerului PID, utilizand constante alese empiric, pentru a se corecta eroarea, adica indreptarea robotului. Outputul dat de aceasta formula reprezinta comanda ce trebuie transmisa driverului de motoare printr-un semnal PWM. De asemenea, pentru a ajuta motoarele, am ales ca outputul dat de formula de PID sa fie cuprins intre 100 si 255. Daca comanda este negativa, inseamna ca robotul este inclinat in spate si trebuie sa mearga inapoi pentru a se redresa, iar daca aceasta este pozitiva, inseamna ca robotul este inclinat in fata si trebuie sa mearga inainte pentru a se corecta.
A fost un proiect destul de complex, care a reprezentat o adevarata provocare pentru mine.
Pe parcursul realizarii proiectului am intampinat cateva probleme:
In cele din urma, pot spune ca dupa multa munca, am reusit sa creez un robot functional din care am invatat foarte multe, atat din punct de vedere Hardware cat si Software.
Schema electrica: hopa_mitica_final.sch
Arhiva cod: hopa_mitica_1_.zip