SEIF
Introducere
Proiectul presupune realizarea unui seif care se deschide pe baza unei combinatii numerice de 4 cifre. La introducerea corecta a pinului, seif-ul va emite un sunet, iar la introducerea gresita a acestuia, va emite un alt sunet. Ambele situatii (de deblocare sau greseala) vor genera si un mesaj pe LCD. In plus, daca nu se detecteaza nici o miscare, acesta se va inchide singur.
Scopul acestuia este de a pastra in siguranta obiecte de valoare.
Ideea initiala a venit de la dorinta de a pastra lucrurile valoroase intr-un loc sigur, ferit de accesul celorlalti.
Acesta este util pentru ca nu necesita pastrarea unei chei, datorita formatului electronic. Ofera acces confidential, fara repercursiunile fizice pe care le-ar avea necesitatea unei chei - riscul de a o pierde sau de a fi furata. Astfel, utilizatorul poate sta linistit cu privire la siguranta obiectelor sale valoroase.
Descriere Generala
Componente și interacțiuni
Arduino Nano gestionează toate componentele sistemului, tastatura si senzorul PIR care sunt de intrare si LCD-ul si servomotorul care sunt de iesire.
Senzor de mișcare (PIR) conectat la un pin digital, D12 configurat cu întreruperi. Când se detectează mișcare, se trimite un semnal către Arduino, si usa nu se incuie daca nu se detesteaza miscare 10s, se incuie.
Servomotrul este conectat la pinul D10 si se roteste cand se introduce parola corect la 90 de grade.
Tastatura este conectata la pinii D2-D9 si detecteaza tastele introduse de utilizator.
Buzzerul este conectat la pinul D11. Canta un ton cand se introduce parola corecta, si altul cand aceasta este gresita.
Ledurile verde si rosu sunt conectate la pinii A0 respectiv A1, folositi ca digitali, si se aprind asa: rosu cand se introduce gresit, verde cand corect.
LCD-ul cu I2C este conectat la pinii A4 SDA si A5 SCL. El afiseaza un mesal corelat cu situatia in cauza. Initial se cere parola, se afiseaza ce se introduce, daca parola este corecta sau gresita se afiseaza un mesaj aparte, iar daca este corecta, senzorul de miscare porneste si ecranul afiseaza cate secunde au mai ramas pana cand seiful se va inchide singur.
Hardware Design
Software Design
Link GitHub:
https://github.com/andreealeugeorgiana/pm-safe/blob/main/sketch_may18a.ino
Firmware-ul este scris în limbajul C pentru microcontrolerul ATmega328P, folosind registrele hardware direct pentru control maxim asupra sistemului. Aplicația este împărțită în mai multe componente logice:
Inițializare hardware completă (timere, PWM, UART, I2C, pini GPIO pentru keypad, senzori și actuatori)
Sistem de autentificare bazat pe parolă cu interfață keypad 4×4
Control servo motor pentru deschiderea/închiderea ușii
Monitorizare PIR pentru detectarea mișcării și timeout automat
Sistem de alarmă cu buzzer și LED-uri de stare
Interfață LCD I2C pentru feedback vizual către utilizator
Comunicare UART pentru logging și debug
Mediu de dezvoltare
Platforma utilizată: Arduino IDE
Microcontroler: ATmega328P
Toolchain: AVR-GCC + AVR Libc
Biblioteci utilizate: avr/io.h, avr/interrupt.h, util/delay.h pentru control hardware direct
Algoritmi și structuri implementate
Sistem de timekeeping: Întrerupere Timer0 pentru menținerea timpului sistem în milisecunde, cu protecție overflow
Unordered List Item* Scanare keypad cu debounce: Algoritm de scanare matricială 4×4 cu debounce temporal pentru prevenirea citirilor multiple false
Comunicare I2C pentru LCD: Implementare completă I2C master pentru controlul afișajului LCD prin expandor I2C (PCF8574)
Control PWM pentru servo: Timer1 în modul Fast PWM pentru generarea semnalelor de control servo (1-2ms pulse width)
Generare tonuri buzzer: Timer2 în modul CTC pentru generarea frecvențelor audio cu durată controlată
Verificare parolă cu feedback: Comparare string-uri cu mesaje diferențiate pentru acces granted/denied
Sistem de timeout inteligent: Monitorizare continuă PIR cu resetare automată după 10 secunde de inactivitate
State machine pentru sistem: Logică de stare (locked/unlocked/alarm) cu tranziții controlate prin taste speciale
Protecție întreruperi: Utilizarea cli()/sei() pentru accesul thread-safe la variabilele volatile de timp
Melodii programabile: Arrays de frecvențe și durată pentru feedback audio diferențiat (succes/eroare)
Display management: Funcții optimizate pentru actualizarea LCD cu cursor positioning și clear selective
Logging structurat: Mesaje UART formatate cu sprintf pentru debugging și monitorizare sistem
Jurnal
10 mai: terminare documentare + comanda piese
17 mai: implementare hardware: servomotor, tastatura, led-uri, buzzer
18 mai: implementare hardware: lcd, senzor PIR
22 mai: incepere implementare software
27 mai: terminare implementare software
28 mai: constructie cutie exterioara si implementare finala
Bibliografie