This is an old revision of the document!


Proiect PM: Radar de Parcare (Asistent de proximitate)

1. Introducere

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).

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.

Ideea de la care a pornit: Inspirația provine din industria auto (sistemele Parktronic / Acoustic Parking System). Am dorit să reproduc această funcționalitate esențială pentru siguranța rutieră într-un format simplificat (Proof of Concept), folosind componente discrete pentru a înțelege exact fluxul de semnal de la detecția fizică a obstacolului până la declanșarea alarmelor umane.

2. Descriere Generală

Sistemul funcționează într-o buclă continuă de măsurare și decizie. Microcontrolerul trimite un impuls scurt către senzorul HC-SR04, care emite un tren de unde ultrasonice. Când undele se întorc (ecou), microcontrolerul măsoară timpul scurs și calculează distanța fizică folosind formula: $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).

3. Hardware Design

Lista de piese (Bill of Materials):

  • Placă de dezvoltare cu ATmega328P (varianta Xplained Mini)
  • Senzor ultrasonic de distanță HC-SR04
  • LED RGB 10mm (Catod Comun)
  • Modul Buzzer Pasiv (5V)
  • 3x Rezistențe 220 Ω (pentru canalele R, G, B ale LED-ului)
  • Breadboard 400 puncte și fire de conexiune (dupont)

Maparea pinilor (Planificarea conexiunilor): Pinii aleși pe ATmega328P sunt următorii:

  • Senzorul HC-SR04:
    • VCC → La pinul de 5V al plăcuței
    • GND → La GND
    • Trig (Ieșire din uC) → PD2 (Pin digital standard)
    • Echo (Intrare în uC) → PB0 (Pinul ICP1 - Input Capture, perfect pentru măsurarea ecoului cu Timerul 1)
  • Buzzer Pasiv:
    • SignalPD3 (Pinul OC2B, legat direct la Timerul 2, ajută la generarea hardware PWM)
  • LED RGB (prin rezistențe):
    • Pinul Roșu (R)PC0
    • Pinul Verde (G)PC1
    • Pinul Albastru (B)PC2

 Schema Electrică KiCad - Radar de Parcare 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):

  1. Microcontrolerul trimite un puls HIGH de minim 10 µs pe pinul Trig.
  2. Senzorul emite intern un burst de 8 impulsuri sonore la 40 kHz.
  3. 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.

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).

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.

🌐 Apasă aici pentru a deschide și testa simularea interactivă direct în TinkerCAD

4. Software Design

Mediul de dezvoltare: 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.

Biblioteci și surse 3rd-party folosite: 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:

  • <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 inițializări (dacă este cazul).

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:

  • STATE_SAFE (Verde, distanță > 20 cm)
  • STATE_WARNING (Galben, distanță între 10 cm și 20 cm)
  • STATE_DANGER (Roșu, distanță < 10 cm)

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 PB0. Formula matematică implementată va fi: $Distanta(cm) = \frac{Timp(us)}{58}$.

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ța generată (pitch-ul și ritmul de bip-uri) va fi actualizată dinamic de mașina de stări în funcție de distanța citită.

(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

Implementarea practică a proiectului s-a desfășurat în două etape principale, reflectând procesul iterativ de dezvoltare și validare hardware:

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ă: Click aici pentru a viziona demonstrația funcțională

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

Vedere de sus a proiectului finalizat

6. Jurnal

  • 27 Aprilie 2026: Stabilirea proiectului.
  • 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: 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.
pm/prj2026/atoader/robin.popa.1778592799.txt.gz · Last modified: 2026/05/12 16:33 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