This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:robin.popa [2026/05/12 17:26] robin.popa [5. Rezultate] |
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 PB0. Formula 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 (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. | ||
| - | 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ă. | + | **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, PINx) pentru a citi semnale digitale de la senzor și a acționa actuatorii hardware (LED, Buzzer). | ||
| + | * **Lab 3 (Timere):** S-a configurat hardware Timer-ul 1 (16-biți) cu un prescaler de 8 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-a 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ă:** | + | **Demonstrație Video - Simulare Inițială:** [[https://www.youtube.com/watch?v=ieCr8izWQws|📺 Click aici pentru demonstrația video]] |
| - | [[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 126: | Line 127: | ||
| {{ :pm:prj2026:atoader:radar_de_parcare_irl.png?500 |}} | {{ :pm:prj2026:atoader:radar_de_parcare_irl.png?500 |}} | ||
| - | * **Demonstrație Video - Proiect Final și Parcare:** [[link_catre_video_2|Click aici pentru a viziona demonstrația completă]] | + | * **Demonstrație Video - Proiect Final și Parcare:** [[https://youtu.be/leXMGXhPiWU|📺 Click aici pentru demonstrația video]] |
| ===== 6. Jurnal ===== | ===== 6. Jurnal ===== | ||
| Line 139: | 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. | ||