Table of Contents

Iulian-Răzvan MATEŞICĂ (25361) - Two-Wheeler

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Robot pe doua roti ce se balanseaza pentru a-si mentine pozitia de echilibru.

Descriere generală

Principiul de functionare este cel al pendulului invers. Robotul va sta pe doua roti si cu ajutorul unui IMU si a unui sistem de reglare automata va incerca sa isi mentina pozita verticala de echilibru indiferent de conditiile externe (teren inclinat, robot impins, etc). Va exista si o aplicatie pe PC de unde robotul va putea fi controlat si analizat cu ajutorul graficelor in timp real.

Hardware Design

Lista de piese

Am decis sa nu cumpar placa de baza oferita in cadrul laboratoarelor de PM ci mi-am realizat propria placa. Pentru realizarea placii am folosit aplicatia open-source KiCAD - atat pentru proiectarea schemei dar si a cablajului.

Am folosit ca microcontroller un ATmega328P in jurul caruia am plasat modulul IMU, driverele pentru motoare, led RGB de status, mufe pentru alimentare, modul bluetooth, mufe pentru motoare, dioda de protectie pentru polarizare inversa, etc.

Cablajul l-am realizat tot in KiCAD, dublu strat, iar pentru fabricarea acestuia am folosit metoda cu expunere a cablajului cu fotorezist la o lampa UV. Dupa expunere, placa a fost “developata” cu o solutie diluata de hidroxid de sodiu iar apoi lasata pentru cateva minute la corodat in clorura ferica.

Dupa aceste procese placuta arata asa:

Software Design

Mediul de dezvoltare folosit: Atmel Studio 7. Nu am folosit nici bootloader-ul pus la dispozitie de catre echipa de PM, ci am programat uC-ul direct - pentru asta am folosit programatorul USBASP.

Pentru mentinerea echilibrului am implementat un compensator PID. Microcontroler-ul comunica cu senzorul (IMU: accelerometru + gyro + magnetometru) prin I2C. Am scris o biblioteca special pentru comunicarea pe aceasta interfata cu orice dispozitiv. UC-ul este configurat ca master, iar senzorul ca slave.

Biblioteca pentru comunicare pe I2C a fost realizata de mine, insa biblioteca pentru configurarea si citirea valorilor de la senzori a fost realizata de catre producatorul senzorului. Producatorul a pus la dispozitie o biblioteca numai pentru a fi folosita impreuna cu Arduino. Am portat biblioteca de pa Arduino pe AVR.

Am configurat ADC-ul sa citeasca periodic valoarea tensiunii de la bornele bateriei - in cazul in aceasta scade sub o anumita valoare predefinita led-ul rosu de status va anunta acest lucru.

Am realizat o biblioteca de comunicare pe USART cu modulul de bluetooth. In cadrul bibliotecii am implementat un buffer circular pentru a o face cat mai usor de folosit si cat mai eficienta.

In cadrul compensatorului PID am avut nevoie sa cunosc frecventa (perioada de timp) cu care se realizeaza citirea senzorilor si corectia - pentru acest lucru am configurat Timer-ul 2 si il folosesc pentru masurarea timpului scurs de cand uC-ul a fost alimentat. Perioada de timp (dt) intra in calcului termenilor D si I.

Am realizat si o mica biblioteca pentru controlarea motoarelor de curent continuu - fiecare motor e controlat de cate un driver, care la randul lor e controlat de uC printr-un pin de PWM si unul de directie. Motoarele sunt controlate in turatie prin variatia factorului de umplere.

Rezultate Obţinute

Download

twowheeler.zip

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.