Autorul poate fi contactat la adresa: Login pentru adresa
Robot pe doua roti ce se balanseaza pentru a-si mentine pozitia de echilibru.
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.
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:
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.