This is an old revision of the document!
Proiectul consta intr-un sistem inteligent de management al accesului intr-o parcare, capabil sa valideze identitatea utilizatorilor, sa controleze o bariera fizica si sa tina evidenta locurilor disponibile in timp real. Sistemul interactioneaza atat cu lumea digitala (baze de date de carduri, afisaje), cat si cu cea fizica (actionarea mecanica a barierei si detectarea vehiculelor).
Scopul principal este realizarea unui sistem integrat care sa demonstreze lucrul simultan cu multiple protocoale de comunicatie (SPI, I2C) si periferice hardware interne (Timere, generare PWM).
Totul a plecat de la necesitatea optimizarii fluxului de masini intr-un spatiu inchis. Am pornit de la ideea unui sistem autonom care nu doar permite accesul oricum, ci urmareste fizic trecerea masinii pentru a evita erorile de contorizare.
Pentru mine, utilitatea este didactica si practica: invat sa stapanesc interactiunea dintre senzori asincroni (RFID, Ultrasonic) si actuatoare (Servomotor) folosind o arhitectura de tip Finite State Machine (FSM), eliminand total functiile blocante de tip delay(). Pentru un utilizator real, sistemul ofera un feedback clar (pe ecranul LCD) si un acces fluid.
Sistemul este centralizat in jurul microcontrolerului ATmega328P. La momentul scanarii unui card, microcontrolerul interogheaza senzorul RFID prin protocolul SPI. Daca UID-ul cardului este validat si exista locuri disponibile, sistemul trimite date prin I2C catre ecranul LCD pentru actualizarea interfetei si genereaza un semnal PWM pentru a ridica servomotorul (bariera).
Ulterior, controlul este preluat de senzorul ultrasonic. Folosind functiile de temporizare (Timere hardware), microcontrolerul masoara timpul de raspuns al ecoului pentru a determina cand masina a eliberat complet zona de tranzit. Odata confirmata trecerea, bariera coboara, iar contorul locurilor de parcare este decrementat.
Schema bloc a sistemului:
Lista de piese:
*(Aici se va adauga o schema electrica desenata in Fritzing, Proteus sau Eagle, detaliind conexiunile mentionate mai sus).*
Mediu de dezvoltare:
Arhitectura si Algoritmi: Fluxul programului este implementat sub forma unui Automat de Stari (State Machine) pentru a asigura non-blocarea executiei:
STARE_IDLE: Asteapta citirea unui card prin SPI si afiseaza numarul de locuri.STARE_VALIDARE: Verifica daca UID-ul citit are permisiuni si daca contorul locuri_libere > 0.STARE_DESCHIS: Genereaza semnal PWM pentru 90 de grade, deschizand bariera.STARE_IN_TRANZIT: Interogheaza non-blocant senzorul ultrasonic. Asteapta scaderea distantei (masina este sub bariera) si apoi cresterea acesteia (masina a trecut).STARE_INCHIDERE: Coboara bariera (PWM la 0 grade), actualizeaza variabila globala de locuri si comunica prin I2C noile date catre LCD.Librarii si surse 3rd-party:
*(Aceasta sectiune se va completa la finalizarea proiectului)* Sistemul a fost asamblat pe breadboard si reuseste sa identifice corect cardurile pre-programate. Timpii de raspuns sunt instantanei, iar folosirea timerelor hardware pentru senzorul ultrasonic permite o masurare precisa, fara a afecta comunicatia cu ecranul LCD sau afisarea textului. Sistemul decrementeaza locurile doar la trecerea fizica, ignorand tentativele false (scanarea cardului fara trecere).
*(Aceasta sectiune se va completa la finalizarea proiectului)* Realizarea acestui proiect a demonstrat dificultatea, dar si eficienta programarii directe pe registri. Adaptarea bibliotecilor din C++ (specifice Arduino) in C pur a necesitat studiul aprofundat al datasheet-urilor, in special pentru secventele de initializare I2C si SPI. Folosirea automatelor de stari s-a dovedit esentiala pentru a gestiona un sistem reactiv complex.
Resurse Hardware:
Resurse Software: