This is an old revision of the document!
Autor: Leca Maria-Catalina
Proiectul constă în realizarea unui sistem de control acces bazat pe RFID, cu afișare pe LCD I2C și funcție de detecție a vizitatorului. Sistemul permite deschiderea unei uși atunci când este detectat un card RFID autorizat sau atunci când este apăsat un buton de acces manual.
Scopul proiectului este realizarea unui prototip funcțional pentru o ușă inteligentă, care poate identifica utilizatorii prin intermediul unui modul RFID RC522 și poate oferi feedback prin LED-uri, buzzer pasiv și afișaj LCD 16×2 cu interfață I2C.
Ideea de la care am pornit a fost construirea unui sistem asemănător cu o yală electronică sau cu un interfon simplificat. Sistemul permite accesul doar pentru persoane autorizate, dar poate și detecta un vizitator prin intermediul unui senzor de sunet.
Proiectul este util deoarece combină mai multe componente hardware și concepte software într-un sistem practic. Pentru alții, poate fi folosit ca punct de plecare pentru un sistem de acces mai complex. Pentru mine, proiectul este util deoarece m-a ajutat să înțeleg mai bine comunicațiile SPI și I2C, controlul unui servo motor, folosirea pinilor GPIO, afișarea mesajelor pe LCD și organizarea codului pentru un sistem embedded.
Sistemul are în centru o placă Arduino Uno, care controlează toate modulele hardware și software ale proiectului. Utilizatorul apropie un card RFID sau un tag RFID de cititorul RFID RC522. Modulul citește UID-ul cardului, iar Arduino compară acest UID cu UID-ul salvat în program.
Dacă UID-ul este valid, sistemul acordă acces permis. În acest caz, se aprinde LED-ul verde, se activează buzzer-ul pasiv cu o melodie scurtă, pe LCD apare mesajul de confirmare, iar servo motorul SG90 se rotește pentru a simula deschiderea ușii.
Dacă UID-ul nu este valid, sistemul afișează mesajul Access denied, aprinde sau clipește LED-ul roșu și activează buzzer-ul pasiv cu un sunet de eroare. După 3 încercări greșite, sistemul intră într-o stare de blocare timp de 30 de secunde.
Sistemul include și un buton de acces manual, care permite deschiderea ușii fără card. De asemenea, senzorul de sunet detectează un zgomot sau o bătaie, iar sistemul afișează pe LCD mesajul pentru vizitator și activează buzzer-ul ca o sonerie.
Schema bloc prezintă modul în care componentele proiectului interacționează cu placa Arduino Uno ATmega328P. Modulul RFID RC522 comunică prin SPI cu microcontrollerul, iar Cardul / Tag-ul RFID este identificat contactless. LCD-ul 16×2 cu I2C este conectat prin liniile SDA / SCL, iar servomotorul SG90 este controlat prin PWM pentru acționarea mecanică a ușii sau barierei fizice.
Modulele LED roșu + LED verde, buzzer pasiv, buton acces manual și senzor de sunet sunt conectate prin pini GPIO. Calculatorul/laptopul este folosit pentru alimentare 5V și pentru comunicarea de debug prin UART.
| Modul | Tip | Descriere |
|---|---|---|
| Arduino Uno | Hardware / Controller | Controlează toate componentele proiectului |
| RFID RC522 | Hardware / Senzor | Citește cardurile și tagurile RFID |
| Card RFID / Tag RFID | Hardware | Element folosit pentru identificarea utilizatorului |
| LCD 16×2 I2C | Hardware / Afișaj | Afișează starea sistemului |
| Servo motor SG90 | Hardware / Actuator | Simulează deschiderea și închiderea ușii |
| LED roșu | Hardware / Semnalizare | Indică acces respins sau ușă închisă |
| LED verde | Hardware / Semnalizare | Indică acces permis sau ușă deschisă |
| Buzzer pasiv | Hardware / Semnalizare sonoră | Redă tonuri și note generate de Arduino |
| Buton | Hardware / Input | Permite deschiderea manuală a ușii |
| Senzor de sunet | Hardware / Senzor | Detectează un vizitator prin zgomot |
| Firmware Arduino | Software | Conține logica de control a sistemului |
| Serial Monitor | Software / Debug | Afișează mesaje pentru testare și depanare |
Modulul RFID RC522 comunică cu placa Arduino Uno prin interfața SPI. LCD-ul comunică prin I2C, folosind pinii dedicați SDA și SCL ai plăcii Arduino. Servo motorul este controlat printr-un semnal de tip PWM, iar LED-urile, buzzer-ul pasiv, butonul și senzorul de sunet sunt conectate la pini digitali de tip GPIO.
Fluxul de funcționare este următorul:
| Nr. | Componentă | Cantitate | Rol |
|---|---|---|---|
| 1 | Arduino Uno | 1 | Placa principală de control |
| 2 | Cablu USB | 1 | Alimentare și programare |
| 3 | Laptop / Calculator | 1 | Scriere cod, încărcare firmware și monitorizare serială |
| 4 | LED roșu | 1 | Semnalizare acces respins / ușă închisă |
| 5 | Rezistor pentru LED roșu | 1 | Limitare curent LED |
| 6 | LED verde | 1 | Semnalizare acces permis / ușă deschisă |
| 7 | Rezistor pentru LED verde | 1 | Limitare curent LED |
| 8 | Buzzer pasiv | 1 | Feedback sonor prin frecvențe generate cu funcția tone() |
| 9 | Buton | 1 | Acces manual |
| 10 | Rezistor pentru buton | 1 | Stabilizare semnal buton |
| 11 | RFID RC522 | 1 | Citire carduri RFID |
| 12 | Cartelă RFID | 1 | Identificator pentru acces |
| 13 | Tag RFID | 1 | Identificator RFID alternativ |
| 14 | Micro servo SG90 | 1 | Simulare deschidere/închidere ușă |
| 15 | LCD 16×2 cu I2C | 1 | Afișare mesaje |
| 16 | Senzor de sunet | 1 | Detecție vizitator |
| Componentă | Pin componentă | Pin Arduino |
|---|---|---|
| RFID RC522 | SDA / SS | D10 |
| RFID RC522 | RST | D9 |
| RFID RC522 | MOSI | D11 |
| RFID RC522 | MISO | D12 |
| RFID RC522 | SCK | D13 |
| RFID RC522 | 3.3V | 3.3V |
| RFID RC522 | GND | GND |
| Servo SG90 | Semnal | D3 |
| Servo SG90 | VCC | 5V |
| Servo SG90 | GND | GND |
| Buzzer pasiv | Semnal | D2 |
| Buzzer pasiv | GND | GND |
| LED roșu | Anod | D4 prin rezistor |
| LED roșu | Catod | GND |
| LED verde | Anod | D5 prin rezistor |
| LED verde | Catod | GND |
| Buton | Semnal | D6 |
| Buton | GND | GND |
| Senzor de sunet | D0 | D7 |
| Senzor de sunet | VCC | 5V |
| Senzor de sunet | GND | GND |
| LCD I2C | SDA | SDA |
| LCD I2C | SCL | SCL |
| LCD I2C | VCC | 5V |
| LCD I2C | GND | GND |
Schema electrică a proiectului va fi adăugată după finalizarea desenului complet al conexiunilor hardware.
Modulul RFID RC522 trebuie alimentat la 3.3V, deoarece alimentarea directă la 5V poate deteriora modulul. Comunicarea cu Arduino se face prin SPI, folosind pinii D10-D13.
Afișajul LCD 16×2 cu I2C este conectat la pinii dedicați SDA și SCL ai plăcii Arduino Uno, ceea ce reduce numărul de fire necesare față de un LCD conectat în mod paralel.
Servo motorul SG90 este folosit pentru a simula mecanismul de deschidere al unei uși. Poziția de 0 grade reprezintă ușa închisă, iar poziția de 180 grade reprezintă ușa deschisă.
LED-ul roșu indică starea de ușă închisă, acces respins sau sistem blocat. LED-ul verde indică acces permis sau ușă deschisă. Buzzer-ul pasiv este folosit pentru confirmări sonore, avertizări și redarea unor tonuri diferite generate de Arduino.
Card RFID detectat
|
v
Citire UID prin SPI
|
v
Comparare UID cu UID autorizat
|
+----------------------+
| |
v v
UID valid UID invalid
| |
v v
LED verde ON LED roșu blink
Buzzer succes Buzzer eroare
LCD Access granted LCD Access denied
Servo 180 grade Incrementare failCount
| |
v v
Ușă deschisă Dacă failCount >= 3
| |
v v
Delay Blocare 30 secunde
|
v
Servo 0 grade
Ușă închisă
Sistemul a fost testat prin conectarea componentelor pe breadboard. Au fost verificate următoarele funcționalități:
Pentru siguranța montajului, modulul RFID RC522 este alimentat la 3.3V, iar LED-urile sunt conectate prin rezistori pentru limitarea curentului. Conexiunile au fost verificate pentru a evita scurtcircuitele și alimentarea greșită a modulelor.
Pentru dezvoltarea aplicației am folosit Arduino IDE. Programul este scris în limbajul C/C++ pentru Arduino și este încărcat pe placa Arduino Uno prin cablul USB.
Pentru testare și depanare am folosit Serial Monitor, unde sunt afișate mesaje despre starea sistemului, cardurile detectate, accesul permis sau respins și starea de blocare a sistemului.
| Bibliotecă | Rol |
|---|---|
| SPI.h | Comunicare SPI cu modulul RFID |
| MFRC522.h | Controlul cititorului RFID RC522 |
| Servo.h | Controlul servo motorului SG90 |
| Wire.h | Comunicare I2C |
| LiquidCrystal_I2C.h | Controlul LCD-ului 16×2 cu interfață I2C |
Pinii principali folosiți în aplicație sunt:
| Pin Arduino | Rol |
|---|---|
| D10 | SS / SDA pentru RFID RC522 |
| D9 | RST pentru RFID RC522 |
| D2 | Control buzzer pasiv |
| D3 | Control servo motor SG90 |
| D4 | Control LED roșu |
| D5 | Control LED verde |
| D6 | Citire buton acces manual |
| D7 | Citire senzor de sunet |
| SDA | Linie de date pentru LCD I2C |
| SCL | Linie de ceas pentru LCD I2C |
Programul folosește variabile pentru memorarea numărului de încercări greșite, pentru calcularea timpului de blocare temporară și pentru evitarea activării repetate a senzorului de sunet.
În program este memorat UID-ul cardului autorizat, care este comparat cu UID-ul citit de modulul RFID RC522. Dacă cele două valori coincid, sistemul permite accesul.
Algoritmul principal al aplicației este:
| Funcție | Descriere |
|---|---|
| setup() | Inițializează Serial Monitor, RFID-ul, LCD-ul, servo motorul și pinii |
| loop() | Conține logica principală a sistemului |
| doorClosed() | Setează starea pentru ușă închisă |
| doorOpen() | Setează starea pentru ușă deschisă |
| authorizeAccess() | Acordă accesul pentru cardul autorizat |
| denyAccess() | Refuză accesul pentru cardul neautorizat |
| blinkRedDenied() | Clipește LED-ul roșu și activează buzzer-ul |
| doorOpenWait() | Ține ușa deschisă, apoi semnalizează închiderea |
| visitorRing() | Activează semnalul pentru vizitator |
| lcdMessage() | Afișează două linii de text pe LCD |
Proiectul integrează următoarele noțiuni:
Codul a fost organizat în funcții separate pentru a fi mai ușor de citit, testat și modificat. Fiecare funcție are un rol clar: controlul ușii, acordarea accesului, refuzarea accesului, afișarea mesajelor pe LCD sau tratarea detecției de vizitator.
Pentru verificarea funcționării, am folosit mesaje în Serial Monitor, ceea ce a permis urmărirea UID-urilor citite, a stării sistemului și a numărului de încercări greșite.
În urma realizării proiectului, am obținut un sistem funcțional de control acces bazat pe RFID. Sistemul poate identifica un card autorizat, poate deschide ușa prin intermediul unui servo motor și poate afișa mesaje relevante pe LCD-ul I2C.
Pentru un card autorizat, sistemul:
Pentru un card neautorizat, sistemul:
După 3 încercări greșite, sistemul intră într-o stare de blocare timp de 30 de secunde, timp în care LED-ul roșu și buzzer-ul semnalizează faptul că sistemul este blocat.
De asemenea, a fost implementată cu succes funcția de acces manual prin buton și funcția de detecție de vizitator folosind senzorul de sunet.
Pentru validarea proiectului au fost urmărite următoarele criterii:
| Funcționalitate testată | Rezultat |
|---|---|
| Detectare cartelă RFID | Funcțional |
| Detectare tag RFID | Funcțional |
| Comparare UID autorizat / neautorizat | Funcțional |
| Deschidere cu servo motor SG90 | Funcțional |
| Semnalizare cu LED roșu și LED verde | Funcțional |
| Feedback sonor cu buzzer pasiv | Funcțional |
| Afișare mesaje pe LCD I2C | Funcțional |
| Deschidere cu buton acces manual | Funcțional |
| Detecție vizitator cu senzor de sunet | Funcțional |
| Blocare după 3 încercări greșite | Funcțional |
Proiectul Sistem de control acces cu RFID, LCD I2C și detecție de vizitator demonstrează integrarea mai multor componente hardware într-un sistem embedded funcțional. Prin folosirea unui Arduino Uno, a unui modul RFID RC522, a unui LCD I2C, a unui servo motor, a unor LED-uri, a unui buzzer pasiv, a unui buton și a unui senzor de sunet, am realizat un prototip complet de sistem de acces.
Cea mai importantă parte a proiectului a fost integrarea comunicațiilor SPI și I2C împreună cu periferice digitale și control PWM. Proiectul m-a ajutat să înțeleg mai bine modul în care componentele hardware comunică între ele și cum poate fi organizat codul pentru un sistem cu mai multe funcționalități.
Sistemul poate fi îmbunătățit în viitor prin:
Fișierele proiectului vor fi încărcate în repository-ul GitHub și pe pagina de wiki.
Repository GitHub:
Arhiva proiectului:
Fișiere incluse în arhivă:
Pe parcursul realizării proiectului am început cu testarea modulului RFID RC522, împreună cu cartela RFID și tag-ul RFID. În această etapă am verificat detectarea cardurilor și citirea UID-ului, pentru a putea diferenția un card autorizat de unul neautorizat.
După funcționarea corectă a părții de RFID, am integrat servo motorul SG90, care simulează mecanismul de deschidere și închidere al ușii. Am testat pozițiile pentru ușă închisă și ușă deschisă, folosind rotația servo motorului.
Următoarea etapă a fost adăugarea LED-urilor și a buzzer-ului pasiv, pentru a oferi feedback vizual și sonor. LED-ul verde semnalizează accesul permis, LED-ul roșu indică accesul respins sau sistemul blocat, iar buzzer-ul pasiv redă sunete diferite pentru succes, eroare și avertizare.
După partea de semnalizare, am conectat și integrat LCD-ul 16×2 cu interfață I2C, astfel încât sistemul să afișeze mesaje clare pentru utilizator, precum starea de așteptare, card detectat, acces permis, acces respins sau sistem blocat.
În ultima etapă am adăugat senzorul de sunet, folosit pentru detecția vizitatorului. Acesta permite detectarea unui zgomot sau a unei bătăi, iar sistemul răspunde prin afișarea unui mesaj pe LCD și activarea buzzer-ului, simulând o funcție simplă de sonerie/interfon.
La final, am integrat toate modulele într-un singur program, am testat funcționarea completă a sistemului și am verificat scenariile principale: acces permis, acces respins, blocare după 3 încercări greșite, acces manual și detecție vizitator.
Resursele folosite pentru realizarea proiectului sunt menționate în secțiunile Hardware Design și Software Design, împărțite în Resurse Hardware și Resurse Software.