Table of Contents

Brat Robotic

Introducere

Proiectul consta in realizarea unui brat robotic de aproximativ 30 cm lungime, cu cinci grade de libertate, controlat wireless prin intermediul unui modul Bluetooth de pe un dispozitiv mobil sau calculator. Bratul poate executa miscari de rotatie pe axa verticala (yaw) la baza, flexie in articulatia umarului, flexie in articulatia cotului, rotatie a incheieturii si deschidere-inchidere a unui gripper. Scopul principal al proiectului este integrarea mai multor tipuri de actuatoare intr-un sistem embedded functional, acoperind atat lantul de alimentare, cat si comunicatia wireless si controlul in bucla deschisa al motoarelor. Ideea a pornit de la dorinta de a construi un manipulator compact care sa poata fi folosit ca platforma de experimentare pentru algoritmi de cinematica si control. Proiectul este util ca punct de plecare pentru oricine doreste sa inteleaga cum se integreaza un microcontroller cu drivere de servomotoare, drivere de motoare DC cu encoder si comunicatie seriala fara fir, intr-un proiect mecatronic complet.

Descriere generala

Sistemul este compus din patru subsisteme principale care interactioneaza intre ele: subsistemul de alimentare, subsistemul de control, subsistemul de comunicatie si subsistemul de actionare. Subsistemul de alimentare furnizeaza energia intregului sistem. Trei acumulatori 18650 conectati in serie formeaza un pachet 3S de 11,1V. Un modul BMS asigura protectia la supradescarcare, supradescarcare si scurtcircuit. Un buck converter regleaza tensiunea de la 11,1V la 6V pentru alimentarea servomotoarelor. Un regulator LM7805 coboara ulterior tensiunea la 5V pentru microcontroller. Incarcarea pachetului se face prin intermediul unui modul USB Type-C cu balansare. Subsistemul de control este reprezentat de un microcontroller ATmega328p care coordoneaza toate celelalte module. El comunica cu driverul de servomotoare prin I2C, cu driverul de motor DC prin linii GPIO/PWM si cu modulul Bluetooth prin interfata UART. Subsistemul de comunicatie consta in modulul HC-05, care primeste comenzi de pozitie de la un host extern si le transmite microcontrollerului prin UART. Subsistemul de actionare include driverul PCA9685, care genereaza semnale PWM pentru cele cinci servomotoare (trei MG995 si doua MG90S), si driverul TB6612FNG, care controleaza motorul DC cu encoder responsabil de rotatia bazei.

Schema bloc

                   +---------------------------+
                   |    SURSA DE ALIMENTARE    |
                   |   Baterii 18650 3S        |
                   |        (11.1V)            |
                   +-------------+-------------+
                                 |
                   +-------------v-------------+
                   |            BMS            |
                   | (protectie baterie 3S)    |
                   +------+------------+-------+
                          |            |
           +--------------v--+    +----v--------------------+
           |  Buck Converter |    |   Modul Incarcare       |
           |  11.1V -> 6V    |    |   USB Type-C 3S         |
           +--------+--------+    +-------------------------+
                    |
           +--------+--------+
           |                 |
   +-------v------+   +------v------+
   |   LM7805     |   | Iesire 6V   |
   | (5V, 1.5A)   |   | (Servos)    |
   +-------+------+   +------+------+
           |                 |
   +-------v-----------------v-------+
   |                                 |
   |          ATmega328p             |
   |      (microcontroller)          |
   |                                 |
   |   UART        I2C      GPIO/PWM |
   +-----+----------+----------+----+
         |          |          |
  +------v---+  +---v------+  +v-----------+
  |  HC-05   |  | PCA9685  |  | TB6612FNG  |
  |Bluetooth |  |  Servo   |  |   Motor    |
  |  (UART)  |  |  Driver  |  |   Driver   |
  +----------+  +----+-----+  +-----+------+
                     |              |
          +----------+--------+     |
          |                   |     v
   +------v------+   +--------v-+ +-v-----------+
   |  MG995 x2   |   |   MG90S  | | Motor DC +  |
   |  (Umar,     |   | (Gripper,| | Encoder     |
   |   Cot,      |   |  Mana)   | | (Yaw baza)  |
   |   Incheiet.)|   +----------+ +-------------+
   +-------------+

Hardware design

Lista de componente:

Software Design

Mediu de dezvoltare

Firmware-ul a fost dezvoltat in PlatformIO, rulat in interiorul editorului Visual Studio Code, folosind framework-ul Arduino pentru ATmega328p.

PlatformIO a fost ales dupa incercari initiale cu Arduino IDE, care a intampinat dificultati repetate in comunicarea cu programatorul mEDBG integrat.

