RFID Based Access Control

Nume: Al Bouri Saleem
Grupa: 331 CD

Introducere

Descrierea Proiectului

Implementarea unui sistem de acces controlat prin tehnologia RFID. Sistemul va permite utilizatorilor care dețin un card/tag RFID valid (recunoscut) să deschidă zăvorul unei uși.
Accesul va fii acordat utilizatorilor prin folosirea unui card Master care va permite adăugarea sau revocarea altor carduri/taguri RFID, astfel oferind permisiunea mai multor utilizatori să acționeze asupra zăvorului.
Cu ajutorul unui ecran LCD și a unor semnale luminoase (LED-uri), sistemul va oferi un feedback vizual utilizatorului (negativ/pozitiv/atentionare) în urma acțiunilor efectuate de acesta. De asemenea sistemul va fii capabil să detecteze o posibilă încercare de deschidere a ușii când zăvorul este închis prin folosirea unui senzor optic, fapt ce va conduce la declanșarea unei alarme.

Scopul Proiectului

Proiectul final va deservi la protejarea unui dulap/sertar împotriva diferiților utilizatori nelegitimi (care nu au un card RFID recunoscut de către sistem).

Motivație

Deseori oamenii doresc protejarea anumitor obiecte în momentul în care nu pot fii lângă acestea. Deci ideea proiectului a pornit de la dorința de a proteja anumite obiecte speciale, dar în același timp de a acorda acces și altor persoane fără a fii nevoiți de a împărtăși aceiași “cheie” fizică.

Utilitate

Proiectul este util atât pentru mine, cât și pentru alte persoane datorită faptului că este ușor de folosit, oferă siguranță asupra obiectelor depozitate atât prin blocarea accesului (datorită zăvorului), cât și prin declanșarea unei alarme în cazul unui posibil “furt” și în același timp permite accesul mai multor persoane.

Descriere generală

Prezentare Schema Bloc

In centrul imaginii se afla placa de dezvoltare “Arduino Uno R3” (bazat pe microcontrollerul ATmega328P) care comunica cu atat LCD-ul 1602 prin protocolul de comunicatie I2C, cat si cu modulul RFID RC522 prin protocolul de comunicatie SPI. De asemenea, cu ajutorul microcontroller-ului, se va putea genera un semnal de output catre tranzistorul MOSFET, care va permite trecerea curentului si astfel deschiderea incuietoarei (solenoid-ului). Atat senzorul fotosenzitiv cat si cele trei butoane vor trimite semnale analogice catre microcontroller, urmand ca acestea sa fie convertite in semnale digitale pentru a putea fii analizate si a se lua anumite actiuni pe baza valorile acestora. Buzzer-ul si cele doua led-uri (rosu si albastru) vor genera semnale auditive, respectiv vizuale la semnale date de catre microcontroller.

Schema Bloc

Hardware Design

Componente Utilizate

Componente

  • 1 x Arduino Uno R3 ATmega328P
  • 1 x Ecran LCD 2004 Albastru
    • 1 x Ecran LCD 1602 Albastru
  • 1 x Incuietoare electrica 12V
  • 1 x MODUL RELEU 1 CANAL de 5V
    • 1 x Tranzistor NMOS Tip 122
    • 1 x Dioda 1n4007
    • 1 x Rezistenta 2.2K
  • 1 x Modul RFID cu card si tag
  • 1 x Suport Baterii 3 Sloturi
  • 3 x Acumulatoare 18650
  • 1 x Breadboard
  • 1 x Buzzer + 2 Led-uri
    • 3 x Rezistenta 1K
  • 1 x Senzor optic compact - CNY70
    • 1 x Modul Senzor Fotosensitiv
  • 3 x Button de tip PUSH
    • 3 x Rezistenta 1K
    • 1 x Rezistenta 10K
Update Componente
  1. Modulul de RFID (MFRC522) are tensiunea de operare de 3.3V. Pinii dedicati SPI-ului genereaza o tensiune de iesire in jurul a 5V. Solutie:
    • Convertor logic de tensiune (TXS0108E) pe 8 biti, bidirectional.
  1. Modulul de releu afecteaza alimentarea Arduino-ului, prin generarea unei caderi de tensiune pe placa, in momentul in care acesta este activat. Solutie:
    • Tranzistor NMOS + Dioda + Rezistenta
  1. Senzorul Optic CNY70 genereaza rezultate slabe in urma testarii acestuia. Solutie:
    • Modul Senzor Fotosensitiv

Descrierea si Rolul Componentelor

  • Arduino Uno R3 ATmega328P
    • Descriere: Placa de dezvoltare care cuprinde microcontroller-ul ATmega328P.
    • Rol: Unitate centrala care permite comunicarea intre si cu dispozitivile legate la acesta.
  • Ecran LCD 1602 Albastru
    • Descriere: Ecran LCD cu dimensiunea de 2 randuri a cate 16 coloane, avand un fundal albastru si care comunica cu microcontroller-ul prin protocolul I2C (TWI).
    • Rol: Informarea utilizatorului prin mesaje text, cu privire la actiunile executate.
  • Incuietoare electrica 12V
    • Descriere: Incuietoare electrica (solenoid) care se deschide la aplicarea unei tensiuni de 12V.
    • Rol: Blocheaza accesul in momentul in care acesta este inchis.
  • Tranzistor NMOS Tip122, Dioda 1N4007, Rezistenta 2.2K
    • Descriere: Circuit realizat din cele 3 componente.
    • Rol: Permite trecerea curentului prin solenoid in momentul in care este actionata o tensiune pe pinul Gate a tranzistorului MOSFET. Rolul diodei este de a proteja solenoid-ul de eventualele “spike-uri” de tensiune care pot aparea in momentul decuplarii de la tensiune a incuietoarei.
  • Modul RFID
    • Descriere: Cititor de card-uri RFID, care comunica cu microcontroller-ul prin protocolul SPI.
    • Rol: Citirea card-urilor RFID la aproprierea acestora de modul. Ofera date despre card-ul scanat, care ulterior vor fii utilizate in partea “Software” a proiectului.
  • Suport Baterii + 3 x acumulatoare 18650
    • Descriere: Generator de tensiune 11.1V
    • Rol: Genereaza tensiunea necesara care trebuie aplicata asupra incuietoarei pentru a se deschide.
  • Buzzer + 2 x Led-uri
    • Descriere: Sistem sonor si auditiv.
    • Rol: Actioneaza ca un sistem de alarma in cazul unui posibil “furt”, dar genereaza si efecte de feedback (sonore si vizuale) utilizatorului.
  • Modul Senzor Fotosensitiv
    • Descriere: Detecteaza intensitatea luminii.
    • Rol: Folosit pentru a detecta daca usa a fost deschisa in momentul in care lacatul era inchis (pentru a porni sistemul de alarma). De asemenea va fii folosit pentru a bloca citirea altor card-uri cat timp usa este deschisa.
  • Butoane tip PUSH
    • Descriere: Butoane cu apasare de tip push, legate prin rezistoare de 1K intre ele, pentru ca fiecare buton sa genereze valori diferite in momentul in care valoarea de pe pinul de input va fii convertita printr-un ADC. Butoanele sunt legate la un rezistor de 10K folosit ca “pull-down” rezistor.
    • Rol: Aceste butoane vor fii disponibile doar utilizatorului “MASTER” care va putea interactiona cu sistemul. Fiecare buton reprezinta o actiune: Add User (Adauga un card), Remove User (Revoca un card), Enter (care va deschide incuietoarea).
  • Convertor Logic de Tensiune TXS0108E
    • Descriere: Convertor logic de tensiune, bidirectional pe 8 biti, care converteste de la 5V la 3V3 si invers.
    • Rol: Folosit pentru modulul de RFID care are tensiunea de operare de 3V3.

Scheme Electrice

Cele doua exemple prezentate mai jos, reprezinta modalitatile de reprezentare a prototipului realizat din capitolul “Prototip”, subcapitolul “Imagine prototip”.

Breadboard Diagram

Schematic Diagram

Prototip

Conectivitate

Toate conexiunile listate mai jos au formatul: PIN Modul - PIN Arduino. Singura exceptie o face modulul de RFID (RC522) care va lua ca pini de intrare valorile de pe pinii Arduino, dar convertite de la 5V la 3V3.

Toate legaturlile catre GND vor face referire catre acelasi GND de pe placa Arduino.

  • Modul RFID (comunicatie prin SPI):
    • SDA - PINB2
    • SCK - PINB5
    • MOSI - PINB3
    • MISO - PINB4
    • IRQ - None
    • GND - GND
    • RST - PINB1
    • VCC - 3V3
  • LCD 1602 (care dispune de interfata I2C):
    • GND - GND
    • VCC - 5V
    • SDA - PINC4
    • SCL - PINC5
  • Butoanele de tip PUSH:
    • VCC - 5V
    • GND - GND
    • Valoare de iesire - PINC0
  • Modul Senzor Fotorezistiv:
    • VCC - 5V
    • GND - GND
    • Valoare de iesire - PINC1
  • Solenoid 12V:
    • GND - GND
    • VCC - 11V1 (generat de cele 3 acumulatoare 18650)
    • Semnal de intrare - PINB0
  • Buzzer:
    • GND - GND
    • Semnal de intrare - PIND4
  • Led Rosu:
    • GND - GND
    • Semnal de intrare - PIND7
  • Led Rosu:
    • GND - GND
    • Semnal de intrare - PIND2

Imagine Prototip

Imaginea atasata reprezinta un prototip functional. De asemenea, pentru o mai buna intelegere a imaginii, toate componentele (mentionate in capitolul anterior “Componente Utilizate”) au fost evidentiate prin incercuirea lor.

prototip_hardware_explicat_saleem.jpg

Funcionalitate Prototip

In imaginea atasata este reprezentat procesul de deschidere a incuietoarei din perspectiva Master-ului. Acest proces decurge in felul urmator:

  • Se scaneaza card-ul albastru (Master-ul) in fata cititorului RFID.
  • Se selecteaza una dintre cele 3 optiuni ale Master-ului, reprezentate de cele 3 butoane (in cazul de fata s-a selectat butonul cel mai din dreapta, deoarece acesta reprezinta optiunea “Enter”).
  • In urma apasarii butonului din dreapta, incuietoarea se va deschide pentru aproximativ 1.5 secunde. Urmand ca dupa acest interval de timp sa se inchida inapoi. De asemenea, dupa cum se vede si in imagine, becul albastru se aprinde pentru a semnala ca a fost selectat o optiune valida.

prototip_deschide_incuietoare_saleem.jpg

Software Design

Stadiu Actual

Implementarea proiectului, din punct de vedere software, este finalizat in proportie de 95%, urmand ca proiectul sa fie supus mai multor teste, pentru a putea testa posibilele vulnerabilitati sau greseli de implementare.

Mediu de dezvoltare

In cadrul procesului de dezvoltare a proiectului, am optat pentru utilizarea IDE-ului Arduino pentru a implementa functionalitatile propuse, asa cum sunt prezentate în capitolul initial. Alegerea acestui mediu se bazeaza pe disponibilitatea anumitor biblioteci esentiale, care imi permit sa dezvolt si sa finalizez configurarea software a proiectului.

Biblioteci

Bibliotecile folosite in cadrul dezvoltarii proiectului, sunt:

  • MFRC522.h
    • Biblioteca destinata modulului RFID RC522;
    • SPI.h - biblioteca necesara comunicarii SPI a modulului RC522 cu microcontroller-ul.
  • LiquidCrystal_I2C.h
    • Biblioteca destinata ecranului LCD;
    • Comunicarea intre microcontroller si LCD are loc cu ajutorul protocolului de comunicatie I2C.

Mentionez ca folosirea bibliotecilor deja implementate s-a datorat lipsei insuficiente de timp. Acest fapt m-a determinat sa aleg solutii care sa permita o implementare rapida si eficienta, fara a compromite calitatea si functionalitatea proiectului.

Functionalitati Software

