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), sonor (printr-un buzzer pasiv) și de date (prin consolă serială).
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, USART și Întreruperi (ISR).
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.
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). Suplimentar, utilizatorul poate interacționa cu sistemul în mod asincron via consolă serială.
Lista de piese (Bill of Materials):
Maparea pinilor (Planificarea conexiunilor): Pinii aleși pe ATmega328P sunt următorii:
VCC → La pinul de 5V al plăcuțeiGND → La GNDTrig (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)Signal → PD3 (Pinul OC2B, legat direct la Timerul 2, ajută la generarea hardware PWM)Pinul Roșu (R) → PC0Pinul Verde (G) → PC1Pinul Albastru (B) → PC2
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):
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:
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
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 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:
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.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 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:
Materiale Media Finale
main.c), înlocuind numărătoarele software cu citirea directă și precisă a distanței prin Timer-ul 1 Hardware.