Differences

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

Link to this comparison view

pm:prj2026:alexandru.predescu:bogdan.andrei0509 [2026/05/26 14:35]
bogdan.andrei0509 [Lista componente]
pm:prj2026:alexandru.predescu:bogdan.andrei0509 [2026/05/26 17:17] (current)
bogdan.andrei0509
Line 60: Line 60:
 In tabelul de mai jos sunt prezentate toate functiile implementate in cadrul proiectului,​ alaturi de rolul lor in sistem: 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 TWBRla 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 PCF8574folosind 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. | +^ Nume functie ​Explicatie componenta si legatura directa cu proiectul de parcare ​
-'''​LCD_Afiseaza_Locuri''' ​Sterge partial ecranul si afiseaza dinamic numarul ​de locuri ​libere, plus mesajul de status corespunzator. | +I2C_init() ​| Initializeaza magistrala ​de comunicare ​I2C (TWIa microcontrolerului,​ setand ​frecventa de ceas necesara pentru a putea trimite date catre noul ecran LCD 1602. | 
-'''​ADC_Init''' ​Configureaza perifericul ADC (Analog-to-Digital ​Converter), seteaza ​referinta la 5V si prescalerul ​la 128. | +I2C_start() ​| Genereaza conditia de START pe magistrala I2C pentru a initia sesiunea de transmisie a datelor text sau a comenzilor catre ecranul LCD. | 
-'''​ADC_Read'''​ | Selectaza canalul analogic ​(0-7), porneste conversia ​si returneaza ​valoarea digitala (0-1023) citita ​de pe pin. | +I2C_stop() ​Genereaza conditia ​de STOP pe magistrala I2C pentru a elibera linia de comunicare dupa ce ecranul a primit datele despre starea parcarii. | 
-'''​Hardware_Init''' ​| Configureaza pinii I/O (directii LED-uri, buton cu pull-up, buzzer) ​si apeleaza initializarile pentru ADC, I2C si LCD. | +I2C_write() ​| Trimite ​un octet de date primit ca parametru (comanda sau caracter) direct ​catre cipul adaptor PCF8574 de pe spatele ecranului LCD 1602. | 
-'''​Actualizeaza_Locuri_Si_Numara''' ​Citeste succesiv cele 4 LDR-uriaprinde/​stinge LED-urile aferente fiecarui loc si returneaza numarul total de locuri libere. | +| LCD_send_internal() | Incapsuleaza protocolul I2C: trimite adresa hardware a ecranului (0x27), urmata de datele efective pentru controlul pinilor ecranului (RS, RW, EN, Backlight). | 
-'''​Buzzer_Sunet_Eroare'''​ | Genereaza o alerta sonora sacadata ​(Beep-Beepprin pinul de buzzer atunci cand parcarea ​este plina. | +| LCD_pulse() | Activeaza si dezactiveaza rapid pinul de Enable (EN) al ecranului ​LCD prin intermediul ​I2Cfortand display-ul sa preia datele trimise pentru procesare. | 
-'''​Bariera_Deschide''' ​Simuleaza deschiderea barierei prin generarea unui sunet lung de confirmare si mentine ​o temporizare ​de 2 secunde. | +| LCD_send() | Transmite o comanda sau un caracter catre LCD impartind octetul in doua jumatati (nibbles), deoarece ecranul este configurat sa functioneze in mod economic ​pe 4 biti. | 
-'''​main''' ​Punctul ​de intrare in programRuleaza initializarileapoi executa bucla infinita in care scaneaza senzorii, actualizeaza ecranul si verifica starea butonului. |+LCD_command() ​| Trimite ​instructiuni ​de configurare ​hardware ​catre ecran, cum ar fi mutarea cursorului, stergerea ecranului sau setarea modului de scriere. | 
 +LCD_char() ​| Trimite un singur ​caracter ASCII (litera, cifra sau simbol) ​pentru a fi afisat ​fizic pe ecranul LCD, setand pinul RS (Register Select) pe HIGH. | 
 +LCD_init() ​Ruleaza ​secventa hardware ​obligatorie de pornire ​a ecranului LCD 1602, setandu-l ​in modul de lucru pe 4 biti, activand lumina albastra de fundal si stergand memoria. | 
 +LCD_print() ​Primeste un sir de caractere (string) si apeleaza succesiv functia LCD_char pentru a afisa cuvinte complete pe ecran (ex: "​Locuri ​libere"). | 
 +LCD_clear() ​Sterge instantaneu tot textul afisat pe cele doua randuri ale LCD-ului si readuce cursorul la pozitia initiala ​(sus-stanga) pentru a pregati o noua afisare. | 
 +| ADC_init() | Configureaza convertorul Analog-Digital ​(ADCal ATmega328Psetand tensiunea de referinta la 5V si prescalerul ​pentru citirea senzorilor de lumina. | 
 +ADC_read() | Selecteaza canalul ADC corespunzator unuia dintre cele 4 locuri de parcare ​si returneaza ​o valoare numerica proportionala cu intensitatea luminii ​de pe acel senzor. | 
 +Interrupt_init() ​| Configureaza pinii PD2 si PD3 ca intrari ​cu rezistente de pull-up ​activate ​si activeaza intreruperile externe INT0 si INT1 pe front cazator (apasare de buton). | 
 +ISR(INT0_vect) ​Rutina de intrerupere declansata de butonul de Intrare. Verifica daca parcare are locuri: daca daaproba accesul ​si ridica bariera; daca nu, porneste alarma sonora. | 
 +ISR(INT1_vect| Rutina ​de intrerupere declansata de butonul de Iesire. Seteaza directia de miscare pe "​iesire"​ si activeaza ridicarea barierei pentru masina care paraseste ​parcarea. | 
 +servo_pozitie_jos() ​Genereaza semnalul PWM software ​de 1.5ms necesar pentru a mentine ​servomotorul in pozitia orizontala ​de 0 grade, blocand accesul in parcare (bariera coborata). | 
 +servo_pozitie_sus() ​Genereaza semnalul PWM software ​de 1.0ms necesar pentru a roti axul servomotorului la 90 de gradedeschizand accesul masinilor (bariera ridicata). | 
 +| main() | Bucla principala a proiectului. Citeste continuu cei 4 senzori LDR, aprinde LED-urile corespunzatoare (Verde/​Rosu),​ calculeaza locurile libere, actualizeaza ecranul ​LCD si controleaza timpii de actionare ai barierei si buzzerului. |
  
 ==== Fluxul de Executie ==== ==== Fluxul de Executie ====
  
-1. **Etapa de Initializare:​** La alimentarea placii, se apeleaza ​''​Hardware_Init'' ​care configureaza registrele de directie ​(DDRDDDRC) si pregateste comunicarea cu ecranul ​si senzorii.+1. **Etapa de Initializare:​** La alimentarea placii, se configureaza perifericele prin functiile de initializare: ​''​I2C_init()'' ​si ''​LCD_init()''​ pentru pornirea ecranului''​ADC_init()''​ pentru senzorii de lumina ​si ''​Interrupt_init()''​ pentru activarea butoanelor pe pinii de intreruperi externe (PD2 si PD3). Tot acum se seteaza pinii de iesire pentru LED-uri, buzzer si servomotor (DDRB si DDRD).
  
-2. **Etapa de Scanare (Loop):** In bucla infinita, se apeleaza ciclic ​''​Actualizeaza_Locuri_Si_Numara'' ​pentru a verifica statusul ​celor 4 locuriDatele sunt procesate ​si trimise instant catre LCD prin ''​LCD_Afiseaza_Locuri''​.+2. **Etapa de Scanare ​si Monitorizare ​(Loop):** In bucla principala ​''​main()''​, microcontrolerul citeste ciclic starea ​celor 4 senzori LDR folosind ''​ADC_read()''​In functie de pragul de lumina, algoritmul aprinde LED-ul corespunzator (Verde pentru loc liber, Rosu pentru loc ocupat) ​si calculeaza in timp real numarul total de ''​locuri_libere''​.
  
-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 contrarse declanseaza ''​Buzzer_Sunet_Eroare''​.+3. **Etapa de Afisare:** Datele procesate sunt trimise catre ecranul LCD 1602 prin functiile ''​LCD_command()''​ si ''​LCD_print()''​Daca mai exista ​locuri, se afiseaza numarul lordaca parcarea este plinape ecran va aparea mesajul "​PARCARE PLINA!"​.
  
 +4. **Etapa de Eveniment (Intreruperi):​** Sistemul reactioneaza instant la actiunile soferilor prin rutinele de intrerupere:​
 +  * **La apasarea butonului de Intrare (INT0):** Daca sunt locuri libere, se activeaza flag-ul ''​bariera_activa'',​ se afiseaza mesajul de bun venit si se apeleaza ''​servo_pozitie_sus()''​. Daca parcarea e plina, se activeaza flag-ul ''​parcare_plina_bip''​ si buzzerul emite 3 semnale sonore scurte de respingere.
 +  * **La apasarea butonului de Iesire (INT1):** Se ridica automat bariera pentru a permite iesirea masinii, afisand mesajul de drum bun.
 +
 +5. **Etapa de Resetare Bariera:** Dupa ce masina a trecut si timpul de asteptare s-a scurs, se apeleaza ''​servo_pozitie_jos()''​ pentru a cobori bariera, iar ecranul revine la starea initiala de monitorizare.
 ==== Cod sursa ==== ==== Cod sursa ====
 https://​github.com/​Bogdan594/​Smart-Parking-System/​tree/​main https://​github.com/​Bogdan594/​Smart-Parking-System/​tree/​main
 +
 +==== Video cu proiectul ====
 +https://​www.youtube.com/​watch?​v=XeezoRPa95w
pm/prj2026/alexandru.predescu/bogdan.andrei0509.1779795348.txt.gz · Last modified: 2026/05/26 14:35 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