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:

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
  • Detecție flanc descendent pentru a genera un singur eveniment per apăsare

3. Generare PWM pentru servo:

  • Timer1 configurat în mod Fast PWM
  • Modificare OCR1A între 1000 (1ms = 0°) și 4800 (2.4ms = 180°)

4. Anti-brute-force:

  • 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 ====

pm/prj2026/cezar.zlatea/madalin.militaru.1778351811.txt.gz · Last modified: 2026/05/09 21:36 by madalin.militaru
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