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

  • 1 x ATMEGA328P-AU
  • 1 x L7805CV
  • 1 x Pushbutton: TACT-64N-F
  • 1 x LED RGB 5MM Common Cathod
  • 1 x K1X10 WSL040, COD: HN1X40
  • 1 x RN42 Bluetooth Module
  • 1 x 20MHZ QMIM016, COD: Q16.000
  • 1 x IMU 9DOF Bosch BNO055
  • 2 x MOSFET N-Channel BSS138
  • 2 x Pololu md07a motor driver
  • 2 x Pololu 25Dx50L Gearmotor
  • 2 x Roti 60x8mm MCN-RS-07 582
  • 1 x ZIPPY Compact 500mAh 3S 35C Lipo Pack
  • Condensator 10uF, 0.33uF, 0.1uF, 22pF
  • Rezistente diferite valori: 330R, 10K, 12K, 20K

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

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.

pm/prj2016/aconstantinescu/twowheeler.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