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:36]
andrei.dobrescu2402
pm:prj2026:bianca.popa1106:andrei_traian.dobrescu [2026/05/27 10:34] (current)
andrei.dobrescu2402
Line 77: Line 77:
   * 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.1778362575.txt.gz · Last modified: 2026/05/10 00:36 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