Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:alexandru.jipa2803:dacian.pascu [2026/05/16 14:29]
dacian.pascu
pm:prj2026:alexandru.jipa2803:dacian.pascu [2026/05/22 20:40] (current)
dacian.pascu
Line 3: Line 3:
  
 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. 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.
- 
-Ideea a pornit de la nevoia unui sistem simplu și ieftin de a înlocui cheile fizice cu carduri de proximitate,​ oferind totodată un jurnal de acces persistent pe server. 
  
 Utilitatea proiectului constă în: Utilitatea proiectului constă în:
Line 14: Line 12:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Sistemul este compus din cinci blocuri principale ​care interacționează în lanț:+Sistemul este compus din cinci blocuri principale:
  
   *Bloc de citire — Modulul RC522 citește UID-ul cardului RFID prezentat și îl trimite către Arduino Nano prin interfața SPI (prin intermediul level shifter-ului bidirecțional,​ deoarece RC522 lucrează la 3.3V iar Arduino la 5V).   *Bloc de citire — Modulul RC522 citește UID-ul cardului RFID prezentat și îl trimite către Arduino Nano prin interfața SPI (prin intermediul level shifter-ului bidirecțional,​ deoarece RC522 lucrează la 3.3V iar Arduino la 5V).
Line 20: Line 18:
   *Bloc de control — Arduino Nano primește UID-ul, îl formatează și îl transmite modulului ESP8266 prin comunicație serială UART (prin intermediul unui adaptor de tensiune 5V→3.3V).   *Bloc de control — Arduino Nano primește UID-ul, îl formatează și îl transmite modulului ESP8266 prin comunicație serială UART (prin intermediul unui adaptor de tensiune 5V→3.3V).
  
-  *Bloc de comunicație WiFi — ESP8266 ESP-01 se conectează la rețeaua WiFi și trimite o cerere HTTP(S) către serverul de backend cu UID-ul cardului. Primește răspunsul (permis/​refuzat) și îl transmite înapoi la Arduino.+  *Bloc de comunicație WiFi — ESP8266 ESP-01 se conectează la rețeaua WiFi și trimite o cerere HTTP către serverul de backend cu UID-ul cardului. Primește răspunsul (permis/​refuzat) și îl transmite înapoi la Arduino.
  
-  *Bloc de afișare — LCD 1602 cu modul I2C afișează mesajul corespunzător răspunsului primit: "​Access Granted"​ sau "​Access Denied"​. Comunicația I2C (SDA/SCL) funcționează direct la 5V, fără conversie de nivel.+  *Bloc de afișare — LCD 1602 cu modul I2C afișează mesajul corespunzător răspunsului primit: "​Access Granted"​ sau "​Access Denied"​. ​
  
   *Bloc de alimentare — Modulul MB102 montat pe breadboard furnizează 5V pentru Arduino și LCD, respectiv 3.3V (prin adaptoare) pentru modulele ESP și RFID.   *Bloc de alimentare — Modulul MB102 montat pe breadboard furnizează 5V pentru Arduino și LCD, respectiv 3.3V (prin adaptoare) pentru modulele ESP și RFID.
Line 35: Line 33:
  
 | 1 | Arduino Nano | 1 | Microcontroler principal, 5V logic | | 1 | Arduino Nano | 1 | Microcontroler principal, 5V logic |
-| 2 | Breadboard + modul alimentare MB102 | 1 set | Sursă 5V/3.3V din USB sau jack |+| 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 | | 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 | | 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, include card și breloc ​|+| 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 | | 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 | | 7 | LCD 1602 cu modul I2C (PCF8574) | 1 | Afișaj feedback acces, 5V, I2C |
Line 55: Line 53:
 | 3.3V | Alimentare ieșire | Furnizează 3.3V direct către VCC al RC522 și VCC al ESP8266 prin adaptorul de tensiune. | | 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. | | GND | Masă comună | Conectează masa comună pentru toate modulele din circuit. |
-D0 / RX | UART recepție | Primește datele seriale de la modulul ESP8266 (răspunsul serverului: permis/​refuzat). | +D2 / RX | UART recepție | Primește datele seriale de la modulul ESP8266 (răspunsul serverului: permis/​refuzat). | 
-D1 / TX | UART transmisie | Trimite UID-ul cardului RFID citit către modulul ESP8266 pentru verificare pe server. |+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. | | 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. | | D10 | SS / SDA RC522 | Pinul de Slave Select SPI, activează comunicația cu RC522 când este tras la LOW. |
Line 89: Line 87:
 | TX | UART transmisie | Trimite răspunsul serverului (permis/​refuzat) către pinul RX al Arduino. | | 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. | | RX | UART recepție | Primește UID-ul cardului de la Arduino pentru a-l trimite serverului prin WiFi. |
