This is an old revision of the document!


Smart Parking System

Introducere

Proiectul consta in realizarea unui sistem automatizat de gestionare a unei parcari cu 4 locuri, utilizand placa de dezvoltare ATmega328P.

Scopul principal este monitorizarea ocuparii locurilor in timp real si controlul accesului prin bariera. Ideea a pornit de la nevoia de a reduce timpul pierdut in trafic pentru cautarea unui loc liber.

Descriere generală

Sistemul este organizat in jurul microcontrollerului ATmega328P care coordoneaza urmatoarele module:

  • module de detectie: 4 senzori LDR (fotorezistori) montati pe fiecare loc de parcare
  • modul de acces: un buton si un servomotor ce actioneaza asupra unei bariere
  • modul de afisaj: ecran OLED I2C pentru informatii text si LED-uri pentru un status vizual

Hardware Design

Lista componente

Componenta Cantitate Rol
ATmega328P Xplained Mini 1 Creierul sistemului
Ecran OLED 0.96” I2C 1 Afisare status locuri
Servomotor SG90 1 Actionare bariera
Fotorezistori (LDR) 4 Detectie masini
LED-uri (4 Rosii, 4 Verzi) 8 Semnalizare locuri
Buzzer Activ 1 Alerta sonora
Buton Push 1 Cerere acces
Modul HW-131 + Baterie 9V 1 Alimentare sistem
Rezistente (220 ohm si 10k) 15 Protectie si divizoare
Condensator 470uF 1 Stabilitate servo

Pini utilizati

Pinii Analogici (PC0 - PC3): Folositi pentru Senzorii LDR. Deoarece acestia returneaza o valoare variabila de tensiune, am utilizat convertorul Analog-Digital (ADC) pentru a determina pragul de ocupare.

Pinii I2C (PC4 - SDA, PC5 - SCL): Rezervati exclusiv pentru Ecranul OLED. Aceasta permite comunicarea pe doar doua fire, lasand restul pinilor liberi pentru senzori si actuatoare.

Pinul PWM (PD3): Utilizat pentru Servomotor. Servomotoarele necesita un semnal de tip Pulse Width Modulation pentru a mentine un unghi precis.

Pinul de Intrerupere Externa (PD2 - INT0): Folosit pentru Butonul de acces. Acest pin permite procesorului sa reactioneze instantaneu la apasare, chiar daca acesta executa alte sarcini in loop-ul principal.

Pinii Digitali (PD4-PD7 si PB0-PB3): Alocati pentru controlul LED-urilor RGB si a Buzzer-ului (PB5), acestia fiind utilizati pentru semnale simple de tip ON/OFF.

Schema Electrica

Explicatii schema:

Divizoarele de tensiune: Fiecare senzor LDR este inseriat cu o rezistenta de 10k ohm. Tensiunea citita de ATmega se modifica in functie de lumina care cade pe fotorezistor (rezistenta LDR scade la lumina).

Protectia LED-urilor: Am utilizat rezistente de 220 ohm pentru a limita curentul, protejand atat LED-urile, cat si pinii microcontrollerului impotriva suprasolicitarii.

Stabilitatea alimentarii: Modulul MB102 primeste 9V de la baterie si furnizeaza o tensiune stabilizata de 5V catre sina principala (VCC). Condensatorul de 220uF este montat in paralel pe alimentarea servomotorului pentru a absorbi socurile de curent la pornirea barierei.

Software Design

Sistemul de management al parcarii este implementat in limbaj C pur (AVR C), utilizand programarea modulara si accesul direct la registrele microcontrolerului ATmega328P. Codul este structurat pe mai multe module functionale: drivere de periferice (I2C, ADC, GPIO), logica de procesare si controlul executiei.

Arhitectura Functiilor

In tabelul de mai jos sunt prezentate toate functiile implementate in cadrul proiectului, alaturi de rolul lor in sistem:

Nume Functie Descriere / Rol in Proiect
'I2C_Init' Initializeaza magistrala I2C (configurand registrul TWBR) la o frecventa standard de ~100kHz.
'I2C_Start' Genereaza conditia de START pe magistrala I2C si asteapta confirmarea hardware.
'I2C_Write' Transmite un octet de date pe magistrala I2C catre dispozitivul sclav.
'LCD_Write_I2C' Trimite comenzi sau date catre ecranul LCD prin intermediul expandorului PCF8574, folosind protocolul pe 4 biti.
'LCD_Cmd' Trimite o comanda de configurare catre LCD (ex: mutare cursor, stergere ecran).
'LCD_Data' Trimite un caracter ASCII catre ecran pentru a fi afisat pe pozitia curenta.
'LCD_Init' Realizeaza secventa de initializare hardware a ecranului LCD in modul de lucru pe 4 biti.
'LCD_Afiseaza_Locuri' Sterge partial ecranul si afiseaza dinamic numarul de locuri libere, plus mesajul de status corespunzator.
'ADC_Init' Configureaza perifericul ADC (Analog-to-Digital Converter), seteaza referinta la 5V si prescalerul la 128.
'ADC_Read' Selectaza canalul analogic (0-7), porneste conversia si returneaza valoarea digitala (0-1023) citita de pe pin.
'Hardware_Init' Configureaza pinii I/O (directii LED-uri, buton cu pull-up, buzzer) si apeleaza initializarile pentru ADC, I2C si LCD.
'Actualizeaza_Locuri_Si_Numara' Citeste succesiv cele 4 LDR-uri, aprinde/stinge LED-urile aferente fiecarui loc si returneaza numarul total de locuri libere.
'Buzzer_Sunet_Eroare' Genereaza o alerta sonora sacadata (Beep-Beep) prin pinul de buzzer atunci cand parcarea este plina.
'Bariera_Deschide' Simuleaza deschiderea barierei prin generarea unui sunet lung de confirmare si mentine o temporizare de 2 secunde.
'main' Punctul de intrare in program. Ruleaza initializarile, apoi executa bucla infinita in care scaneaza senzorii, actualizeaza ecranul si verifica starea butonului.

Fluxul de Executie

1. Etapa de Initializare: La alimentarea placii, se apeleaza Hardware_Init care configureaza registrele de directie (DDRD, DDRC) si pregateste comunicarea cu ecranul si senzorii.

2. Etapa de Scanare (Loop): In bucla infinita, se apeleaza ciclic Actualizeaza_Locuri_Si_Numara pentru a verifica statusul celor 4 locuri. Datele sunt procesate si trimise instant catre LCD prin LCD_Afiseaza_Locuri.

3. Etapa de Decizie: Sistemul monitorizeaza pinul butonului (PD6). La apasare, algoritmul verifica variabila de locuri libere: daca este > 0, se apeleaza Bariera_Deschide; in caz contrar, se declanseaza Buzzer_Sunet_Eroare.

pm/prj2026/alexandru.predescu/bogdan.andrei0509.1779454330.txt.gz · Last modified: 2026/05/22 15:52 by bogdan.andrei0509
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