This is an old revision of the document!
Proiectul propune o solutie moderna pentru administrarea parcarilor, bazata pe monitorizarea in timp real a locurilor disponibile si automatizarea procesului de taxare. Sistemul controleaza activ fluxul de masini, permitand accesul autovehiculelor doar atunci cand capacitatea maxima nu a fost atinsa, eliminand astfel aglomeratia si blocajele in interiorul parcarii.
Scopul principal este eficientizarea infrastructurii prin digitalizare. La parasirea locului de parcare, sistemul calculeaza automat costul in functie de timpul de stationare, iar fiecare tranzactie este salvata intr-o baza de date centralizata. Aceasta asigura o monitorizare transparenta a platilor si ofera administratorilor o imagine clara asupra veniturilor si a gradului de ocupare.
Ideea proiectului a luat nastere din nevoia de a reduce timpul pierdut in trafic si de a elimina procesele de plata manuale, adesea ineficiente. Obiectivul central este eficientizarea infrastructurii prin automatizare, asigurand o gestionare fluida a fluxului de autovehicule si a sistemului de taxare. Totodata, mentinerea unei evidente obiective a bilantului financiar prin baze de date centralizate devine cruciala pentru transparenta veniturilor si pentru dezvoltarea ulterioara a unor noi functionalitati inteligente.
De ce este util? Implementarea unui astfel de sistem elimina incertitudinea gasirii unui loc de parcare, reducand semnificativ timpul petrecut in trafic si emisiile poluante generate de cautarea prelungita. Pentru administratori, solutia ofera o monitorizare stricta si transparenta a incasarilor, eliminand frauda sau erorile umane prin raportarea automata in baza de date.
Proiectul este construit in jurul microcontrolerului ATmega328P Xplained Mini, care functioneaza ca un centru de comanda ce primeste informatii de la senzori si trimite instructiuni catre elementele de executie si sistemul de monitorizare de pe laptop.
| Librărie | Rol | Sursă |
|---|---|---|
<avr/io.h>, <avr/interrupt.h> | Acces direct la registrele hardware, manipulare intreruperi | AVR-GCC Toolchain |
<util/delay.h> | Acces la functii de temporizare | AVR-GCC Toolchain |
<util/twi.h> | Macrouri standard pentru gestionarea starilor protocolului I2C (TWI) pe AVR | AVR-GCC Toolchain |
<stdio.h>, <string.h>, <stdint.h> | Tipuri de date standardizate, operatii de I/O si manipulare buffer-e / siruri de caractere | AVR-GCC Toolchain |
pyserial | Gestionarea comunicatiei seriale (UART) intre microcontroler si scriptul Python | Python Package Index (PyPI) |
mysql-connector-python | Stabilirea conexiunii si executarea interogarilor in baza de date MySQL | Oracle (PyPI) |
streamlit | Framework pentru generarea interfetei grafice web in mod dinamic. | Streamlit Inc. (PyPI) |
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.
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.
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.
Pentru a permite sistemului sa citeasca in continoare senzorii si sa trimita date pe seriala in timp ce o masina trece prin 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.