Mini Seif

  • Autor: Bogdan-Stefan Popescu
  • Grupa: 332CA

Introducere

  • Proiectul consta in realizarea unui mini seif inteligent bazat pe microcontrollerul ATmega328P-XMINI, care permite accesul securizat folosind o parola introdusa de la tastatura si/sau un card RFID. Sistemul utilizeaza un servomotor pentru mecanismul de blocare si deblocare a seifului, iar utilizatorul primeste feedback vizual si audio prin intermediul unui LED RGB si al unui buzzer. Acesta, de asemenea, tine cont de incercarile eronate de deschidere a seifului, blocandu-se automat dupa caz.
  • Ideea proiectului a pornit atat de la intentia de a realiza un sistem embedded de la zero, cat si din dorinta de a avea un seif ce pune accent atat pe securitate, cat si pe interactiunea cu utilizatorul, spre deosebire de variantele cu pret similar din comert care lasa de dorit.
  • Pe langa dezvoltarea personala (care consta in aplicarea notiunilor invatate la laborator), consider ca acest proiect este de ajutor pentru alti utilizatori deoarece acesta poate reprezenta un exemplu practic cum poate fi construit un sistem de securitate inteligent utilizand componente si tehnologii embedded accesibile. Astfel, persoanele interesate pot invata sa isi realizeze propriile solutii si sa le customizeze dupa plac, fara sa depinda complet de produsele comerciale deja existente.

Descriere generală

Schema bloc de mai jos prezinta arhitectura mini seifului inteligent. Acesta permite autentificarea utilizatorului folosind o parola introdusa de la tastatura si/sau un card RFID, iar accesul este oferit prin actionarea unui servomotor pentru deblocare/blocare.

schema_bloc_bps.jpg

Module hardware

  • ATmega328P-XMINI
    • reprezinta unitatea centrala de control a sistemului
    • coordoneaza toate modulele hardware
    • proceseaza datele introduse de utilizator si controleaza componentele de iesire
  • Tastatura matriciala 4×4
    • conectata prin GPIO
    • utilizata ca input pentru introducerea parolei
  • Modul RFID RC522
    • conectat prin protocolul SPI
    • utilizat ca input pentru citirea tag-urilor RFID
    • comunica cu microcontroller-ul prin intermediul convertorului de nivel logic
  • Convertor de nivel logic 3.3V - 5V
    • adapteaza nivelurile logice dintre ATmega328P-XMINI (5V) si modulul RFID RC522 (3.3V)
  • LCD 1602 cu modul I2C
    • conectat prin protocolul I2C
    • afiseaza mesaje pentru utilizator (output)
  • LED RGB
    • conectat prin GPIO
    • ofera feedback vizual utilizatorului (output)
  • Buzzer activ
    • conectat prin GPIO
    • ofera feedback audio (output)
  • Servomotor SG90
    • controlat prin semnal PWM
    • reprezinta mecanismul de blocare/deblocare al seifului
  • Modul UPS 5V + baterie
    • reprezinta sursa de alimentare a sistemului
    • alimenteaza direct microcontroller-ul si servomotorul

Modul software

Partea software a proiectului este impartita in mai multe module care controleaza si coordoneaza componentele hardware ale sistemului.

  • Modulul de autentificare gestioneaza verificarea parolei introduse de la tastatura si validarea cardurilor RFID citite prin modulul RC522.
  • Modulul pentru tastatura detecteaza tastele apasate si transmite datele catre sistemul de autentificare.
  • Modulul RFID initializeaza si gestioneaza comunicatia SPI dintre microcontroller si cititorul RC522.
  • Modulul de feedback gestioneaza interactiunea sistemului cu utilizatorul prin:
    • LCD - controleaza afisarea mesajelor si a starii sistemului prin mesaje de tipul: introducere parola, acces permis/respins, timeout.
    • LED RGB - afiseaza culori in functie de status (verde = acces permis, rosu = acces respins)
    • Buzzer - scoate un sunet in functie de status
  • Modulul servo genereaza semnal PWM pentru controlul mecanismului de blocare/deblocare al seifului.
  • Modulul de securitate gestioneaza numarul de incercari gresite, timpul de introducere a parolei si blocarea temporara a sistemului dupa autentificari esuate repetate.

Hardware Design

Lista de componente

  • Microcontroller ATmega328P-XMINI
  • Ecran LCD 1602 cu modul I2C
  • Tastatura matriciala 4×4
  • Modul RFID RC522 + tag-uri RFID
  • Servomotor SG90 180°
  • LED RGB
  • Buzzer activ
  • Convertor de nivel logic bidirectional 3.3V - 5V
  • Modul UPS 5v 15W cu suport baterie si USB-C
  • Breadboard si fire jumper
  • Rezistente de diferite valori
  • Condensatoare de diferite valori
  • Cutie pentru seif metalica

Schema electrica