-| CH_PD / EN | Enable | Tras la 3.3V permanent pentru a menține modulul ESP8266 activ și funcțional. | 
-| RST | Reset | Tras la 3.3V pentru funcționare normală, poate fi folosit pentru reset software. | 
-| GPIO0 | Boot mode | Tras la 3.3V pentru boot în mod normal de operare (nu în mod programare). | 
  
 == LCD 1602 I2C == == LCD 1602 I2C ==
Line 104: Line 99:
  
 ===== Software Design ===== ===== Software Design =====
-===== Rezultate Obţinute ​===== + 
-===== Concluzii ​=====+Codul combina librării Arduino 
 +(MFRC522, SoftwareSerial) cu cod bare-metal AVR scris de mână pentru TWI și LCD. 
 + 
 +=== Structura proiectului ​=== 
 + 
 +  * ''​twi.c / twi.h''​ — driver I2C bare-metal  
 +  * ''​lcd.c / lcd.h''​ — driver LCD 1602 peste PCF8574, mod 4-bit 
 +  * ''​main.cpp''​ — logica principală:​ RFID, WiFi, heartbeat, afisare 
 + 
 +=== Driverul TWI (I2C) === 
 + 
 +Am implementat comunicația I2C direct pe registrele ATmega328P. 
 + 
 +Fiecare tranzacție urmează secvența clasică I2C: 
 +  - ''​twi_start()''​ — generează condiția START, așteaptă TWINT 
 +  - ''​twi_write()''​ — încarcă byte-ul în TWDR, pornește transmisia, așteaptă TWINT 
 +  - ''​twi_stop()''​ — generează condiția STOP, așteaptă ca TWSTO să se reseteze singur 
 + 
 +=== Driverul LCD === 
 + 
 +LCD-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. 
 + 
 +=== Logica principală ​=== 
 + 
 +**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 serverului 
 +  - ''​AT+CIPSEND''​ — anunță câți bytes urmează 
 +  - GET /​pm?​uid=<​uid>​ HTTP/1.1 — cererea efectivă 
 +  - parsează răspunsul după câmpul "​verdict":​ 1 = acces permis, 0 = refuzat 
 +  - ''​AT+CIPCLOSE''​ — închide conexiunea 
 + 
 +Răspunsul e afișat pe LCD: "​WELCOME!"​ sau "​DENIED ENTRY!"​ timp de 2 secunde, 
 +după care ecranul revine la "Ready to scan!"​. 
 + 
 +=== Biblioteci folosite === 
 + 
 +  * ''​MFRC522''​ — comunicație SPI cu cititorul RFID 
 +  * ''​SoftwareSerial''​ — UART software pentru ESP8266 pe D2/D3 
 +  * ''​SPI''​ (Arduino built-in) — bus SPI hardware pentru RC522 
 +  * ''​avr/​interrupt.h''​ — macro-uri ISR și sei()/cli() pentru Timer1 
 +  * ''​util/​delay.h''​ — delay-uri precise în µs/ms pentru protocolul LCD 
 ===== Download ===== ===== Download =====
 https://​github.com/​dacianpascu06/​proiect-pm https://​github.com/​dacianpascu06/​proiect-pm
-===== Jurnal ===== 
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +
 +  * **Pentru LCD și controller:​** [[https://​web.stanford.edu/​class/​ee281/​handouts/​hd44780_lcd_controller_datasheet.pdf|Datasheet HD44780]]
 +  * **Pentru Arduino (ATmega328P):​** [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]]
 +  * **Pentru modulul WiFi (ESP8266):​** [[https://​www.espressif.com/​sites/​default/​files/​4a-esp8266_at_instruction_set_en_v1.5.4_0.pdf|ESP8266 AT Instruction Set]]
 +  * **Sursă de inspirație (LCD și controller):​** [[https://​github.com/​Ovidiu22/​LCD-1602/​blob/​main/​LCD-1602/​src/​LCD.c|github repo]]
pm/prj2026/alexandru.jipa2803/dacian.pascu.1778930965.txt.gz · Last modified: 2026/05/16 14:29 by dacian.pascu
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