Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul presupune realizarea unui robot sub forma de turn, asezat pe doua roti, ce isi mentine starea verticala. Acest tip de robot se mai numeste si two wheeled inveted pendulum si reprezinta o implementare a celebrei probleme a pendulului invers. Video concept Aceasta problema nu este doar un subiect interesant de studiu, ci a dus la aparitia unor produse de succes cum ar fi Segway sau Hoverboard-ul si este intalnita adesea si in natura. Un exemplu in acest sens este corpul uman care isi mentine orientarea verticala in timpul mersului sau alergatului.
Robotul se foloseste de un Inertial Measurement Unit(IMU) pentru a citit unghiul de inclinatie, un controller PID pentru a calcula o comanda si doua perechi driver-motor pentru a-si schimba unghiul de inclinatie. De asemenea, o pereche de encodere la nivelul rotilor ii specifica distanta parcursa. Pentru a mentine robotul in pozitia verticala trebuie parcursi urmatorii pasi:
Giroscopul utilizat vine sub forma unui modul produs de Adafruit ce utilizeaza un senzor Bosch numit BNO055. Acesta cuprinde un giroscop, accelerometru, magnemtometru, precum si un filtru complementar care preia date de la toti cei trei senzori si determina cu o precizie sporita unghiul de inclinatie absolut pe fiecare axa.
Microcontrollerul(uC) este un Atmega328 in format surface mounted fara bootloader.
Driverele de Motoare sunt produse de Pololu, fiind suficient de puternice si eficiente cat sa lucreze cu tensiune intre 5V5 si 30V si curenti de peste 10A. Fiecare dintre aceste drivere primeste doua semnale de la uC. Un semnal DIR care isi specifica sensul de rotire al motoarelor si PWD, un semnal ce este amplificat si trimis la motoare. La baza, un driver de motoare este format dintr-o punte H, adica un set de patru tranzistori MOS, grupati doi cate doi. Semnalul DIR determina deschiderea a doi tranzistori si inchiderea celorlalti doi, determinand astfel sensul de rotire al motoarelor.
Acumulatorul Li-Po poate oferi curenti de ordinul zecilor de amperi, mentinand tensiunea de alimentare constanta. Pentru a determina nivelul de incarcare al bateriei, este necesara masurarea tensiunii la terminalele acesteia. Pentru a putea face acest lucru se foloseste un divizor de tensiune ce reduce tensiunea
sub cea de alimentare a microcontrollerului. Aceasta este apoi masurata cu ajutorul unui pin cu functie de ADC.
Sursa in comutatie este un dispozitiv electric care face conversie de la tensiunea de alimentare de pe baterie la tensiunea nominala a motoarelor, in acest caz, 6V. Tensiunea de iesire se poate regla folosind un potentiometru. Avantajul acesteia fata de un regulator este eficienta si capacitatea de a debita
curenti mari.
Motoarele sunt si ele produse de Pololu si au incorporat encodere care trimit un numar fix de impulsuri la uC pt fiecare rotire completa a rotii.
Lista completa:
Placa de sus, care contine bateria si partea de logica
Placa de jos, care contine motoarele si circuitele de putere
Robotul a fost programat in AVR Embedded C++ folosind programatorul AVRISP MKII si soft-ul Avrdude pentru incarcarea codului. Codul a fost compilat cu avr-gcc.
Software-ul ce ruleaza pe uC indeplineste numeroase functii:
Implementeaza controllerul PID:
Asigura comunicatia cu exteriorul
Implementeaza mecanisme de siguranta
Compenseaza pt Giroscope Drift
In anumite momente, giroscopul schimba ceea ce considera el ca este unghiul de 0 absolut cu cateva grade. Pentru a compensa pentru a ceasta eroare, deplasarea robotului inregistrata de encodere schimba unghiul, astfel ca dupa ce robotul se deplaseaza pe o distanta
scurta, unghiul de 0 absolut este din nou precis.
Prin schimbarea manuala a valorii acestui unghi se poate obtine ghidarea fata-spate de la distanta.
Robotul isi mentine orientarea verticala si poate fi ghidat fata-spate prin bluetooth. Rezultatul final poate fi vazut aici.