This is an old revision of the document!
Proiectul constă într-un seif electronic controlat printr-o tastatură matriceală 4×4, care permite deblocarea unui mecanism de zăvorâre (servomotor SG90) doar la introducerea codului PIN corect.
Utilizatorul introduce un cod PIN de 4 cifre pe tastatura matriceală. Dacă codul este corect, servomotorul deblochează ușa seifului, LCD-ul afișează “Acces permis” și LED-ul RGB devine verde. La cod greșit, buzzer-ul emite un semnal sonor iar LED-ul devine roșu. După 3 încercări greșite consecutive, sistemul intră în blocare temporară de 30 de secunde. Un senzor LDR montat în interiorul seifului detectează deschiderea forțată a ușii și declanșează o alarmă sonoră continuă.
Scopul proiectului este realizarea unui sistem de securitate simplu și funcțional construit în jurul microcontrolerului ATmega328P Xplained Mini, care să demonstreze integrarea perifericelor GPIO, PWM, ADC și I2C într-un sistem embedded real.
Sistemul este compus din următoarele module hardware, toate coordonate de microcontrolerul ATmega328P Xplained Mini:
| Modul | Rol | Interfață |
|---|---|---|
| Tastatură 4×4 | Input cod PIN | GPIO |
| LCD 1602 | Afișare mesaje | I2C |
| Servomotor SG90 | Mecanism blocare ușă | PWM |
| Senzor LDR | Detecție efracție | ADC |
| Buzzer pasiv | Feedback audio | PWM |
| LED RGB | Indicator vizual status | GPIO/PWM |
Fluxul de funcționare al sistemului este următorul: utilizatorul introduce cifre pe tastatură, ATmega procesează input-ul prin întreruperi, compară codul cu cel stocat în EEPROM, comandă servomotorul prin PWM și afișează rezultatul pe LCD prin I2C. LDR-ul monitorizează continuu lumina prin ADC și poate declanșa alarma independent de starea codului.
| Componentă | Cantitate |
|---|---|
| ATmega328P Xplained Mini | 1 |
| Tastatură matriceală 4×4 (membrană) | 1 |
| Display LCD1602 HD44780 | 1 |
| Modul interfață I2C pentru LCD1602 | 1 |
| Servomotor SG90 180 grade | 1 |
| Modul senzor LDR (fotorezistor) | 1 |
| Modul buzzer pasiv KY-006 | 1 |
| Modul LED RGB 3 culori | 1 |
| Breadboard 830 puncte MB-102 | 1 |
| Set rezistoare 20 valori 400 bucăți | 1 |
| Fire Dupont tată-mamă 20cm (x40) | 1 |
| Fire Dupont tată-tată 30cm (x40) | 1 |
| Cutie lemn (carcasă seif) | 1 |
| Componentă | Pini ATmega328P |
|---|---|
| Tastatură 4×4 (rânduri) | PB0, PB1, PB2, PB3 |
| Tastatură 4×4 (coloane) | PD4, PD5, PD6, PD7 |
| LCD I2C (SDA) | PC4 |
| LCD I2C (SCL) | PC5 |
| Servo SG90 | PB1 (OC1A, Timer1 PWM) |
| LDR | PC0 (ADC0) |
| Buzzer | PB2 (OC1B, Timer1 PWM) |
| LED RGB roșu | PD3 + rezistență 220Ω |
| LED RGB verde | PD5 + rezistență 220Ω |
| LED RGB albastru | PD6 + rezistență 220Ω |
| Tool | Utilizare |
|---|---|
| Microchip Studio | IDE principal |
| AVR-GCC | Compilator C |
| AVRDUDE | Programare prin USB (mEDBG) |
| Librărie | Scop |
|---|---|
| LiquidCrystal_I2C (AVR) | Comunicație LCD prin I2C |
| avr/io.h | Registre I/O |
| avr/interrupt.h | Gestionare întreruperi |
| avr/eeprom.h | Stocare cod PIN persistent |
| util/delay.h | Delay-uri software |
Scanare tastatură — Lab 0 (GPIO) + Lab 2 (Întreruperi)
Timer2 declanșează o întrerupere la fiecare 10ms pentru scanarea matriceală și debounce. Rândurile sunt configurate ca OUTPUT, coloanele ca INPUT_PULLUP. La detecția unei taste, cifra este adăugată în buffer-ul codului curent.
Verificare cod PIN — EEPROM
Codul PIN este stocat persistent în EEPROM. La fiecare introducere, buffer-ul este comparat cu codul stocat. După 3 încercări greșite consecutive sistemul se blochează 30 de secunde. Codul poate fi schimbat printr-o secvență specială cu tasta #.
Control servomotor — Lab 3 (Timer/PWM)
Timer1 este configurat în modul Fast PWM la frecvența de 50Hz (perioadă 20ms). Poziția deblocat corespunde unui puls de 1500μs (90°), iar poziția blocat unui puls de 500μs (0°).
Buzzer — Lab 3 (Timer/PWM)
Ton scurt de 1kHz la apăsarea unei taste, ton de 500Hz timp de 500ms la cod greșit, ton continuu de 2kHz la declanșarea alarmei.
Senzor LDR anti-efracție — Lab 4 (ADC)
ADC configurat în modul Free Running cu referință AVcc. La pornire se calibrează pragul de lumină cu ușa închisă. Dacă valoarea ADC depășește pragul cu un offset predefinit, alarma este declanșată. Verificarea se face la fiecare 100ms printr-un flag setat de Timer2.
Afișaj LCD — Lab 6 (I2C)
Mesajele afișate sunt: “Introduceti PIN:”, “Acces permis!”, “Cod incorect!”, “ALARMA ACTIVA!” și “Blocat 30s…”. Cifrele introduse sunt mascate cu asteriscuri (*).
LED RGB — Lab 0 (GPIO)
Verde la cod corect și ușă deblocată, roșu la cod greșit sau alarmă, clipire roșu la blocare temporară.
De completat după finalizarea proiectului.
De completat după finalizarea proiectului.
Arhiva cu sursele .c/.h, schema electrică și fișierul README se va încărca după finalizarea proiectului.
| Săptămâna | Activitate |
|---|---|
| Săptămâna 1 | Achiziție componente, testare individuală (LCD, tastatură, servo) |
| Săptămâna 2 | Implementare scanare tastatură + verificare PIN + control servo |
| Săptămâna 3 | Integrare LDR (anti-efracție) + buzzer + LED RGB |
| Săptămâna 4 | Montare în carcasă, teste finale, documentație |
* ATmega328P Datasheet — https://www.microchip.com/en-us/product/atmega328p * ATmega328P Xplained Mini User Guide — https://www.microchip.com * SG90 Servo Datasheet — http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf * LDR Datasheet GL5528 — https://www.datasheethub.com/gl5528-datasheet/
* Laboratoare PM OCW — https://ocw.cs.pub.ro/courses/pm * AVR-GCC Documentation — https://gcc.gnu.org/wiki/avr-gcc * LiquidCrystal I2C AVR — https://github.com/marcoschwartz/LiquidCrystal_I2C * Room of Inspiration PM — https://ocw.cs.pub.ro/courses/pm/roomofinspiration