This is an old revision of the document!


Self Balanced Robot

Introducere

Un robotel cat de cat inalt, cu doua roti, ce se balanseaza cat sa ramana in picioare mergand in fata sau in spate, opus directiei in care teoretic ar cadea la un moment de timp. Astfel, in aproape continua miscare, reuseste sa ramana in picioare, in ciuda centrului inalt de greutate.

Descriere generală

Un robotel ce foloseste un giroscop pentru a intelege in ce directie cade (fata sau spate), intr-un timp destul de scurt cat sa poata actione motoarele pentru a invarti rotile, astfel compensand caderea inclinandu-se in partea opusa necesar cat sa anuleze caderea. Aceasta functie se repeta incontinuu, stand foarte aproape de centrul de balansare tot timpul, rezistand inclusiv la impingeri din partea unei persoane sau alti factori disruptivi decat doar gravitatia.

Schema logica

Giroscopinformatii—> Microprocesorvoltaj—> Motoareinvartire—> Roti

Schema Eagle

**Descriere software**

Foloseste giroscopul pentru a prelua nivelul de inclinare. Porneste motoarele si invarte rotile in directia opusa (aceeasi directie cu caderea) pana se ajunge iar intr-o pozitie verticala. Apoi se permite iar caderea intr-o directie si repornirea rotilor, facand aceste comenzi la infinit.

**Descriere hardware**

Un robotel ce se sprijina de pamant doar folosind 2 roti, avand o structura cat de cat inalta, verticala. Rotile sunt conectate la motoare, alimentate de baterii. Motoarele sunt declansate de catre placuta Arduino, ce contine software-ul prezentat mai sus. Giroscopul transmite informatii despre unghiul de inclinare incontinuu microprocesorului, pentru a determina in ce fel sa activeze motoarele.

Hardware Design

Componente:

  • Placa Arduino → Pentru partea software a robotului
  • Breadboard → Pentru a conecta componentele intre ele
  • 4 Baterii AA + Suport de baterii → Pentru a alimenta motoarele
  • Baterie 9V → Pentru a alimenta microprocesorul Arduino
  • 2 servomotoare continue → Pentru a controla miscarea rotilor
  • 2 roti → Pentru a permite robotului sa se miste, astfel balansandu-se singur
  • Modul Giroscop analog → Pentru a determina inclinarea robotului
  • Cabluri, elastice, suporti din plastic → Pentru suport fizic

Observatie: Din doua servomotoare ce blocau miscarea rotilor la maxim 90 de grade in fiecare parte, am desfacut motoarele, am taiat accesul la cate un potentiometru intern si am taiat un cub ce bloca invartirea rotilor la mai mult de 90 de grade pentru a obtine 2 servomotoare continue.

Robotul final:

Software Design

  • libraria <Servo.h> - pentru controlul servomotoarelor
  • librariile “Wire.h” si “I2C.h”- pentru a comunica cu componente I2c (giroscopul) - |Sursa librarii
  • |libraria "PID_v1.h" - pentru calculul complex si fine-tuned al vitezelor servomotoarelor

Tot algoritmul este format in mare din 3 mari componente:

1. Giroscopul:

Folosind functii specifice I2C, se preiau din senzor datele giroscopului. Avem acces si la un accelerometru, barometru si senzor de temperatura prin modulul ales, dar ne intereseaza doar giroscopul. In special, pe directia Ox, intrucat avem 2 roti si ne intereseaza doar miscarea fata-spate.

2. Servomotoarele:

Cea mai simpla parte, atasam pinii 11 si 12 la cele 2 motoare si atasam unghiuri suplementare celor 2 servomotoare pentru o rotatie continua in aceeasi directie a robotului.

3. PID

Se foloseste algoritmul PID pentru a determina viteza servomotoarelor in functie de datele de la giroscop.

O foarte mare parte a timpului a fost consumat facand fine-tuning pe valorile acestui sistem. Acesta foloseste 3 variabile (Kp, Ki, Kd), care reprezinta niste integrale si derivate pe care nu le-am inteles prea bine, care depind foarte mult de specificatii gen greutatea robotului, diametrul rotilor etc, care se pot afla doar prin trial and error pentru ca robotul sa se balanseze bine.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

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.

Export to PDF

pm/prj2023/ncaroi/self-balanced-robot.1685221488.txt.gz · Last modified: 2023/05/28 00:04 by radu_stefan.zamfir
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