This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:andrei_traian.dobrescu [2026/05/10 00:02] andrei.dobrescu2402 |
pm:prj2026:bianca.popa1106:andrei_traian.dobrescu [2026/05/27 10:34] (current) andrei.dobrescu2402 |
||
|---|---|---|---|
| Line 55: | Line 55: | ||
| | | v | | | v | ||
| +------v------+ +--------v-+ +-v-----------+ | +------v------+ +--------v-+ +-v-----------+ | ||
| - | | MG995 x3 | | MG90S x2 | | Motor DC + | | + | | MG995 x2 | | MG90S | | Motor DC + | |
| | (Umar, | | (Gripper,| | Encoder | | | (Umar, | | (Gripper,| | Encoder | | ||
| | Cot, | | Mana) | | (Yaw baza) | | | Cot, | | Mana) | | (Yaw baza) | | ||
| Line 61: | Line 61: | ||
| +-------------+ | +-------------+ | ||
| ===== Hardware design ===== | ===== Hardware design ===== | ||
| - | |||
| Lista de componente: | Lista de componente: | ||
| - | * ATmega328p — microcontroller principal, 1 bucata, aflat in posesia autorului. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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. | + | * 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 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. | + | * 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. | + | * Breadboard 400 puncte — 2 bucati. Utilizate pentru prototiparea circuitelor de control si conexiunile electronice. |
| - | * Componente mecanice | + | * 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. | ||