This shows you the differences between two versions of the page.
|
pm:prj2026:florin.stancu:dana_maria.caruntu [2026/05/06 21:33] dana_maria.caruntu |
pm:prj2026:florin.stancu:dana_maria.caruntu [2026/05/15 02:55] (current) dana_maria.caruntu [Hardware Design] |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | <note tip> | + | Acest proiect consta in realizarea unui robot mobil autonom, denumit Spiro-Bot, capabil sa deseneze forme geometrice complexe pe o suprafata plana. |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | * **Ce face:** Robotul se deplaseaza folosind tractiune diferentiala (sasiu 2WD rotund) si manipuleaza un instrument de scris aflat in centrul sau geometric cu ajutorul unui servomotor. Acesta executa secvente de miscari precise (rotatii pe loc, deplasari liniare) controlate prin semnale PWM, pentru a trasa pattern-uri matematice pe hartie. |
| - | * care este scopul lui | + | * **Scopul lui:** Obiectivul este crearea unui plotter mobil, complet independent de sine sau axe fixe de ghidaj, care sa transforme calculele geometrice si comenzile primite (via USART) in arta fizica 2D. |
| - | * care a fost ideea de la care aţi pornit | + | * **Ideea de la care am pornit:** Inspiratia a venit din nostalgia jucariilor copilariei (Spirograph) si din conceptul "Turtle Graphics" (limbajul Logo). Am dorit sa reproduc acel mecanism de generare a formelor abstracte, dar folosind o abordare de inginerie embedded si programare bare-metal. |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | * **De ce este util:** Pentru echipa este un exercitiu excelent de intelegere a cinematicii, controlului prin PWM si procesarii asincrone la nivel bare-metal. Pentru ceilalti, poate servi ca platforma educationala pentru a intelege cum algoritmii software se traduc direct in miscari mecanice. |
| - | </note> | + | |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| Line 17: | Line 16: | ||
| </note> | </note> | ||
| + | {{:pm:prj2026:florin.stancu:diagramabloc.png?800|}} | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | <note tip> | + | Design-ul fizic se bazeaza pe un sasiu circular pentru a permite rotatii precise pe loc, avand instrumentul de scris montat exact in centrul geometric pentru a asigura trasarea corecta a formelor matematice. Conexiunile sunt realizate prin fire Dupont, separand logica de forta. |
| - | Aici puneţi tot ce ţine de hardware design: | + | |
| - | * listă de piese | + | |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
| - | * diagrame de semnal | + | |
| - | * rezultatele simulării | + | |
| - | </note> | + | |
| + | **Lista de piese:** | ||
| + | |||
| + | * 1 x Microcontroler ATmega324P (pe placa de dezvoltare) | ||
| + | * 1 x Kit Sasiu Robot Rotund 2WD (include 2 roti motoare, 2 roti de sprijin) | ||
| + | * 1 x Modul Driver Motoare Dual L298N | ||
| + | * 1 x Modul Bluetooth HC-05 (interfata UART wireless) | ||
| + | * 1 x Servomotor SG90 (pentru mecanismul Pen-Up/Down) | ||
| + | * 2 x Motoare DC cu reductor (incluse in kit) | ||
| + | * 1 x Baterie 9V + Conector (alimentare logica microcontroler) | ||
| + | * 1 x Suport 4 baterii AA (alimentare forta driver motoare) | ||
| + | * Fire de conexiune Dupont (Mama-Tata, Mama-Mama) | ||
| + | * Elemente de fixare (coliere plastic, banda dublu adeziva) si un pix/carioca | ||
| + | |||
| + | ^ Board Pin ^ Function ^ Component ^ Direction ^ Description ^ | ||
| + | | Pin 4 | Digital Out | Driver L298N (IN1) | Output | Direcție motor stâng | | ||
| + | | Pin 5 | Digital Out | Driver L298N (IN2) | Output | Direcție motor stâng | | ||
| + | | Pin 6 | Digital Out | Driver L298N (IN3) | Output | Direcție motor drept | | ||
| + | | Pin 7 | Digital Out | Driver L298N (IN4) | Output | Direcție motor drept | | ||
| + | | Pin 10 | PWM Out | Driver L298N (ENA) | Output | Viteză motor stâng | | ||
| + | | Pin 11 | PWM Out | Driver L298N (ENB) | Output | Viteză motor drept | | ||
| + | | Pin 9 | PWM Out | Servomotor SG90 | Output | Control unghi braț | | ||
| + | | Pin 0 (RX) | UART RX | Bluetooth HC-05 | Input | Recepție date | | ||
| + | | Pin 1 (TX) | UART TX | Bluetooth HC-05 | Output | Transmisie date | | ||
| + | |||
| + | |||
| + | ==== Schematic ==== | ||
| + | {{:pm:prj2026:florin.stancu:schematic_spirobot.jpeg?800|}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | <note tip> | + | Dezvoltarea software este de tip bare-metal, bazată pe procesarea asincronă a comenzilor și controlul precis al mișcărilor. |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * **Mediu de dezvoltare:** C folosind avr-gcc și VS Code. |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * **Librării:** Exclusiv bibliotecile standard AVR (`<avr/io.h>`, `<avr/interrupt.h>`, `<util/delay.h>`). |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * **Algoritmi și structuri:** |
| - | * (etapa 3) surse şi funcţii implementate | + | * **Cinematică de tracțiune diferențială:** Calculează cât timp trebuie acționate roțile la un anumit nivel PWM pentru a parcurge o distanță sau a executa o rotație la un unghi dat. |
| - | </note> | + | * **Parser de comenzi:** Un buffer simplu de tip inel (ring buffer) pentru a stoca comenzile primite prin Bluetooth fără a bloca execuția. |
| + | * **Surse și funcții implementate:** | ||
| + | * `init_system()`: Configurează UART și Timerele pentru PWM. | ||
| + | * `ISR(USART0_RX_vect)`: Rutina de tratare a întreruperii pentru preluarea caracterelor trimise de pe telefon/PC. | ||
| + | * `set_pen(uint8_t state)`: Ajustează unghiul servomotorului pentru a ridica sau coborî pixul. | ||
| + | * `draw_segment(int speed_left, int speed_right, int duration)`: Comandă driverul L298N pentru a executa traiectoria calculată. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||