Configuratia platformio.ini folosita:

[env:ATmega328P_Xplained_Mini]
platform = atmelavr
board = ATmega328P_Xplained_Mini
framework = arduino
upload_protocol = xplainedmini
lib_deps =
    arduino-libraries/Servo

Biblioteci si surse 3rd-party

analogWrite, pinMode si primitivele de temporizare.

pentru comanda servomotoarelor. Biblioteca foloseste Timer1 pentru a produce

  trenul de impulsuri, permitand comanda servomotoarelor direct de la pinii
  GPIO ai microcontrollerului.

Periferice si resurse utilizate

impulsurilor de comanda a servomotoarelor.

de viteza catre driverul de motor.

liniile de semnal pentru servomotoare.

encoderului in cuadratura al motorului de la baza.

Algoritmi si implementare

Firmware-ul implementeaza un interpretor de comenzi in bucla deschisa. Comenzile sunt primite pe UART (de la HC-05) sub forma <litera><valoare>:

^ Comanda ^ Tinta ^ Interval valoare ^

s Servo umar 0 - 180 (grade)
e Servo cot 0 - 180 (grade)
c Servo gripper 0 - 180 (grade)
y Motor DC yaw -255 .. 255 (PWM cu semn)

Interpretarea comenzilor. Bucla principala asambleaza caracterele primite intr-un buffer pana cand fie se primeste un terminator de linie, fie expira un scurt timeout intre caractere. Acest mecanism face interpretorul robust indiferent daca terminalul adauga sau nu un caracter de linie noua. Sirul complet este transmis functiei processCommand(), care extrage litera articulatiei si valoarea intreaga cu atoi().

Comanda servomotoarelor. Fiecare articulatie este reprezentata de un obiect Servo atasat pinului sau de semnal. O comanda scrie direct unghiul cerut prin Servo::write(). Pozitia comandata este mentinuta timp de o secunda inainte de procesarea urmatoarei comenzi.

Comanda motorului DC. Motorul de la baza (yaw) este comandat prin puntea H TB6612FNG:

umplere PWM (PWMA) in functie de semnul si modulul valorii speed.

Datasheet-ul motorului avertizeaza ca schimbarea sensului de rotatie in timp

  ce motorul este inca in miscare il poate defecta; de aceea functia coboara
  intotdeauna viteza pana la zero, face o pauza, si abia apoi creste viteza in
  noul sens. Astfel se evita varful mare de curent asociat inversarii bruste
  de sens.

Functii implementate:

motor.

articulatia corespunzatoare.

motorului.

comenzile complete.

Rezultate Obtinute

individual prin comenzi seriale.

reglabila, prin driverul TB6612FNG, cu o accelerare in rampa care protejeaza

  motorul la schimbarile de sens.
* Controlul wireless a fost realizat: comenzile trimise dintr-o aplicatie de
  terminal Bluetooth de pe telefon sunt primite de ATmega328p prin modulul
  HC-05 si actioneaza corect articulatiile.
* Subsistemul de alimentare (pachet 3S 18650, BMS, buck converter si modul de
  incarcare USB-C) a fost asamblat si validat.
  
  ===== Concluzii =====

Proiectul a demonstrat integrarea mai multor tipuri de actuatoare - servomotoare hobby si un motor DC cu reductor si encoder - intr-un singur sistem embedded controlat wireless.

Cele mai valoroase lectii au venit din partile proiectului care nu au tinut strict de software: Lant de instrumente (toolchain). Trecerea de la Arduino IDE la

  PlatformIO a eliminat o categorie larga de probleme legate de programator si
  drivere ale placii Xplained Mini.

Electronica de putere. Rutarea corecta a modulului de incarcare, a

  BMS-ului si a buck converterului este critica: incarcatorul trebuie conectat
  direct la bornele bateriilor, iar masele de semnal si cele de curent mare
  trebuie sa se intalneasca intr-un singur punct stea.

Particularitatile placii. Placa ATmega328p Xplained Mini nu dispune de

  un pin VIN regulat de tip Arduino - alimentarea externa trebuie furnizata
  direct pe linia VCC.

Adaptarea nivelelor logice. Un simplu divizor rezistiv pe linia RX a

  modulului HC-05 s-a dovedit a fi la limita in practica; un translator de
  nivel logic dedicat este solutia mai fiabila.

Posibile imbunatatiri viitoare includ controlul in bucla inchisa al bazei folosind feedback-ul de la encoder, inlocuirea cablajului pe breadboard cu un cablaj imprimat dedicat si adaugarea cinematicii inverse, astfel incat bratul sa poata fi comandat in coordonate carteziene.