Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:radu_gabriel.covacs [2026/05/13 10:04]
radu_gabriel.covacs [Hardware Design]
pm:prj2026:bianca.popa1106:radu_gabriel.covacs [2026/05/13 10:26] (current)
radu_gabriel.covacs [Algoritmi şi structuri]
Line 43: Line 43:
  
  
-**Diagrame de semnal:**+====Diagrame de semnal:====
  
 {{:​pm:​prj2026:​bianca.popa1106:​diagrama_hc-sr04_radu_covacs.png?​780|}} {{:​pm:​prj2026:​bianca.popa1106:​diagrama_hc-sr04_radu_covacs.png?​780|}}
Line 78: Line 78:
  
 ====Algoritmi şi structuri==== ====Algoritmi şi structuri====
 +
 +===1. Masurarea non-blocanta a distantei (Senzor Ultrasonic HC-SR04)===
 +
 +Sistemul evita utilizarea functiilor blocante printr-o abordare hardware asincrona. La fiecare 200 ms, în bucla principala, se genereaza un impuls Trigger de 10 μs. Receptia semnalului Echo este captata hardware printr-o intrerupere de tip Pin Change (PCINT2_vect).
 +Pentru a calcula durata exacta a semnalului HIGH, algoritmul foloseste un mecanism hibrid de cronometrare:​ combina contorul global de milisecunde (g_uptime_ms) cu valoarea instantanee a registrului Timer0 (TCNT0), obtinand o rezolutie foarte fină (4 μs per pas). Conversia din timp in distanta (centimetri) se face printr-o operatie optimizata pentru a evita calculele cu virgula mobila (floating-point),​ folosind direct constanta acustica: dist = durata_us / 58. Aceasta abordare elibereaza complet CPU-ul in timpul deplasarii undei sonore.
 +
 +===2. Scalare liniara și generare semnal PWM hardware (Servomotor)===
 +
 +Controlul barierei se realizeaza asincron, manipuland direct perifericul Timer1 configurat in modul Fast PWM. In loc sa recurga la biblioteci standard, unghiul bratului este controlat printr-un algoritm de scalare liniara care transforma unghiul fizic (0° – 90°) in ciclu de lucru (duty cycle), modificand valoarea registrului de comparare OCR1A.
 +Formula utilizata este OCR1A = 2000 + (angle * 2000 / 90). Aceasta ecuatie translateaza gradele in „ticuri” de ceas de baza: pentru pozitia inchisa (0°), registrul ia valoarea de baza 2000 (generand un impuls precis de 1 ms), iar pentru pozitia deschisa (90°) atinge pragul de 4000 (impuls de 2 ms). Actualizarea directa a acestui registru permite o actionare mecanica precisa, in timp ce generarea frecventei de 50 Hz este gestionata complet in fundal de catre unitatea hardware, eliminand orice overhead asupra microcontrolerului.
 +
 +===3. Detectarea fronturilor (Edge Detection) si calculul dinamic al tarifului===
 +Senzorii infrarosu pentru locurile de parcare sunt cititi periodic, insa sistemul nu prelucreaza starea lor continua, ci reactioneaza strict la tranzitiile de stare (detectarea fronturilor crescatoare si descrescatoare) comparand starea curenta cu cea anterioara. La ocuparea locului (front descrescator):​ Sistemul memoreaza amprenta de timp curenta in vectorul '​occupancy_start_time'​. La eliberarea locului (front crescator), sistemul calculeaza diferenta de timp pentru a afla durata stationarii in milisecunde. Algoritmul aplica apoi modelul de tarifare multiplicand secundele scurse cu constanta PRICE_PER_SECOND,​ generand valoarea finala de plata in mod dinamic si eficient din punct de vedere al memoriei.
 +
 +===4. Automat de stari temporizat pentru controlul accesului===
 +Pentru a permite sistemului sa citeasca in continuare senzorii si sa trimita date pe seriala in timp ce o masina trece pe la bariera, s-a eliminat complet utilizarea functiilor de intarziere (delay). Logica barierei a fost modelata ca un automat de stari folosind variabilele '​asteptare_inchidere'​ si '​moment_eliberare_senzor'​. Cand o masina declanseaza bariera, sistemul o ridica si asteapta ca vehiculul sa paraseasca raza senzorului ultrasonic. Odata ce senzorul nu mai detecteaza obstacolul (dist > 10), se declanseaza un "timp de gratie"​ de 3 secunde (current_time - moment_eliberare_senzor > 3000). Aceasta abordare garanteaza ca bariera nu va cobori peste masina (prevenind accidentele) si pastreaza microcontrolerul 100% responsiv in timpul celor 3 secunde de asteptare.
pm/prj2026/bianca.popa1106/radu_gabriel.covacs.1778655865.txt.gz · Last modified: 2026/05/13 10:04 by radu_gabriel.covacs
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