This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:robin.popa [2026/05/06 15:25] robin.popa [2. Descriere Generală] |
pm:prj2026:atoader:robin.popa [2026/05/16 19:14] (current) robin.popa |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Proiect PM: Radar de Parcare (Asistent de proximitate) ====== | + | ====== Radar de Parcare (Asistent de proximitate) ====== |
| ===== 1. Introducere ===== | ===== 1. Introducere ===== | ||
| **Descrierea proiectului:** | **Descrierea proiectului:** | ||
| - | Proiectul constă în implementarea unui sistem de asistență la parcare (radar de proximitate) la scară redusă, având la bază microcontrolerul ATmega328P. Sistemul emite unde ultrasonice pentru a detecta distanța până la cel mai apropiat obstacol și oferă utilizatorului un feedback dublu: vizual (printr-un LED RGB) și sonor (printr-un buzzer pasiv). | + | Proiectul constă în implementarea unui sistem de asistență la parcare (radar de proximitate) la scară redusă, având la bază microcontrolerul ATmega328P. Sistemul emite unde ultrasonice pentru a detecta distanța până la cel mai apropiat obstacol și oferă utilizatorului un feedback dublu: vizual (printr-un LED RGB), sonor (printr-un buzzer pasiv) și de date (prin consolă serială). |
| **Scopul proiectului:** | **Scopul proiectului:** | ||
| - | Scopul principal este de a crea un sistem de avertizare în timp real, capabil să proceseze date de la un senzor extern și să avertizeze șoferul/utilizatorul proporțional cu gradul de pericol (distanța până la obstacol). Proiectul demonstrează interfațarea microcontrolerului cu periferice externe folosind concepte fundamentale precum GPIO, Timere hardware și generare de semnale PWM. | + | Scopul principal este de a crea un sistem de avertizare în timp real, capabil să proceseze date de la un senzor extern și să avertizeze șoferul/utilizatorul proporțional cu gradul de pericol (distanța până la obstacol). Proiectul demonstrează interfațarea microcontrolerului cu periferice externe folosind concepte fundamentale precum GPIO, Timere hardware, USART și Întreruperi (ISR). |
| **Ideea de la care a pornit:** | **Ideea de la care a pornit:** | ||
| Line 17: | Line 17: | ||
| $d = \frac{t \cdot v_{sunet}}{2}$ | $d = \frac{t \cdot v_{sunet}}{2}$ | ||
| - | În funcție de pragurile predefinite în cod, sistemul de decizie hardware acționează pinii asociați culorilor LED-ului RGB (Verde = Sigur, Galben = Atenție, Roșu = Pericol) și ajustează frecvența semnalului PWM trimis către buzzer (de la bipuri rare la un sunet continuu). | + | În funcție de pragurile predefinite în cod, sistemul de decizie hardware acționează pinii asociați culorilor LED-ului RGB (Verde = Sigur, Galben = Atenție, Roșu = Pericol) și ajustează frecvența semnalului PWM trimis către buzzer (de la bipuri rare la un sunet continuu). Suplimentar, utilizatorul poate interacționa cu sistemul în mod asincron via consolă serială. |
| {{ :pm:prj2026:atoader:radar_de_parcare_diagrama.png?500 |}} | {{ :pm:prj2026:atoader:radar_de_parcare_diagrama.png?500 |}} | ||
| Line 46: | Line 46: | ||
| * ''Pinul Albastru (B)'' -> **PC2** | * ''Pinul Albastru (B)'' -> **PC2** | ||
| - | //Aici va fi inserată schema electrică exportată din KiCad / Fritzing// | + | {{ :pm:prj2026:atoader:radar_de_parcare_sch.png?800 | Schema Electrică KiCad - Radar de Parcare}} |
| + | {{:pm:prj2026:atoader:radar_parcare.pdf | Schema Electrică KiCad - Radar de Parcare PDF}} | ||
| + | |||
| + | **Diagrame de semnal:** | ||
| + | Pentru a calcula distanța, sistemul comunică cu senzorul HC-SR04 respectând diagrama de timp de mai jos (conform datasheet-ului oficial): | ||
| + | - Microcontrolerul trimite un puls HIGH de minim 10 µs pe pinul **Trig**. | ||
| + | - Senzorul emite intern un burst de 8 impulsuri sonore la 40 kHz. | ||
| + | - Senzorul ridică pinul **Echo** pe HIGH. Lățimea acestui puls este direct proporțională cu timpul de propagare a sunetului până la obstacol și înapoi. | ||
| + | |||
| + | {{ :pm:prj2026:atoader:semnal_senzor.png?500 |}} | ||
| + | |||
| + | Formula de conversie utilizată în cod pe baza acestui semnal este: $Distanța (cm) = \frac{Timpul (\mu s)}{58}$. | ||
| + | |||
| + | **Rezultatele simulării (TinkerCAD):** | ||
| + | Înainte de asamblarea fizică, hardware-ul și logica mașinii de stări au fost modelate și validate în mediul de simulare **TinkerCAD**. | ||
| + | Sistemul reacționează în timp real la apropierea obstacolului virtual, modificând starea: | ||
| + | * **Verde (> 150 cm):** Ritm lent ("respiră" încet, bip-uri scurte și rare). | ||
| + | * **Galben (50 - 150 cm):** Ritm alert. | ||
| + | * **Roșu (< 50 cm):** Ritm de panică (LED-ul pulsează fulgerător, bip-uri tăioase și dese). | ||
| + | |||
| + | {{ :pm:prj2026:atoader:radar_parcare_tinkercad_demo.gif?300 |}} | ||
| + | |||
| + | **Note privind simularea hardware:** | ||
| + | Din cauza unor limitări cunoscute ale motorului de simulare web TinkerCAD la sincronizarea timerelor hardware interne din AVR cu modelele fizice virtuale (fenomenul de //Echo Lock-up//), codul rulat în simulator a necesitat o adaptare. Pentru a valida vizual efectul de Software PWM pe LED și sincronizarea buzzer-ului, s-a utilizat un "Software Counter" pentru citirea distanței. Pe implementarea hardware fizică (varianta finală a proiectului), acest workaround este eliminat, sistemul folosind strict **Timer-ul 1 Hardware (16-bit)** pentru a măsura cu precizie absolută pulsul de pe pinul Echo. | ||
| + | |||
| + | 🌐 **[[https://www.tinkercad.com/things/gwLODwrbWQf-radar-de-parcare/editel?returnTo=%2Fdashboard%2Fdesigns%2Fcircuits | Apasă aici pentru a deschide și testa simularea interactivă direct în TinkerCAD]]** | ||
| ===== 4. Software Design ===== | ===== 4. Software Design ===== | ||
| - | **Concepte și Laboratoare folosite:** | + | **Mediul de dezvoltare:** |
| - | * **Lab 1 (GPIO):** Configurarea porturilor. ''PORTC'' pentru ieșirile către LED-ul RGB. ''PORTD'' (PD2) ca ieșire pentru Trigger-ul senzorului. | + | Proiectul va fi dezvoltat folosind mediul **Visual Studio Code (VS Code)**, având instalată extensia **PlatformIO**. Se va folosi framework-ul nativ ''Atmel AVR'' (fără framework-ul Arduino), compilatorul folosit fiind ''avr-gcc''. Încărcarea codului (upload) se va face nativ prin portul USB, folosind interfața mEDBG integrată pe plăcuța ATmega328P Xplained Mini. Simularea inițială a circuitului și a registrilor se va face în **TinkerCAD**. |
| - | * **Lab 3 (Timere și PWM):** | + | |
| - | * **Timer 1 (16-bit):** Va fi folosit pentru a măsura durata pulsului ''Echo'' primit de la senzor. Setăm timerul să pornească la tranziția pozitivă a pinului și să se oprească la tranziția negativă. | + | **Biblioteci și surse 3rd-party folosite:** |
| - | * **Timer 2 (8-bit):** Va fi configurat în modul CTC sau Fast PWM pe pinul PD3 pentru a genera o frecvență audibilă în buzzer (ex: 1 kHz). Viteza de repetare a sunetului va fi controlată logic în funcție de distanță. | + | Fiind un proiect de tip "bare-metal", nu se vor utiliza biblioteci externe de nivel înalt. Se vor folosi exclusiv bibliotecile standard din suita **AVR Libc**: |
| - | * **Logica aplicației:** Se definesc trei stări (VERDE, GALBEN, ROSU). O mașină de stări (State Machine) simplă schimbă starea pinilor LED-ului RGB și frecvența sunetului. | + | * ''<avr/io.h>'' - pentru accesul la regiștrii hardware (ex: PORTB, DDRD, TCCR1A etc.). |
| + | * ''<avr/interrupt.h>'' - pentru manipularea vectorilor de întrerupere (ISR). | ||
| + | * ''<util/delay.h>'' - pentru funcții blocante necesare la generarea de tonuri sau inițializări. | ||
| + | |||
| + | **Algoritmi și structuri de date planificate:** | ||
| + | Logica principală a programului este implementată sub forma unui **Finite State Machine (Mașină de Stări - FSM)** cu multiple stări principale, corespunzătoare distanței și evenimentelor: | ||
| + | * ''STATE_STANDBY'' (Stins / Repaus) | ||
| + | * ''STATE_SAFE'' (Verde) | ||
| + | * ''STATE_WARNING'' (Galben) | ||
| + | * ''STATE_DANGER'' (Roșu) | ||
| + | * ''STATE_PARKED'' (Stare cu funcție de memorie temporală care oprește sistemul după 3 secunde de imobilitate a obstacolului). | ||
| + | |||
| + | **Surse și funcții implementate:** | ||
| + | Aplicația este modularizată, având funcții dedicate pentru fiecare periferic: | ||
| + | * ''void init_hardware(void)'' - Configurează pinii direcționali (DDRx) pentru LED-ul RGB, Buzzer și pinul de Trigger, inițializează Timerele, portul serial și activează întreruperile globale (sei). | ||
| + | * ''void init_usart(void)'' - Configurează registrul UBRR0 pentru viteza de 57600 baud, activează transmisia, recepția și întreruperea la recepție (RXCIE0). | ||
| + | * ''uint16_t get_distance(void)'' - Declanșează senzorul, citește regiștrii Timerului 1 hardware, returnează distanța calculată. | ||
| + | * ''void draw_frame(...)'' - Implementează conceptul de Software PWM pentru a genera efectul de undă ("respirație") pe LED-ul RGB. | ||
| + | * ''void play_tone(...)'' - Generează un semnal asincron cu lățime și frecvență reglabile pentru modularea sunetului în buzzer. | ||
| + | * ''ISR(USART_RX_vect)'' - Rutina de tratare a întreruperii seriale pentru primirea de comenzi în timp real de la PC. | ||
| + | |||
| + | **Laboratoare acoperite / Concepte utilizate:** | ||
| + | Proiectul bifează practic și demonstrează înțelegerea următoarelor concepte din programa laboratorului: | ||
| + | * **Lab 1 (GPIO):** Configurarea direcției pinilor de I/O la nivel de bit (registrii DDRx, PORTx, PINx) pentru a citi semnale digitale de la senzor și a acționa actuatorii hardware (LED, Buzzer). | ||
| + | * **Lab 3 (Timere):** S-a configurat hardware Timer-ul 1 (16-biți) cu un prescaler de 8 pentru a calcula precis microsecundele returnate de unda senzorului HC-SR04, renunțând la funcțiile blocante (delay). | ||
| + | * **Lab 5 (USART):** S-a realizat comunicația asincronă via cablu USB cu viteza de 57600 baud, trimițând log-uri de funcționare, telemetria distanței și notificări la momentul parcării mașinii, direct în consolă. | ||
| + | * **Lab 2 (Întreruperi):** S-a implementat o rutină de tratare a întreruperii hardware (''ISR(USART_RX_vect)'') prin care se interceptează pachetele primite de la utilizator de pe PC (tastele '+' și '-'). Acest concept permite alterarea sensibilității radarului total asincron, fără a bloca funcționarea normală a buclei principale a senzorului. | ||
| ===== 5. Rezultate ===== | ===== 5. Rezultate ===== | ||
| - | //Secțiunea va fi completată după asamblarea fizică a proiectului. Va include un link către demonstrația video.// | + | Implementarea practică a proiectului s-a desfășurat în două etape principale, reflectând procesul iterativ de dezvoltare și validare hardware: |
| - | ===== 6. Jurnal ===== | + | **Etapa 1: Prototiparea și Simularea Logică** |
| + | În prima fază, au fost asamblate componentele de ieșire (microcontrolerul, LED-ul RGB și buzzer-ul). Pentru a valida logica de avertizare a sistemului înainte de conectarea senzorului, a fost scris un cod de test care a simulat software apropierea treptată a unui vehicul. Această etapă a confirmat funcționarea corectă a generării semnalelor PWM software pentru efectul de "respirație" al LED-ului și a temporizărilor pentru buzzer. | ||
| + | **Demonstrație Video - Simulare Inițială:** [[https://www.youtube.com/watch?v=ieCr8izWQws|📺 Click aici pentru demonstrația video]] | ||
| + | |||
| + | **Etapa 2: Integrarea Senzorului și Finalizarea** | ||
| + | Odată cu instalarea senzorului ultrasonic HC-SR04, proiectul a atins forma sa finală. Codul a fost rescris pentru a citi distanțele reale în mediu fizic, utilizând Timer-ul 1 hardware al microcontrolerului pentru interceptarea exactă a ecoului. Pe lângă funcționalitatea de bază de avertizare (Verde -> Galben -> Roșu), varianta finală a integrat următoarele rafinamente software: | ||
| + | * **Scalabilitate:** Definirea tuturor parametrilor critici de distanță, temporizare și frecvențe sonore prin macro-uri (`#define`), permițând calibrarea rapidă a sistemului din antetul codului. | ||
| + | * **Zonă Critică de Urgență:** Implementarea unui comportament specific pentru proximitate extremă (sub 2 cm), caracterizat printr-o lumină roșie solidă și un sunet continuu cu o frecvență mai gravă ajustată pentru confort auditiv. | ||
| + | * **Sistem Inteligent de Parcare (Standby):** Adăugarea unui mecanism temporal de detectare a staționării. Dacă distanța măsurată nu variază semnificativ timp de 3 secunde, sistemul consideră parcarea finalizată. Acest eveniment este semnalat vizual și sonor printr-o secvență dedicată (clipiri verzi însoțite de un scurt arpegiu melodic de confirmare), după care senzorul intră în repaus vizual până la detectarea unei noi mișcări a vehiculului. | ||
| + | |||
| + | **Materiale Media Finale** | ||
| + | |||
| + | {{ :pm:prj2026:atoader:radar_de_parcare_irl.png?500 |}} | ||
| + | |||
| + | * **Demonstrație Video - Proiect Final și Parcare:** [[https://youtu.be/leXMGXhPiWU|📺 Click aici pentru demonstrația video]] | ||
| + | |||
| + | ===== 6. Jurnal ===== | ||
| - | * **27 Aprilie 2026:** Stabilirea proiectului | + | * **27 Aprilie 2026:** Stabilirea temei proiectului. |
| * **06 Mai 2026:** Definirea cerințelor și plasarea comenzii pentru componente hardware (Senzor HC-SR04, LED RGB, Buzzer Pasiv). | * **06 Mai 2026:** Definirea cerințelor și plasarea comenzii pentru componente hardware (Senzor HC-SR04, LED RGB, Buzzer Pasiv). | ||
| * **06 Mai 2026:** Redactarea specificațiilor generale, maparea teoretică a pinilor pe microcontrolerul ATmega328P și formatarea paginii wiki a proiectului. | * **06 Mai 2026:** Redactarea specificațiilor generale, maparea teoretică a pinilor pe microcontrolerul ATmega328P și formatarea paginii wiki a proiectului. | ||
| + | * **06 Mai 2026:** Realizarea schemei electrice în KiCad și exportarea documentației (schemă PDF, netlist). | ||
| + | * **06 Mai 2026:** Construirea circuitului virtual și începerea etapei de validare software în simulatorul TinkerCAD. | ||
| + | * **06 Mai 2026:** Dezvoltarea primei iterații de firmware în C //bare-metal//. Am realizat //debugging// pentru rezolvarea interferențelor de pe Timer 1 cauzate de mediul Arduino din fundal și am implementat un //Software Counter// ca //workaround// pentru evitarea fenomenului de //Echo Lock-up// din simulator. | ||
| + | * **06 Mai 2026:** Rafinarea feedback-ului audio-vizual. Am scris o funcție de **Software PWM** (efect de undă triunghiulară / //Breathing LED//) pentru controlul intensității luminoase și am sincronizat generarea semnalului acustic (1 kHz pe buzzer) exact pe vârful de intensitate maximă a LED-ului. | ||
| + | * **06 Mai 2026:** Configurarea mediului de dezvoltare final în Visual Studio Code cu extensia PlatformIO (target: ATmega328P/PA, framework: atmelavr). Am redactat versiunea de producție a codului (''main.c''), înlocuind numărătoarele software cu citirea directă și precisă a distanței prin **Timer-ul 1 Hardware**. | ||
| + | * **11 Mai 2026:** Recepționarea parțială a componentelor fizice (fără senzor). Am realizat asamblarea componentelor de ieșire pe breadboard și am efectuat validarea hardware printr-un program de simulare software a mișcării. S-au obținut dovezi video și log-uri de compilare. | ||
| + | * **12 Mai 2026:** Recepția senzorului ultrasonic HC-SR04 și asamblarea completă a circuitului. S-a dezvoltat și rafinat versiunea finală a firmware-ului prin implementarea macro-urilor de scalabilitate (`#define`), a zonei de alertă critică cu frecvență sonoră ajustată și a sistemului inteligent de detectare a parcării (însoțit de feedback melodic). Sistemul a fost testat și documentat foto-video în mediu fizic real. | ||
| + | * **16 Mai 2026:** Extinderea proiectului pentru a acoperi avansat cerințele curriculei (Laboratoarele USART și Întreruperi). S-a implementat comunicația serială pentru afișarea telemetriei pe PC și o rutină ISR (Interrupt Service Routine) pentru ajustarea asincronă a parametrilor de senzitivitate ai radarului direct de la tastatură, fără delay-uri blocante. | ||