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:13]
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 48: Line 48:
 {{ :​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}} {{:​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 =====
Line 58: Line 82:
   * ''<​avr/​io.h>''​ - pentru accesul la regiștrii hardware (ex: PORTB, DDRD, TCCR1A etc.).   * ''<​avr/​io.h>''​ - pentru accesul la regiștrii hardware (ex: PORTB, DDRD, TCCR1A etc.).
   * ''<​avr/​interrupt.h>''​ - pentru manipularea vectorilor de întrerupere (ISR).   * ''<​avr/​interrupt.h>''​ - pentru manipularea vectorilor de întrerupere (ISR).
-  * ''<​util/​delay.h>''​ - pentru funcții blocante necesare la inițializări ​(dacă este cazul).+  * ''<​util/​delay.h>''​ - pentru funcții blocante necesare la generarea de tonuri sau inițializări.
  
 **Algoritmi și structuri de date planificate:​** **Algoritmi și structuri de date planificate:​**
-Logica principală a programului ​va fi implementată sub forma unui **Finite State Machine (Mașină de Stări - FSM)** cu trei stări principale, corespunzătoare distanței:​ +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_SAFE''​ (Verde, distanță > 20 cm+  * ''​STATE_STANDBY''​ (Stins / Repaus) 
-  * ''​STATE_WARNING''​ (Galben, distanță între 10 cm și 20 cm+  * ''​STATE_SAFE''​ (Verde) 
-  * ''​STATE_DANGER''​ (Roșu, distanță < 10 cm)+  * ''​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).
  
-Calculul distanței se va realiza folosind un algoritm bazat pe **Timer1 ​(16-bit)**. Microcontrolerul va genera un puls de 10µs pe pinul Trigger, ​apoi va activa funcția de Input Capture ​(sau va folosi o întrerupere PCINT) pentru a măsura durata pulsului Echo pe pinul PB0Formula matematică implementată va fi: $Distanta(cm= \frac{Timp(us)}{58}$.+**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 (DDRxpentru 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ț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.
  
-Pentru a nu bloca execuția codului ​(funcții neblocante), generarea sunetului în buzzer va fi delegată ​**Timer-ului 2 (8-bit)**, folosind modul hardware ​**Fast PWM** sau **CTC**. Frecvențgenerată (pitch-ul ​și ritmul de bip-uriva fi actualizată dinamic de mașina de stări în funcție de distanța citită.+**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, PINxpentru a citi semnale digitale de la senzor și a acționa actuatorii hardware (LEDBuzzer). 
 +  ​* **Lab 3 (Timere):** S-a configurat hardware ​Timer-ul 1 (16-biți) cu un prescaler de 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-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.
  
-**(Etapa 3) Surse și funcții implementate:​** 
-//(Această secțiune detaliază structura codului ce va fi implementat)//​ 
- 
-Aplicația va fi modularizată,​ având fișierul principal ''​main.c''​ și fișiere header/​surse separate pentru claritate. Funcțiile cheie vor fi: 
-  * ''​void gpio_init(void)''​ - Configurează pinii direcționali (DDRx) pentru LED-ul RGB, Buzzer și pinul de Trigger. 
-  * ''​void timer1_init(void)''​ - Configurează Timer-ul 1 pentru citirea pulsului Echo. 
-  * ''​void timer2_init(void)''​ - Configurează Timer-ul 2 pentru generarea semnalului PWM către buzzer. 
-  * ''​uint16_t get_distance(void)''​ - Declanșează senzorul, citește regiștrii timerului, returnează distanța calculată și resetează flag-urile. 
-  * ''​void update_led_status(uint8_t state)''​ - Modifică regiștrii de PORT pentru a schimba culorile LED-ului RGB pe baza stării calculate. 
-  * ''​ISR(TIMER1_CAPT_vect)''​ - (Opțional) Rutina de tratare a întreruperii pentru a prinde exact momentul în care pulsul Echo se termină, asigurând precizie maximă fără a face polling. 
 ===== 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.1778073207.txt.gz · Last modified: 2026/05/06 16:13 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