Differences

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

Link to this comparison view

pm:prj2026:atoader:robin.popa [2026/05/06 16:03]
robin.popa [3. Hardware Design]
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 47: Line 47:
  
 {{ :​pm:​prj2026:​atoader:​radar_de_parcare_sch.png?​800 | Schema Electrică KiCad - Radar de Parcare}} {{ :​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''​ (PD2ca 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 ​(uploadse 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 ​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 ​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 ​(VERDEGALBEN, ROSU). O mașină de stări (State Machinesimplă 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 ​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 ​î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-SR04renunțâ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ă ​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:
  
-===== 6Jurnal =====+**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.
pm/prj2026/atoader/robin.popa.1778072585.txt.gz · Last modified: 2026/05/06 16:03 by robin.popa
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