This is an old revision of the document!
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.
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).
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
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.Secțiunea va fi completată după asamblarea fizică a proiectului. Va include un link către demonstrația video.