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:

  • ATmega328p — microcontroller principal, 1 bucata, aflat in posesia autorului.
  • PCA9685 Servo Driver — driver PWM pe 16 canale cu interfata I2C, 1 bucata. Folosit pentru generarea semnalelor PWM catre toate servomotoarele, degrevand microcontrollerul de aceasta sarcina.
  • MG995 Servo — servomotor cu angrenaje metalice, 180 grade, 11 kg*cm, 3 bucati. Utilizate pentru articulatiile umarului, cotului si incheieturii.
  • MG90S Servo — servomotor miniatura cu angrenaje metalice, 2 bucati. Utilizate pentru gripper si mana.
  • Motor DC cu reductor si encoder 25GA370, 6VDC, 200RPM — 1 bucata. Folosit pentru rotatia bazei bratului pe axa yaw cu feedback de pozitie prin encoder.
  • Driver motor TB6612FNG — punte H dubla, 15V, 1A, 1 bucata. Folosit pentru controlul directiei si vitezei motorului DC de la baza.
  • Suport acumulatori 18650 3S — 1 bucata.
  • Baterie 18650 Samsung INR18650-35E, 3.6V, 3500mAh — 3 bucati, conectate in serie pentru a forma un pachet 3S de 11,1V nominal.
  • Buck Converter XH-M401 (4-40V intrare, 1.25-36V iesire, 8A, 200W) — 1 bucata. Regleaza tensiunea pachetului de baterii la 6V pentru alimentarea servomotoarelro. Ales pentru capacitatea de curent de 8A, necesara la pornirea simultana a mai multor servomotoare.
  • Regulator de tensiune LM7805 (5V, 1.5A) — 1 bucata. Alimenteaza microcontrollerul ATmega328p si logica digitala la 5V stabili, plasat dupa buck converter.
  • BMS 3S, 12V, 10A — 1 bucata. Asigura protectia pachetului de baterii la supradescarcare, supradescarcare si scurtcircuit.
  • Modul incarcare 3S cu balansare, USB Type-C — 1 bucata. Permite incarcarea in siguranta a pachetului 3S direct prin conector USB Type-C.
  • Modul Bluetooth HC-05 — 1 bucata. Asigura comunicatia wireless cu un dispozitiv extern prin UART, permitand transmiterea comenzilor de pozitie catre microcontroller.
  • Breadboard 400 puncte — 2 bucati. Utilizate pentru prototiparea circuitelor de control si conexiunile electronice.
  • Componente mecanice

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

  • Arduino core for AVR - ofera Serial, digitalWrite,

analogWrite, pinMode si primitivele de temporizare.

  • Servo (arduino-libraries/Servo) - genereaza semnalul PWM de 50 Hz

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

  • UART - comunicatia cu modulul Bluetooth HC-05 la 9600 baud.
  • Timer1 - utilizat intern de biblioteca Servo pentru generarea

impulsurilor de comanda a servomotoarelor.

  • Timer0 - utilizat de analogWrite() pentru generarea semnalului PWM

de viteza catre driverul de motor.

  • GPIO - liniile de directie si standby pentru TB6612FNG, precum si

liniile de semnal pentru servomotoare.

  • Intreruperi externe INT0/INT1 (pinii PD2/PD3) - rezervate pentru citirea

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:

  • applyMotor(speed) seteaza pinii de directie (AIN1/AIN2) si factorul de

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

  • setMotorSpeed(target) realizeaza o rampa controlata de viteza.

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:

  • applyMotor(int speed) - driver de nivel jos pentru puntea H.
  • setMotorSpeed(int target) - control de viteza cu rampa, sigur pentru

motor.

  • processCommand(const char *cmd) - interpreteaza o comanda si actioneaza

articulatia corespunzatoare.

  • setup() - initializeaza UART, obiectele Servo si pinii de comanda ai

motorului.

  • loop() - memoreaza intr-un buffer datele primite pe UART si dispeceriza

comenzile complete.

Rezultate Obtinute

  • Cele trei articulatii cu servomotor (umar, cot, gripper) pot fi pozitionate

individual prin comenzi seriale.

  • Motorul DC de la baza poate fi actionat in ambele sensuri, cu viteza

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.

pm/prj2026/bianca.popa1106/andrei_traian.dobrescu.txt · Last modified: 2026/05/27 10:34 by andrei.dobrescu2402
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