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.
Hardware Design
Componente Utilizate
Componente
1 x Arduino Uno R3 ATmega328P
1 x Ecran LCD 2004 Albastru
1 x Incuietoare electrica 12V
1 x MODUL RELEU 1 CANAL de 5V
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
1 x Senzor optic compact - CNY70
3 x Button de tip PUSH
3 x Rezistenta 1K
1 x Rezistenta 10K
Update Componente
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:
Modulul de releu afecteaza alimentarea Arduino-ului, prin generarea unei caderi de tensiune pe placa, in momentul in care acesta este activat. Solutie:
Senzorul Optic CNY70 genereaza rezultate slabe in urma testarii acestuia. Solutie:
Descrierea si Rolul Componentelor
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.
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.
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.
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).
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.
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.
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.
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
LiquidCrystal_I2C.h
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:
Citirea valorilor analogice se va face prin initializarea unui
ADC (folosind registrii prezentati in cele 2 parti de cod prezentate mai jos):
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);
}
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.
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
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.
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”).
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.
Revocare utilizator:
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”.
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.
Afisarea mesajelor informative:
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.
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