Differences

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

Link to this comparison view

pm:prj2026:atoader:robin.popa [2026/05/12 16:34]
robin.popa [6. Jurnal]
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 70: Line 70:
 **Note privind simularea hardware:** **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. 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]]** 🌐 **[[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]]**
Line 84: 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 =====
  
Line 113: Line 115:
 Î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. Î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ă:​** [[link_catre_video_1|Click aici pentru ​a viziona ​demonstrația ​funcțională]]+**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** **Etapa 2: Integrarea Senzorului și Finalizarea**
Line 123: Line 125:
 **Materiale Media Finale** **Materiale Media Finale**
  
-{{:link_catre_imagine_de_sus.jpg?600|Vedere de sus a proiectului finalizat}}+{{ :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]]
  
-  * **Demonstrație Video - Proiect Final și Parcare:** [[link_catre_video_2|Click aici pentru a viziona demonstrația completă]] 
 ===== 6. Jurnal ===== ===== 6. Jurnal =====
  
Line 138: Line 141:
   * **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.   * **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.   * **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.1778592891.txt.gz · Last modified: 2026/05/12 16:34 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