Proiectul dispune de mai multe functionalitati, inclusiv:

  • Deschiderea incuietorii prin citirea unui card RFID valid
    • Utilizatorii pot accesa incuietoarea prin simpla apropiere a unui card RFID autorizat.
    • Comunicarea cu modulul RFID este realizata cu ajutorul protocolului SPI.
  • Setarea unui card principal intitulat “master”
    • Un card special poate fi desemnat drept “master”, avand puteri de administrare asupra altor carduri.
  • Adaugarea si/sau stergerea de cartele RFID din memoria programului prin folosirea cardului master
    • Utilizand cardul “master”, se pot gestiona cardurile autorizate, adaugandu-le sau eliminandu-le din sistemul de securitate.
    • Optiunile de utilizatorului “master” sunt dispuse acestuia sub forma unor butoane de tip “push”. Fiecare buton genereaza o tensiune diferita, iar aceasta valoare este citita cu ajutorul implementarii convertor-ului ADC.

Citirea valorilor analogice se va face prin initializarea unui ADC (folosind registrii prezentati in cele 2 parti de cod prezentate mai jos):

  • Functia de ADC se va initializa folosind functia:
void ADC_init(void)
{
 
    //Set ADC reference voltage to AVCC
    ADMUX &= ~(1 << REFS1);
    ADMUX |= (1 << REFS0);
 
    //(Enable ADC
    ADCSRA |= (1 << ADEN);
 
    //Set ADC prescaler to 128
    ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
}
  • Butonul apasat se va depista folosind urmatoarea functie de ADC:
uint16_t ADC_analog_read(uint8_t channel)
{
    // Force input channel to be between 0 and 7 (as ADC pins are PA0-7)
    channel &= 0b00000111;
 
    // Clear the old channel value (if any, last 4 bits in ADMUX)
    ADMUX &= ~(1 << MUX0);
    ADMUX &= ~(1 << MUX1);
    ADMUX &= ~(1 << MUX2);
    ADMUX &= ~(1 << MUX3);
 
    // Select the new channel in ADMUX
    ADMUX |= channel;
 
    // Start single conversion
    ADCSRA |= (1 << ADSC);
 
    // Busy wait for conversion to complete
    while ((ADCSRA & (1 << ADSC)));
 
    // Return ADC value
    return (ADC);
}

In functie de valoarea citita, se va putea afla ce buton a fost apasat de catre utilizatorul master.

  • Detectarea unei posibile tentative de intrare neautorizata
    • In cazul in care este detectata o incercare de acces neautorizata, diferita de prezentarea unui card valid, se va activa o alarma pentru a preveni infiltrarea.
    • Sunetul alarmei este generat cu ajutorul conceptului de PWM.
  • Afisarea unor mesaje cu rol informativ pe LCD
    • Un ecran LCD poate afisa informatii utile utilizatorilor, cum ar fi starea sistemului sau instructiuni de operare.
    • Comunicarea cu ecranul LCD este realizata cu ajutorul protocolului I2C
  • Efecte auditive (buzzer) și vizuale (LED-uri) ca raspuns de feedback la actiunile utilizatorului
    • Utilizatorii vor primi feedback atat auditiv, cat si vizual pentru a confirma actiunile lor, cum ar fi accesul reusit sau tentativa de acces nereusita.

Dupa cum se poate observa, in functionalitatile proiectului au fost implementate concepte invatate in cadrul laboratorului de PM, printre acestea se numara: GPIO, PWM, ADC, SPI, I2C.

Scheletul proiectului, Interactiunea dintre functionalitati si Validare

Scheletul Proiectului

Scheletul proiectului este impartit in mai multe module distincte, fiecare avand rolul sau bine definit pentru a facilita gestionarea si interactiunea intre diferitele aspecte ale proiectului. Aceasta abordare modulara permite o mai mare organizare si structurare a codului, precum si o mai bună gestionare a complexitatii proiectului.
Fisierele existente in schelet sunt:

  • project_pm.ino - fisierul principal
  • adc.h si asc.cpp - fisierele destinate initializari si functionari adc-ului
  • buttons.h si buttons.cpp - fisierele destinate initializari si functionari pinilor pentru butoane
  • lcd.h si lcd.cpp - fisierele destinate initializari si functionari lcd-ului
  • solenoid.h si solenoid.cpp - fisierele destinate initializari si functionari pinilor pentru solenoid

