Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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. 
  
pm/prj2026/bianca.popa1106/andrei_traian.dobrescu.1778360538.txt.gz · Last modified: 2026/05/10 00:02 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