This is an old revision of the document!
Smart Lock
Introducere
Acest proiect implementează o încuietoare inteligentă bazată pe un microcontroller ATmega328P, care permite accesul printr-un cod PIN de 4 cifre definit de utilizator.
Ce face proiectul:
Permite introducerea unui cod PIN de 4 cifre prin intermediul a 3 butoane de navigare (UP, DOWN, OK)
Afișează feedback în timp real pe un display LCD 16×2
Deblochează un mecanism prin intermediul unui servo motor la introducerea PIN-ului corect
Permite schimbarea PIN-ului printr-un buton dedicat
Implementează un mecanism de protecție anti-brute-force (lockout după 3 încercări greșite)
Scop: Crearea unui sistem electronic funcțional care combină input digital, afișare, control al unui actuator mecanic și stocare persistentă, simulând logica unei încuietori electronice reale.
Ideea de pornire: Am pornit de la dorința de a realiza un sistem de securitate accesibil pentru spații private, care să poată fi utilizat fără chei fizice și care să ofere posibilitatea de schimbare facilă a codului de acces.
Utilitate:
Pentru utilizatori: înlocuiește cheile fizice cu un cod ușor de reținut și schimbat
Pentru mine: integrează multiple concepte din electronică digitală - GPIO, PWM, comunicație I2C, timere, într-un singur proiect coerent
Descriere generală
Sistemul este organizat în jurul microcontrollerului ATmega328P (placă XMINI), care coordonează toate modulele hardware și implementează logica aplicației printr-o mașină de stări.
Module hardware:
ATmega328P-XMINI: microcontrollerul central care rulează firmware-ul
LCD 1602 I2C: afișează interfața utilizator (mesaje, cifre PIN, feedback)
4 butoane tactile: input pentru navigare PIN și schimbare cod
LED RGB: indicator vizual al stării sistemului (verde/roșu/albastru)
Servo SG90: actuator mecanic pentru deblocare/blocare
Modul MB102: sursă de alimentare separată pentru servo (5V stabil)
Baterie 9V: sursa primară de energie pentru MB102
Module software:
Driver I2C (TWI): comunicație cu LCD-ul prin protocolul I2C
Driver LCD: comenzi de inițializare, scriere caractere, control cursor
Driver PWM Servo: generare semnal PWM la 50Hz cu Timer1 pentru control poziție
Driver GPIO + Debounce: citire butoane cu eliminare contact bouncing
Driver EEPROM: salvare/citire PIN persistent
Mașină de stări (FSM): logica principală a aplicației
Interacțiune între module: Butoanele generează evenimente care sunt procesate de mașina de stări, care la rândul ei actualizează LCD-ul, controlează servo-ul prin PWM, schimbă culoarea LED-ului RGB și citește/scrie din EEPROM.
Hardware Design
Listă de componente
| Componentă | Cantitate | Rol în proiect |
| Placa ATmega328P-XMINI | 1 | Microcontroller principal |
| Display LCD 1602 cu modul I2C | 1 | Afișare interfață utilizator |
| Servo motor SG90 | 1 | Actuator mecanism blocare |
| Modul de alimentare MB102 | 1 | Regulator 5V pentru servo |
| Baterie 9V | 1 | Sursa primară de energie |
| Conector baterie 9V cu mufă DC | 1 | Conectare baterie la MB102 |
| Breadboard 400 puncte | 1 | Prototipare conexiuni |
| Buton tactil 6x6mm | 4 | Input utilizator |
| LED RGB cu catod comun | 1 | Indicator status |
| Rezistor 220Ω | 3 | Limitare curent canale R/G/B LED |
| Condensator electrolitic 470µF / 35V | 1 | Filtrare alimentare servo |
| Fire jumper M-M și M-F | ~20 | Conexiuni între componente |
Software Design
Mediu de dezvoltare
PlatformIO (extensie pentru VSCode) - build system și upload pe placă
avr-gcc - compilator pentru AVR
avrdude - utilitar de programare prin debugger-ul mEDBG integrat în XMINI
Limbaj: C99 (bare-metal, fără framework Arduino)
Biblioteci 3rd-party folosite
avr-libc - biblioteca standard AVR (avr/io.h, avr/interrupt.h, avr/eeprom.h, util/delay.h)
lcd_i2c - driver minimal I2C pentru LCD (modificat și integrat în proiect)
Algoritmi și structuri de date
1. Mașină de stări finite (FSM):
typedef enum {
STATE_LOCKED, // Sistemul afișează "Introduceti PIN"
STATE_ENTERING_PIN, // Utilizatorul introduce cifră cu cifră
STATE_VERIFYING, // Compară PIN-ul introdus cu cel salvat
STATE_UNLOCKED, // Servo deschis, LED verde, auto-lock dupa N sec
STATE_SET_OLD_PIN, // Verifica PIN-ul vechi inainte de schimbare
STATE_SET_NEW_PIN, // Introducere PIN nou + salvare in EEPROM
STATE_LOCKOUT // 3 incercari gresite -> blocare 30s
} system_state_t;
2. Debouncing software pentru butoane:
Timer interrupt la 10ms care eșantionează starea butoanelor
Un buton e considerat apăsat doar dacă e citit ca LOW de 3 ori consecutiv
Detecție flanc descendent pentru a genera un singur eveniment per apăsare
3. Generare PWM pentru servo:
Timer1 configurat în mod Fast PWM, ICR1=39999 (perioadă 20ms la 16MHz)
Modificare OCR1A între 1000 (1ms = 0°) și 4800 (2.4ms = 180°)
4. Stocare în EEPROM:
Adresa 0x00: flag “first boot” (1 byte)
Adresele 0x01-0x04: cele 4 cifre ale PIN-ului
Adresa 0x05: contor încercări greșite (resetat la lockout)
5. Anti-brute-force (lockout):
Contor de încercări greșite consecutive
La 3 încercări → tranziție în STATE_LOCKOUT pentru 30 secunde
Pe LCD se afișează countdown în timp real
Toate butoanele ignorate în timpul lockout-ului
Funcții implementate (etapa 3)
De completat la etapa finală cu lista funcțiilor și descrierea lor./
===== Rezultate Obținute =====
===== Concluzii =====
===== Download =====
===== Jurnal =====
* 01.05.2026 Achizitionarea pieselor
* 08.05.2026 Prima versiune a documentatiei
===== Bibliografie / Resurse =====
==== Resurse Hardware ====
==== Resurse Software ====