Schema electrica a proiectului este construita in jurul microcontrollerului ATmega328P, care controleaza toate perifericele sistemului. In simularea din Tinkercad a fost utilizat Arduino Uno R3 in locul microcontroller-ului propriu-zis (de unde si lipsa tututor pinilor necesari).

  • Tastatura matriciala 4×4 este conectata la pini digitali ai microcontrollerului si este utilizata pentru introducerea parolei de acces.
  • Ecranul LCD 1602 cu interfata I2C este conectat prin liniile SDA si SCL, permitand afisarea mesajelor de stare precum introducerea parolei, acces permis sau acces respins.
  • Servomotorul SG90 este conectat la un pin PWM al microcontrollerului si actioneaza mecanismul de blocare/deblocare al seifului.
  • Pentru semnalizare sunt utilizate un LED RGB (cu rezistente incorporate in proiect) si un buzzer activ, controlate prin pini digitali si folosite pentru feedback vizual si sonor in functie de starea sistemului. De remarcat este faptul ca in simulare a fost utilizat un buzzer cu 2 pini, in loc de 3.
  • Alimentarea circuitului este realizata printr-o sursa de 5V ce substituie (insa are aceleasi valori cu) sursa pe baza de baterii din proiect, iar condensatoarele de 100 nF si 1000 uF sunt utilizate pentru filtrarea si stabilizarea tensiunii de alimentare, in special pentru reducerea fluctuatiilor produse de servomotor.

Modulul RFID RC522 si convertorul de nivel logic bidirectional 3.3V-5V nu sunt reprezentate direct in schema realizata in Tinkercad, insa acestea vor fi conectate in implementarea finala. Modulul RFID comunica cu ATmega328P prin interfata SPI folosind pinii PB2 (SS/SDA), PB3 (MOSI), PB4 (MISO), PB5 (SCK) si PB1 (RST). Deoarece RC522 functioneaza la 3.3V, iar microcontrollerul utilizeaza logica de 5V, intre cele doua componente este necesar un convertor de nivel logic bidirectional pentru adaptarea semnalelor si protejarea modulului RFID. Modulul RFID RC522 este alimentat la 3.3V, iar semnalele SPI dintre RC522 si ATmega328P trec prin convertorul de nivel logic bidirectional 3.3V-5V. Convertorul este alimentat cu 5V pe partea HV si cu 3.3V pe partea LV, avand masa comuna cu restul circuitului.

Faza initiala a hardware-ului (functional)

pbs_initial.jpeg

Faza finala a hardware-ului (atasat de seif), stins

pbs_final1.jpeg pbs_final2.jpeg

Software Design

Descrierea codului aplicatiei

Aplicatia implementeaza firmware-ul pentru un sistem de acces la un seif, folosind exclusiv microcontroller-ul ATmega328P-XMINI si sursa externa. Acesta poate functiona fara a fi conectat la un dispozitiv PC / laptop. Sistemul permite configurarea metodei de autentificare si deschiderea seifului prin parola, card RFID sau parola/card RFID.

Interfata cu utilizatorul este realizata printr-un keypad 4×4 si un display LCD I2C 16×2. Starea sistemului este semnalizata prin LED RGB si buzzer, iar mecanismul de blocare/deblocare este actionat cu un servomotor.

Fluxul principal:

  • * intra in meniul de configurare
  • # porneste procedura de deschidere
  • in configurare:
    • A seteaza autentificare prin parola
    • B seteaza autentificare prin RFID
    • C seteaza autentificare prin parola + RFID
    • D comanda pentru blocare

Configuratia este pastrata in RAM, deci se pierde la resetarea microcontrollerului.

Mediu de dezvoltare

Proiectul este dezvoltat in PlatformIO, folosind framework-ul Arduino.

Configuratia principala se afla in platformio.ini:

  • platforma: atmelavr
  • placa: ATmega328P
  • framework: arduino
  • protocol upload: custom, prin avrdude cu programator xplainedmini

Librarii si surse 3rd-party

Librariile externe sunt declarate in platformio.ini:

  • miguelbalboa/MFRC522@^1.4.12 - comunicatie cu modulul RFID RC522
  • chris–a/Keypad@^3.1.1 - citire keypad matricial 4×4
  • marcoschwartz/LiquidCrystal_I2C@^1.1.4 - control display LCD prin I2C
  • paulstoffregen/TimerOne@^1.1.1 - configurare Timer1 si intrerupere periodica

Sunt folosite si librarii din framework-ul Arduino:

  • Arduino.h
  • Wire.h
  • SPI.h
  • string.h

Algoritmi si structuri implementate

Masina de stari

Aplicatia este organizata ca o masina de stari finite. Starile principale sunt definite in enum-ul AppState:

  • STATE_IDLE - ecran principal
  • STATE_CONFIG_MENU - meniu configurare
  • STATE_CONFIG_PASSWORD - introducere parola noua
  • STATE_CONFIG_RFID - inregistrare card RFID
  • STATE_OPEN_ENTRY - introducere date pentru deschidere
  • STATE_TIMED_MESSAGE - afisare mesaj temporar
  • STATE_ERROR_FEEDBACK - feedback eroare
  • STATE_LOCKOUT - pauza de siguranta dupa 3 incercari gresite

Moduri de autentificare

