Hopa Mitica Robot

Introducere

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.

Descriere Generala

Schema bloc

Schema electrica

Hardware Design

Lista de piese

  • Placa de baza cu microcontroller Atmega324APU
  • Motor cu reductie de 1:100 x2
  • Driver Motoare
  • Modul Senzor MPU6050 - giroscop + accelerometru
  • Baterie 5V
  • Roti

Software Design

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.

Implementare

Pasul 1

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.

Pasul 2

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.

Pasul 3

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.

Rezultate Obtinute

Concluzii

A fost un proiect destul de complex, care a reprezentat o adevarata provocare pentru mine.
Pe parcursul realizarii proiectului am intampinat cateva probleme:

  • O problema destul de mare a fost pozitionarea componentelor astfel incat sa nu modific centrul de greutate al robotului. Din pacate nu am reusit sa il echilibrez perfect, pentru ca nu am avut instrumentele necesare pentru a realiza masuratori complexe si astfel robotul nu isi mentine perfect echilibrul.
  • O alta problema ce a cauzat aparitia problemei de mai sus este modalitatea de alimentare a intregului circuit. Initial, am dorit sa folosesc un booster care se conecteaza la bateria externa, deci primeste 5V la intrare si scoate 10,3V, iesire ce este conectata direct la driverul de motoare. Intrarea acestui booster l-am conectat la intrarea placutei, dorind sa alimentez si placuta folosind aceeasi baterie externa. Insa, am observat ca robotul nu exeuta algoritmul daca plauta primeste alimentare prin booster, astfel a trebuit in ultimul moment sa schimb alimentarea. Prin urmare, placuta acum primeste alimentare de la bateria externa, iar boosterul este alimentat din placuta.

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.

Download

Schema electrica: hopa_mitica_final.sch
Arhiva cod: hopa_mitica_1_.zip

Jurnal

  • 21 Aprilie : Crearea paginii și a schemei bloc
  • 05 Mai : Adăugare schemă electrică
  • 10 - 12 Mai : Am creat suportul pentru robot si am adaugat componentele suplimentare pe suport.
  • 17 - 23 Mai : Am conectat si interactionat cu senzorul MPU6050, am scris codul pentru robot, am facut debugging folosind un LCD.

Bibliografie

pm/prj2019/mlungoci/hopa_mitica336.txt · Last modified: 2021/04/14 17:07 (external edit)
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