This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:toma.ariciu [2026/05/09 23:42] toma.ariciu created |
pm:prj2026:bianca.popa1106:toma.ariciu [2026/05/09 23:58] (current) toma.ariciu [Software Design] |
||
|---|---|---|---|
| Line 11: | Line 11: | ||
| * Poți compara timpii cu prietenii sau să-ți urmărești progresul între sesiuni. | * Poți compara timpii cu prietenii sau să-ți urmărești progresul între sesiuni. | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| + | {{:pm:prj2026:bianca.popa1106:schema-bloc-toma.jpg?500|}} | ||
| - | <note tip> | + | Sistemul este construit în jurul plăcii ATmega328P Xplained Mini, alimentată prin USB de la un laptop sau o baterie externă. Microcontrolerul comunică cu patru grupuri de periferice: |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | **Detecție.** Trei senzori IR de obstacole sunt amplasați la limitele dintre sectoare, lângă pistă. Fiecare senzor declanșează o întrerupere externă pe ATmega328P când vehiculul trece prin dreptul lui. |
| - | </note> | + | |
| + | **Cronometraj.** Timer1 al microcontrolerului (16 biți) servește ca bază de timp principală. La fiecare întrerupere de la senzori, valoarea curentă a timer-ului este capturată în software și folosită pentru a calcula timpul scurs de la trecerea anterioară. | ||
| + | |||
| + | **Feedback vizual.** Trei LED-uri RGB (câte unul per sector) arată rezultatul comparației dintre timpul nou-măsurat, turul anterior și recordul sesiunii: | ||
| + | * **Mov** - record absolut pe sectorul respectiv | ||
| + | * **Verde** - record personal pe sectorul respectiv | ||
| + | * **Galben** - mai lent decât recordul personal | ||
| + | |||
| + | **Afișaj.** Un LCD 16×2 conectat prin I²C arată numărul turului curent, timpii pe sectoare în timp real, cel mai bun tur și diferențele față de el. | ||
| + | |||
| + | **Control.** Două butoane permit resetarea sesiunii curente, respectiv ștergerea tuturor valorilor salvate pentru ziua curentă. | ||
| + | |||
| + | Sesiunea funcționează în model //qualifying lap//: cronometrul pornește la prima trecere prin dreptul senzorului de start, iar fiecare trecere ulterioară prin același punct închide turul curent și îl pornește pe următorul. | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | <note tip> | + | ==== Listă de componente ==== |
| - | 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> | + | |
| + | ^ Componentă ^ Rol în proiect ^ | ||
| + | | ATmega328P-XMINI | Microcontrolerul care rulează firmware-ul. mEDBG-ul integrat pe placă permite programarea și debugging-ul prin USB. | | ||
| + | | 3× Senzor IR de obstacole (3.3–5 V) | Detectează trecerea vehiculului prin cele trei puncte de control. | | ||
| + | | 3× LED RGB 5 mm cu catod comun | Indicator vizual per sector (mov / verde / galben). | | ||
| + | | 1× LCD 1602 + modul I²C | Afișaj numeric pentru tur, sectoare și delta. | | ||
| + | | 2× Buton PCB tactil (12×12×7.3 mm) | Resetare sesiune și resetare valori salvate. | | ||
| + | |||
| + | ==== Justificarea componentelor ==== | ||
| + | |||
| + | **Senzorii IR de obstacole** au fost aleși pentru că oferă un semnal digital simplu (HIGH/LOW), compatibil direct cu pinii cu întrerupere externă ai ATmega328P. Pragul de detecție se reglează din potențiometrul de pe modul, ceea ce permite calibrarea în funcție de pistă și de obiectul detectat. | ||
| + | |||
| + | **LED-urile RGB cu catod comun** au fost preferate în locul a trei LED-uri colorate separate per sector, pentru ca toate cele trei culori să apară în aceeași poziție fizică. Pentru cele trei culori discrete folosite (mov, verde, galben) este suficient controlul digital pe fiecare canal, fără PWM. | ||
| + | |||
| + | **LCD-ul cu adaptor I²C** reduce numărul de pini ocupați de la șase (mod paralel) la doi (SDA, SCL), eliberând GPIO pentru senzori, LED-uri și butoane. | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | **Mediu de dezvoltare:** PlatformIO cu framework-ul MiniCore. | ||
| + | |||
| + | Logica programului se bazează pe măsurarea timpului scurs între întreruperile generate de cei trei senzori IR, folosind Timer1 pe 16 biți ca bază de timp. | ||
| - | <note tip> | + | **Structura algoritmului:** |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| + | - Inițializare: configurarea pinilor I/O, a Timer1, a întreruperilor externe pentru senzori și a interfeței I²C pentru LCD. | ||
| + | - Bucla principală: | ||
| + | - Așteptarea unui flag setat de un ISR la trecerea vehiculului prin dreptul unui senzor. | ||
| + | - Calculul timpului pe sectorul închis ca diferență între capturile Timer1. | ||
| + | - Compararea timpului nou cu recordul personal al sesiunii și cu recordul absolut al zilei. | ||
| + | - Actualizarea culorii LED-ului pentru sectorul respectiv (mov / verde / galben). | ||
| + | - Actualizarea afișajului LCD cu turul curent, timpii pe sectoare și delta. | ||
| + | - Tratarea butoanelor (cu debouncing software) pentru reset sesiune și reset valori salvate. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||