SmartDoor este un sistem de control al accesului bazat pe carduri RFID. La scanarea unui card, Arduino Nano interoghează un server prin WiFi pentru a verifica dacă accesul este permis, afișează rezultatul pe un ecran LCD și trimite un log cu fiecare tentativă către server.
Utilitatea proiectului constă în:
Sistemul este compus din cinci blocuri principale:
Schema bloc vizuală este prezentată mai jos.
Listă de piese:
| 1 | Arduino Nano | 1 | Microcontroler principal, 5V logic |
| 2 | Breadboard + modul alimentare MB102 | 1 | Sursă 5V/3.3V din USB sau jack |
| 3 | Modul WiFi ESP8266 ESP-01 | 1 | UART la 3.3V |
| 4 | Adaptor 5V→3.3V pentru ESP8266 (4-pin) | 1 | Conversie nivel UART + alimentare 3.3V |
| 5 | Kit cititor RFID RC522 | 1 | SPI la 3.3V |
| 6 | Level shifter 8 canale bidirecțional (5V↔3.3V) | 1 | Conversie logică SPI Arduino↔RC522 |
| 7 | LCD 1602 cu modul I2C (PCF8574) | 1 | Afișaj feedback acces, 5V, I2C |
| 8 | Cabluri jumper | ~25 | M-M și M-F |
| Pin | Utilizare | Descriere |
| VIN | Alimentare intrare | Primește tensiunea de 9V de la baterie pentru a alimenta întregul sistem prin regulatorul intern al Nano. |
| 5V | Alimentare ieșire | Furnizează 5V către side-ul B al level shifter-ului, LCD și linia de alimentare a breadboard-ului. |
| 3.3V | Alimentare ieșire | Furnizează 3.3V direct către VCC al RC522 și VCC al ESP8266 prin adaptorul de tensiune. |
| GND | Masă comună | Conectează masa comună pentru toate modulele din circuit. |
| D2 / RX | UART recepție | Primește datele seriale de la modulul ESP8266 (răspunsul serverului: permis/refuzat). |
| D3 / TX | UART transmisie | Trimite UID-ul cardului RFID citit către modulul ESP8266 pentru verificare pe server. |
| D9 | RST RC522 | Controlează pinul de reset al modulului RC522 pentru inițializarea și repornirea cititorului RFID. |
| D10 | SS / SDA RC522 | Pinul de Slave Select SPI, activează comunicația cu RC522 când este tras la LOW. |
| D11 / MOSI | SPI date ieșire | Transmite datele de comandă de la Arduino către RC522 prin protocolul SPI. |
| D12 / MISO | SPI date intrare | Primește datele citite de RC522 (UID card) înapoi la Arduino prin protocolul SPI. |
| D13 / SCK | SPI clock | Generează semnalul de clock pentru sincronizarea comunicației SPI cu RC522. |
| A4 / SDA | I2C date LCD | Linia de date I2C pentru trimiterea caracterelor și comenzilor către LCD 1602. |
| A5 / SCL | I2C clock LCD | Generează semnalul de clock I2C pentru sincronizarea comunicației cu LCD 1602. |
| Pin | Utilizare | Descriere |
| VCC | Alimentare 3.3V | Primește 3.3V de la pinul 3.3V al Arduino prin side-ul A al level shifter-ului. |
| GND | Masă | Conectat la masa comună a circuitului. |
| SDA (SS) | Chip Select SPI | Activează modulul RC522 pentru comunicație atunci când Arduino îl selectează. |
| SCK | Clock SPI | Primește semnalul de clock SPI de la Arduino prin level shifter. |
| MOSI | Date intrare SPI | Primește comenzi și date de la Arduino prin level shifter. |
| MISO | Date ieșire SPI | Trimite UID-ul cardului citit înapoi către Arduino prin level shifter. |
| RST | Reset | Permite Arduino să reseteze și să reinițializeze modulul RC522 când e necesar. |
| Pin | Utilizare | Descriere |
| VCCA | Alimentare 3.3V (side A) | Referința de tensiune pentru side-ul de 3.3V, conectat la pinul 3.3V al Arduino. |
| VCCB | Alimentare 5V (side B) | Referința de tensiune pentru side-ul de 5V, conectat la pinul 5V al Arduino. |
| GND | Masă | Masă comună pentru ambele side-uri ale convertoarelor de nivel logic. |
| A0-A4 | Side 3.3V → RC522 | Pinii de 3.3V conectați direct la RC522 (SCK, MOSI, MISO, SS, RST). |
| B0-B4 | Side 5V → Arduino | Pinii de 5V conectați la Arduino (D13, D11, D12, D10, D9), realizând conversia bidirecțională. |
| Pin | Utilizare | Descriere |
| VCC | Alimentare 3.3V | Primește 3.3V prin adaptorul de tensiune dedicat ESP8266. |
| GND | Masă | Conectat la masa comună a circuitului. |
| TX | UART transmisie | Trimite răspunsul serverului (permis/refuzat) către pinul RX al Arduino. |
| RX | UART recepție | Primește UID-ul cardului de la Arduino pentru a-l trimite serverului prin WiFi. |
| Pin | Utilizare | Descriere |
| VCC | Alimentare 5V | Primește 5V de pe linia de alimentare a breadboard-ului pentru a alimenta ecranul. |
| GND | Masă | Conectat la masa comună a circuitului. |
| SDA | I2C date | Primește datele de la Arduino (A4) pentru a afișa mesajele “Access Granted” / “Access Denied”. |
| SCL | I2C clock | Primește semnalul de clock I2C de la Arduino (A5) pentru sincronizarea comunicației. |
Codul combina librării Arduino (MFRC522, SoftwareSerial) cu cod bare-metal AVR scris de mână pentru TWI și LCD.
twi.c / twi.h — driver I2C bare-metal lcd.c / lcd.h — driver LCD 1602 peste PCF8574, mod 4-bitmain.cpp — logica principală: RFID, WiFi, heartbeat, afisareAm implementat comunicația I2C direct pe registrele ATmega328P.
Fiecare tranzacție urmează secvența clasică I2C:
twi_start() — generează condiția START, așteaptă TWINTtwi_write() — încarcă byte-ul în TWDR, pornește transmisia, așteaptă TWINTtwi_stop() — generează condiția STOP, așteaptă ca TWSTO să se reseteze singurLCD-ul comunică prin PCF8574, un expander I2C de 8 biți. Asta înseamnă că un singur byte trimis prin I2C controlează simultan RS, EN, backlight și pinii D4-D7 ai HD44780.
Display-ul lucrează în modul 4-bit, deci fiecare comandă sau caracter se trimite în două etape — nibble-ul de sus primul, apoi cel de jos. Pentru fiecare nibble se pulsează pinul EN ca HD44780 sa captureze datele.
Heartbeat
Am folosit Timer1 în mod CTC cu prescaler 1024 și OCR1A = 15624, ceea ce generează o întrerupere la fiecare secundă. O data la 90 de secunde resetam flagul triggerHeartbeat.
La fiecare 90 de secunde, Arduino verifică dacă serverul este în viață printr-un GET /alive. Dacă serverul răspunde cu 200 OK e bine. Dacă WiFi-ul a căzut între timp, încearcă reconectarea înainte să trimită heartbeat-ul.
Citirea cardului RFID
Librăria MFRC522 comunică cu cititorul RC522 prin SPI. PICC_IsNewCardPresent()
și PICC_ReadCardSerial() sunt apelate continuu în loop. Când un card e detectat,
UID-ul (de obicei 4 bytes) e formatat ca string hex (ex. A3 4F 12 BC) pentru
afișare pe LCD și concatenat fără spații pentru cererea HTTP.
Comunicația cu serverul
ESP8266 ESP-01 e controlat prin comenzi AT pe un SoftwareSerial pe pinii D2/D3. Fluxul pentru o verificare de card este:
AT+CIPSTART — deschide conexiune TCP pe portul 80 al serveruluiAT+CIPSEND — anunță câți bytes urmeazăAT+CIPCLOSE — închide conexiuneaRăspunsul e afișat pe LCD: “WELCOME!” sau “DENIED ENTRY!” timp de 2 secunde, după care ecranul revine la “Ready to scan!”.
MFRC522 — comunicație SPI cu cititorul RFIDSoftwareSerial — UART software pentru ESP8266 pe D2/D3SPI (Arduino built-in) — bus SPI hardware pentru RC522avr/interrupt.h — macro-uri ISR și sei()/cli() pentru Timer1util/delay.h — delay-uri precise în µs/ms pentru protocolul LCD