This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.jipa2803:vnedelceva [2026/05/23 21:32] vnedelceva [Concluzii] |
pm:prj2026:alexandru.jipa2803:vnedelceva [2026/05/25 19:37] (current) vnedelceva [Software Design] |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| Proiectul reprezinta un sistem simplu de securitate pentru casa, construit pe ATmega328P-Xplained Mini, folosind un senzor de miscare PIR, un keypad 4x4 si un display LCD 16x2. Sistemul poate fi armat si dezarmat prin introducerea unui cod PIN. Odata armat, monitorizeaza miscarea si ofera un interval de timp pentru dezarmare inainte de declansarea alarmei (buzzer si LED). Logica este implementata folosind o masina de stari, pentru un comportament eficient, fara blocaje. | Proiectul reprezinta un sistem simplu de securitate pentru casa, construit pe ATmega328P-Xplained Mini, folosind un senzor de miscare PIR, un keypad 4x4 si un display LCD 16x2. Sistemul poate fi armat si dezarmat prin introducerea unui cod PIN. Odata armat, monitorizeaza miscarea si ofera un interval de timp pentru dezarmare inainte de declansarea alarmei (buzzer si LED). Logica este implementata folosind o masina de stari, pentru un comportament eficient, fara blocaje. | ||
| - | Pe langa functionalitatea de baza, sistemul este proiectat sa poata fi extins cu senzori suplimentari (senzor de fum, senzor de gaz, contact magnetic pentru usi/ferestre) si conectivitate wireless (Bluetooth prin HC-05) pentru trimiterea de notificari in timp real catre utilizator. | + | Pe langa functionalitatea de baza, sistemul include un senzor de gaz/fum (MQ-2) si conectivitate wireless (Bluetooth prin HC-05) pentru trimiterea de notificari in timp real catre utilizator (prin aplicatia Serial Bluetooth Terminal). |
| ===== Descriere generala ===== | ===== Descriere generala ===== | ||
| Line 21: | Line 20: | ||
| Schema bloc: | Schema bloc: | ||
| - | {{:pm:prj2026:alexandru.jipa2803:schema-bloc.png?600|}} | + | {{:pm:prj2026:alexandru.jipa2803:schema-bloc42.png?600|}} |
| Line 66: | Line 65: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | **Mediu de dezvoltare:** AVR-GCC + VSCode + PlatformIO | + | **Mediu de dezvoltare:** |
| ^ Periferic ^ Utilizare ^ | ^ Periferic ^ Utilizare ^ | ||
| Line 75: | Line 74: | ||
| | GPIO | Scan keypad matriceal 4x4, LED-uri, buzzer | | | GPIO | Scan keypad matriceal 4x4, LED-uri, buzzer | | ||
| - | **Structura software - masina de stari:** | + | **Masina de stari** |
| - | * **DISARMED** — sistem dezarmat, LED verde aprins, LCD afiseaza "System disarmed / * to arm" | + | Logica principala este implementata ca o masina de stari in functia ''main()'', folosind ''switch(alarm_state)''. Fiecare stare are comportament propriu si tranzitii clare catre urmatoarea: |
| - | * **EXIT DELAY (10s)** — countdown pe LCD dupa apasarea *, timp sa iesi din camera | + | |
| - | * **ARMED** — PIR activ prin INT0, LED rosu aprins, LCD afiseaza "System ARMED" | + | |
| - | * **ENTRY DELAY (15s)** — miscare detectata, countdown accelerat, utilizatorul introduce PIN | + | |
| - | * **ALARM** — buzzer continuu, LED rosu clipeste, dezactivare doar prin PIN corect | + | |
| - | **Functionalitati implementate:** | + | * **DISARMED** — LED verde aprins, LCD afiseaza "System disarmed / * to arm". Sistemul asteapta apasarea ''*'' pentru a initia armarea. |
| - | * Cod PIN implicit: 1234 (configurabil in cod) | + | * **EXIT DELAY (10s)** — countdown afisat pe LCD, bip la fiecare 2 secunde. Utilizatorul are timp sa paraseasca incaperea. |
| - | * Maxim 3 incercari gresite de PIN → declansare imediata alarma | + | * **ARMED** — PIR activ prin intrerupere externa INT0, LED rosu aprins. Orice miscare detectata declanseaza tranzitia spre ENTRY DELAY. |
| - | * Tasta # reseteaza PIN-ul introdus | + | * **ENTRY DELAY (15s)** — countdown pe LCD cu bip accelerat in ultimele 5 secunde. Utilizatorul introduce PIN-ul pentru dezarmare. |
| - | * Senzor MQ-2 cu debounce (10 citiri consecutive) pentru evitarea falselor alarme | + | * **ALARM** — buzzer continuu, LED rosu clipeste, LCD afiseaza "!! ALARM !!". Dezactivare posibila doar prin PIN corect. |
| - | * Warm-up MQ-2 de 30 secunde la pornire | + | |
| - | * Notificari Bluetooth prin UART: armare, miscare detectata, PIN gresit, alarma activa, gaz detectat | + | **Timekeeping non-blocant** |
| + | |||
| + | Pentru a evita blocarea buclei principale cu ''_delay_ms()'', Timer1 este configurat in mod CTC cu prescaler 64 si ''OCR1A = 249'', generand o intrerupere la fiecare 1ms. ISR-ul incrementeaza un contor global ''millis_count''. Functia ''millis()'' returneaza valoarea acestuia cu intreruperile dezactivate temporar (''cli()''/''sei()'') pentru a evita race conditions. Toate countdown-urile sunt calculate ca diferente ''millis() - delay_start''. | ||
| + | |||
| + | **Intrerupere externa PIR** | ||
| + | |||
| + | PIR-ul este conectat la PD2 (INT0) si configurat pe front crescator (''ISC01=1, ISC00=1''). La detectarea miscarii, ISR-ul seteaza un flag ''pir_flag = 1'', procesat in bucla principala doar daca sistemul este in starea ARMED. Aceasta separare intre ISR si logica principala evita executia de cod complex in intrerupere. | ||
| + | |||
| + | **Scan keypad matriceal** | ||
| + | |||
| + | Keypad-ul 4x4 este scanat prin metoda row-by-row: pe rand, fiecare linie (output) este trasa la LOW, iar coloanele (input cu pull-up) sunt citite. O apasare este confirmata prin dubla citire cu debounce de 20ms, iar eliberarea tastei este asteptata activ inainte de a returna caracterul, prevenind inregistrarea multipla a aceleiasi apasari. | ||
| + | |||
| + | **Comunicatie I2C cu LCD** | ||
| + | |||
| + | LCD-ul 16x2 este controlat prin modulul PCF8574 (adresa 0x27). Intreaga comunicatie | ||
| + | este implementata de la zero, fara biblioteci externe — functiile de initializare, | ||
| + | trimitere de comenzi, afisare de caractere si pozitionare cursor sunt scrise manual | ||
| + | prin manipularea directa a registrelor TWI (''TWCR'', ''TWDR'', ''TWBR''). LCD-ul | ||
| + | primeste date in mod 4-bit: fiecare byte este trimis in doua nibble-uri, fiecare cu | ||
| + | pulsul de Enable ridicat si coborat prin I2C pentru a fi citit de LCD. | ||
| + | |||
| + | **Senzor MQ-2** | ||
| + | |||
| + | Senzorul de gaz este citit pe pinul PC1 (iesire digitala DO). La pornire este implementat un warm-up de 30 de secunde pentru stabilizarea senzorului. Un contor de debounce software (''gas_count'') impune 10 citiri consecutive pozitive inainte de a declansa alarma, eliminand spike-urile electrice izolate. | ||
| + | |||
| + | **Cod PIN si securitate** | ||
| + | |||
| + | PIN-ul este stocat ca sir de caractere si comparat cu ''strcmp()''. Cifrele sunt adaugate una cate una la fiecare apasare, afisate ca ''*'' pe LCD. Dupa 3 incercari gresite consecutive sistemul trece direct in STATE_ALARM. Tasta ''#'' reseteaza PIN-ul introdus curent. Fiecare eveniment (armare, miscare, PIN gresit, alarma, gaz) este trimis prin UART catre modulul Bluetooth HC-05, vizibil in aplicatia Serial Bluetooth Terminal. | ||
| ===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||
| - | {{:pm:prj2026:alexandru.jipa2803:5206555671036369584.jpg?400|}} | + | {{:pm:prj2026:alexandru.jipa2803:5228697284009205102.jpg?400|}} |
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| Line 101: | Line 123: | ||
| ===== Download ===== | ===== Download ===== | ||
| https://github.com/VladaNedelceva/PIR-Based-Home-Security-System.git | https://github.com/VladaNedelceva/PIR-Based-Home-Security-System.git | ||
| - | ===== Jurnal ===== | ||
| - | |||
| - | * **04.05.2026** — Milestone documentatie | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||