This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:andrei_traian.dobrescu [2026/05/09 10:25] nicolae.macovei1412 created |
pm:prj2026:bianca.popa1106:andrei_traian.dobrescu [2026/05/27 10:34] (current) andrei.dobrescu2402 |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | Brat Robotic | + | ====== Brat Robotic ====== |
| - | # Introducere | ||
| - | # Descriere generala | + | ===== 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: | ||
| + | |||
| + | <code ini> | ||
| + | [env:ATmega328P_Xplained_Mini] | ||
| + | platform = atmelavr | ||
| + | board = ATmega328P_Xplained_Mini | ||
| + | framework = arduino | ||
| + | upload_protocol = xplainedmini | ||
| + | lib_deps = | ||
| + | arduino-libraries/Servo | ||
| + | </code> | ||
| + | |||
| + | |||
| + | ==== 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. | ||
| - | # Hardware design | ||