Interactiunea dintre functionalitati

  1. Setarea unui card “master”:
    • La inceputul programului, in momentul “setup-ului”, utilizatorul este rugat sa scaneze un card, care ulterior va deveni “master”.
    • Citirea card-ului se face prin aproprierea acestuia de modulul RFID.
    • Modulul RFID citeste datele card-ului, urmand sa inregistreze UID-ul acestuia in sistem.
  2. Citirea card-ului “master:
    • La apropierea cardului “master” de modulul RFID, sistemul detecteaza acest lucru prin folosirea codului unic UID, si ii va permite acestuia sa aleaga una din cele trei optiuni (“enter”, “add”, “remove”).
  3. Adaugare utilizator:
    • Pentru a adauga un utilizator nou, se procedeaza astfel: se scaneaza initial card-ul “master”, urmand sa selecteze optiunea “add”, iar in final, se va scana si cartela care se doreste sa primeasca acces.
  4. Revocare utilizator:
    • Procesul de revocare este asemanator cu cel de adaugare, cu exceptia selectarii optiunii “remove” de catre utilizatorul “master”.
  5. Deschidere solenoid:
    • Solenoid-ul se deschide in momentul in care un card autorizat este scanat cu ajutorul modulului RFID.
    • In cazul utilizatorului “master” va fii nevoie de un pas intermediu, ci anume selectare optiunii “enter”.
  6. Declansare alarma:
    • Alarma se declanseaza doar in momentul in care, senzorul fotorezistent detecteaza o sursa de lumina mai mare decat cea in care se afla initial, cand usa si incuietoarea sunt inchise.
    • Sistemul de alarma implica atat Led-uri (rosu si albastru) cat si un buzzer, pe langa senzorul fotorezistent.
    • Cand timp valoarea citita de senzor nu se schimba (detecteaza ca usa a fost inchisa), sistemul intra intr-o stare blocanta, in care doar alarma functioneaza.
  7. Afisarea mesajelor informative:
    • Pe tot parcursul interactiunii utilizatorul cu sistemul, ecranul ofera informatii cu privire la actiunea facuta de acesta.

Validare

Toate functionalitatile mentionate au fost si inca sunt in procesul de testare. Astfel, la finalizarea integrala a proiectului (inclusiv din punct de vedere a validarii corectitudinii), rezultatul va fii unul 100% functional, cu o rata de corectitudine peste 95%, avand o marja de 5% pentru posibile erori netratate.

Starea actuala a proiectului dovedeste un comportament corect si valid conform specificatiilor mentionate mai sus, insa, senzorul fotorezistiv trebuie recalibrat pentru a asigura buna functionare a sistemului, reducand posibilele erori din cod.

Calibrare Senzori

  • In cadrul proiectului, am integrat un singur senzor, si anume un fotorezistor. Alegerea utilizarii unui singur senzor este determinata de cerintele specifice ale proiectului si de scopul sau.
  • Astfel, senzorul are rol de detectare a intensitatii luminii, si de a anunta sistemul de un posibil “furt”.
  • In urma mai multor teste, am observat ca plaja de valori pe care senzorul le citeste cand usa este inchisa este intre 788 si 850 (depinde de incaperea in care au fost facute testele).
  • Astfel, am decis ca sistemul sa considere ca usa este inchisa, cat timp senzorul citeste valori mai mari de 778 (o marja de eroare de aproximativ 10 unitati).

Rezultate Obţinute

  • In urma implementarii si asamblarii componentelor (din imaginea atasata in capitolul “Hardware Design”), am ajuns la un produs final care respecta toate functionalitatile promise initial.
  • De asemenea, am incercat sa ofer aspectul unui produs comercial prin folosirea diferitor obiecte, dupa cum se poate observa in imaginea atasata.

produs_final_saleem_331cd.jpg

Concluzii

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/avaduva/saleem.al.txt · Last modified: 2024/05/26 13:16 by saleem.al
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