Modul de autentificare este definit prin enum-ul AuthMode:

  • AUTH_NONE
  • AUTH_PASSWORD
  • AUTH_RFID
  • AUTH_PASSWORD_OR_RFID

In functie de modul selectat, sistemul verifica parola, UID-ul RFID sau oricare dintre cele doua.

Timer si intreruperi

Codul foloseste TimerOne pentru a configura Timer1 la un tick de 1 ms:

Timer1.initialize(APP_TIMER_TICK_US);
Timer1.attachInterrupt(onAppTimerTick);

Functia de intrerupere onAppTimerTick() incrementeaza variabila globala appTimerMs. Aceasta este folosita pentru timeout-uri, mesaje temporare, lockout, buzzer si controlul impulsurilor servo.

Control acces si securitate

Sistemul permite maximum 3 incercari gresite. Dupa atingerea limitei, intra in starea STATE_LOCKOUT timp de 30 de secunde.

La parola gresita, utilizatorul este scos din instanta curenta de introducere a parolei pentru a evita aparitia unei erori duble cauzate de expirarea timerului.

Control servo

Servomotorul este controlat prin impulsuri PWM generate manual. La blocare si deblocare se face o miscare relativa:

  • blocare: deplasare in sensul acelor de ceasornic
  • deblocare: deplasare in sens invers

Unghiul miscarii este configurat prin SERVO_STEP_DEGREES.

Keypad

Keypad-ul este citit prin libraria Keypad. Deoarece firele keypad-ului sunt inversate intre randuri si coloane, matricea tastelor este transpusa in cod pentru ca butoanele fizice sa corespunda corect cu valorile logice.

Surse si functii implementate

Fisierul src/main.cpp contine intreaga logica firmware. Codul este impartit in cateva zone principale:

  • setup() - initializeaza pinii, LCD-ul, SPI-ul, modulul RFID, Timer1 si starea initiala a aplicatiei.
  • loop() - ruleaza continuu si actualizeaza servo-ul, buzzerul si masina de stari.
  • updateAppState() - gestioneaza logica principala a aplicatiei si apeleaza handler-ul corespunzator pentru starea curenta.
  • handleConfigMenu(), handleConfigPassword() si handleConfigRfid() - implementeaza meniul de configurare, setarea parolei si inregistrarea cardului RFID.
  • handleOpenEntry() - verifica parola sau cardul RFID in timpul procedurii de deschidere.
  • registerOpenFailure() si enterLockout() - gestioneaza incercarile gresite si blocarea temporara dupa prea multe erori.
  • onAppTimerTick() si appMillis() - implementeaza baza de timp a aplicatiei folosind Timer1 si intreruperi.
  • updateServo(), lockSafe() si unlockSafe() - controleaza servomotorul pentru blocarea si deblocarea mecanismului.
  • updateBuzzer() si setStatusLed() - controleaza feedback-ul sonor si vizual pentru succes, eroare si stare curenta.

Rezultate Obţinute

  • In urma realizarii proiectului a fost obtinut un prototip functional de sistem de acces pentru seif. Utilizatorul poate configura metoda de autentificare direct din keypad, alegand intre parola, card RFID sau ambele metode.
  • Sistemul afiseaza instructiuni si mesaje de stare pe LCD, semnalizeaza succesul sau eroarea prin LED RGB si buzzer, iar servomotorul actioneaza mecanismul de blocare/deblocare. De asemenea, a fost implementata o protectie la incercari gresite: dupa mai multe autentificari esuate, sistemul intra temporar in stare de blocare.

Concluzii

  • Proiectul demonstreaza integrarea mai multor componente hardware intr-un sistem embedded coerent: keypad, LCD, RFID, LED RGB, buzzer si servomotor. Sistemul realizat indeplineste obiectivul principal, acela de a controla accesul la un seif prin metode de autentificare configurabile.
  • Realizarea proiectului a contribuit si la dezvoltarea cunostintelor practice despre programarea microcontrollerelor, lucrul cu periferice hardware, folosirea intreruperilor si organizarea codului intr-o aplicatie embedded.
  • Ca dezvoltari viitoare, configuratia ar putea fi salvata in EEPROM pentru a ramane disponibila dupa resetare, iar mecanismul de securitate ar putea fi extins cu parole mai lungi sau jurnalizarea incercarilor de acces.

Download

Codul sursa este disponibil pe GitHub: https://github.com/bogdan2811/mini_seif

Jurnal

  • Alegere tema proiect - 20 aprilie 2026
  • Achizitionare piese - 30 aprilie 2026
  • Completare introducere in documentul de pe OCW (etapa 1) - 09 mai 2026
  • Completare sectiune hardware in documentul de pe OCW (etapa 2) - 13 mai 2026
  • Completare sectiune software si concluzii in documentul de pe OCW (etapa 3) - 23 mai 2026
  • Actualizare sectiune hardware cu poze - 23 mai 2026

Bibliografie/Resurse

Resurse hardware

Resurse software

pm/prj2026/farhad_ali.gul/bogdan.popescu2811.txt · Last modified: 2026/05/25 05:44 by bogdan.popescu2811
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