Table of Contents

Mini Seif

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

Introducere

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

Modul software

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

Hardware Design

Lista de componente

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).

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:

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:

Librarii si surse 3rd-party

Librariile externe sunt declarate in platformio.ini:

Sunt folosite si librarii din framework-ul Arduino:

Algoritmi si structuri implementate

Masina de stari

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

Moduri de autentificare

Modul de autentificare este definit prin enum-ul AuthMode:

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:

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:

Rezultate Obţinute

Concluzii

Download

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

Jurnal

Bibliografie/Resurse

Resurse hardware

Resurse software

Export to PDF