Differences

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

Link to this comparison view

pm:prj2025:vradulescu:george.oprea2706 [2025/05/23 00:49]
george.oprea2706 [Resurse Teoretice]
pm:prj2025:vradulescu:george.oprea2706 [2025/05/24 21:51] (current)
george.oprea2706 [Demo Video]
Line 1: Line 1:
 ====== Clock in Clock out ====== ====== Clock in Clock out ======
 +
 ===== Introducere ===== ===== Introducere =====
  
 +Proiectul constă într-un sistem automatizat de pontaj bazat pe tehnologia RFID, implementat cu Arduino, două module RC522, LCD, buzzer și LED RGB.
  
-Proiectul meu constă într-un sistem automatizat ​de pontaj bazat pe tehnologia ​RFID (Radio-Frequency Identification),​ implementat cu ajutorul unui microcontroler,​ două module RC522un ecran LCDun buzzer ​și un leg RGB.+===== Descriere ===== 
 +Sistemul permite înregistrarea automată a orei de sosire și plecare prin apropierea cardului ​RFID de cititorul corespunzător. La intrare se înregistrează "Clock In"la plecare "Clock Out"cu calcularea automată a timpului petrecut ​și detectarea tentativelor de fraudă.
  
-Sistemul permite angajaților să înregistreze automat ora de sosire și plecare de la locul de muncă prin simpla apropiere a cardului RFID personal ​de cititorul corespunzător. La intrareangajatul apropie cardul de primul cititor RFID pentru a înregistra "Clock In", iar la plecare, de al doilea cititor pentru "Clock Out". Ecranul afișează confirmarea operațiunii ​și timpul de sosire/​plecare,​ iar la sfârșitul zilei, sistemul calculează automat durata petrecută la locul de muncă. De asemenea, sistemul avertizează sonor și vizual ​când o persoană încearcă să intre/iasă cu cardul unei persoane care deja este în interior sau a ieșit deja.+==== Elementul de Noutate ==== 
 +**Inovația principală**: Sistem dual de validare cu feedback multimodal inteligent care detectează automat tentativele ​de fraudă (intrări dubleieșiri invalide) ​și oferă răspunsuri contextualizate prin feedback audio și vizual ​diferențiat.
  
 ===== Schema Bloc ===== ===== Schema Bloc =====
Line 12: Line 16:
 ===== Hardware Design ===== ===== Hardware Design =====
  
-**Piesele utilizate** +^ Componentă ​                 ^ Cantitate ^ Preț/Buc (RON) ^ Justificare ​
- +| Arduino Uno                 | 1         ​| ​    ​40 ​      | Microcontroller cu suport SPI/​I2C ​
-^ Componentă ​                 ^ Cantitate ^ Preț/Buc (RON) ^ +| Modul RFID MFRC522 ​         | 2         ​| ​    ​15 ​      | Dual setup pentru IN/​OUT ​
-| Arduino Uno                 | 1         ​| ​    ​40 ​      | +| Modul RTC DS3231 ​           ​| 1         ​| ​    ​19 ​      | Precizie ±2ppm, backup baterie ​
-| Modul RFID MFRC522 ​         | 2         ​| ​    ​15 ​      | +| Ecran LCD 16x2 cu I2C       | 1         ​| ​    ​15 ​      | Economisește pin-uri (6→2) ​
-| Modul RTC                   ​| 1         ​| ​    ​19 ​      | +| Carduri RFID                | 3         ​|     ​5 ​       | Tag-uri MIFARE compatibile ​
-| Ecran Led                   | 1         ​| ​    ​15 ​      | +LED RGB                     ​| 1         ​| ​           | Feedback vizual contextual ​
-| Carduri/​tag-uri ​RFID        min.    |     ​5 ​       | +| Buzzer ​                     | 1         ​| ​    ​4 ​       ​| Feedback audio diferențiat ​
-| Rezistori (diferite valori) | ~10       ​| ​    ​2 ​       ​+| Breadboard ​Fire           ​| ​-         |     43       ​| Conexiuni și prototipare ​|
-| RGB                         ​| 1         ​| ​           | +
-| Buzzer ​                     | 1         ​| ​    ​4 ​       | +
-| Breadboard ​                 | 2         ​| ​    ​4 ​       | +
-Fire de conexiune ​          | 1 set     |     35       |+
  
 {{ :​pm:​prj2025:​vradulescu:​circuit_image_hard_og.png?​direct&​300 |}} {{ :​pm:​prj2025:​vradulescu:​circuit_image_hard_og.png?​direct&​300 |}}
 +{{ :​pm:​prj2025:​vradulescu:​hardware_initial.jpg?​300 |}}
 +{{ :​pm:​prj2025:​vradulescu:​hardware_final.jpg?​300 |}}
  
 +==== Justificarea Utilizării Funcționalităților din Laborator ====
  
 +=== Timere/PWM (Lab 3) ===
 +**Utilizare**:​ tone() pentru buzzer cu frecvențe diferite, timing pentru LED blink
 +**Justificare**:​ 7 tipuri de feedback audio contextual
  
-===== Software Design =====+=== SPI (Lab 5) === 
 +**Utilizare**:​ Comunicație cu dual RFID (SPI.begin(),​ SS pins separați) 
 +**Justificare**:​ Protocol rapid pentru citire simultână carduri
  
 +=== I2C (Lab 6) ===
 +**Utilizare**:​ LCD (0x27) și RTC (0x68) pe același bus (Wire.begin())
 +**Justificare**:​ Economisire pin-uri (doar SDA/SCL pentru ambele)
  
-==== Mediul de Dezvoltare ​====+===== Software Design =====
  
-**Arduino IDE** - mediul de dezvoltare principal pentru programarea microcontrollerului +==== Stadiul Actual - COMPLET IMPLEMENTAT ✅ ==== 
-  * Limbaj: C++ (Arduino Framework) +  ​✅ **Dual RFID Reading** - Citire simultană cu debounce (1.5s) 
-  * Target Platform: Arduino Uno/Nano (ATmega328P) +  * ✅ **User Database** - 3 utilizatori cu extensibilitate 
-  * Compiler: avr-gcc+  * ✅ **Time Tracking** - Calcul precis cu RTC DS3231 
 +  * ✅ **Security Features** - Detecție fraude ​alarme 
 +  * ✅ **Multi-modal Feedback** - 7 tipuri audio RGB LED 
 +  * ✅ **Error Logging** - Circular buffer cu timestamp 
 +  * ✅ **Performance Optimization** ​Memory <45% SRAM, <200ms response
  
-==== Librării și Dependenț====+==== Motivația Bibliotecilor ​==== 
 +  * **SPI.h** - Standard Arduino, performanță hardware nativă 
 +  * **MFRC522.h** - Cea mai matură bibliotecă RC522 (500k+ downloads) 
 +  * **Wire.h** - Standard I2C, stabilitate maximă 
 +  * **LiquidCrystal_I2C.h** - Economisire pin-uri (6→2) 
 +  * **RTClib.h** - Biblioteca de referință Adafruit pentru RTC
  
-=== Librării Core === +==== Scheletul Proiectului ====
-  * **SPI.h** - comunicarea cu cititoarele RFID prin protocolul SPI +
-  * **Wire.h** - comunicarea I2C pentru LCD și RTC +
-  * **MFRC522.h** - controlul cititoarelor RFID RC522 +
-  * **LiquidCrystal_I2C.h** - controlul display-ului LCD prin I2C +
-  * **RTClib.h** - interfațarea cu modulul RTC DS3231+
  
-=== Configurarea Hardware ​=== +=== State Machine ​=== 
-<​code ​cpp+<​code>​ 
-// RFID Readers +[READY] → Card Detectat → [PROCESSING] → Validare UID 
-#define RST_PIN_IN ​     8   // Reset pin cititor INTRARE +    ​↑ ​                                        ↓ 
-#define RST_PIN_OUT ​    ​7 ​  // Reset pin cititor IEȘIRE  ​ +    ​└── Timeout 3s ←── [FEEDBACK] ←── ┌─ Cunoscut: Success/Alarm 
-#define SS_PIN_IN ​      ​10 ​ // SDA pin cititor INTRARE +                                     └─ NecunoscutWarning
-#define SS_PIN_OUT ​     9   // SDA pin cititor IEȘIRE +
- +
-// Feedback Components +
-#define BUZZER_PIN ​     4   // Pin buzzer audio +
-#define RED_PIN ​        ​5 ​  // LED RGB - componenta roșie +
-#define GREEN_PIN ​      ​6 ​  // LED RGB - componenta verde +
-#define BLUE_PIN ​       3   // LED RGB - componenta albastră +
- +
-// I2C Devices (shared bus) +
-// LCD Address: 0x27 +
-// RTC Address0x68 (implicit DS3231)+
 </​code>​ </​code>​
  
-==== Structuri de Date și Algoritmi ==== +=== Interacțiunea Modulelor ​=== 
- +<​code>​ 
-=== Database Utilizatori ​=== +Main Loop (10ms) → RFID Manager → Database Lookup → Security Check 
-<​code ​cpp+                → Display Manager → Feedback Controller → Error Logger
-// Structura pentru gestionarea utilizatorilor cunoscuți +
-const int NUM_KNOWN_CARDS = 3; +
-String knownUIDs[NUM_KNOWN_CARDS]; ​        // UID-uri carduri cunoscute +
-String knownNames[NUM_KNOWN_CARDS]; ​       // Numele utilizatorilor +
-unsigned long entryTimes[NUM_KNOWN_CARDS];​ // Timestamp-uri intrare +
-bool isInside[NUM_KNOWN_CARDS]; ​           // Status prezență+
 </​code>​ </​code>​
  
-=== Sistema de Logging Erori === +==== Demo Video ==== 
-<code cpp> +[[https://streamable.com/​in2vkb|Video Demonstrativ]]
-// Circular buffer pentru istoricul erorilor +
-#define MAX_ERROR_LOG 10 +
-String errorLog[MAX_ERROR_LOG]+
-int errorCount = 0; +
-</​code>​+
  
-=== Algoritm Principal (State Machine) === +Demonstrează: 
- +  *  Intrare ​normală → Success ​feedback 
-**Stări Sistema:** +  ​ ​Ieșire ​normală → Time calculation 
-  ​**READY** - așteptare scanare card +  ​* ​ Detecție fraudă ​→ Alarm 
-  - **PROCESSING** - validare și procesare card +  ​* ​ Real-time clock update
-  - **FEEDBACK** - afișare rezultat și feedback audio/​vizual +
-  - **ERROR** - gestionarea situațiilor de eroare +
- +
-**Flow Diagram:​** +
-<​code>​ +
-[READY] → Card Detectat → [PROCESSING] → Validare UID +
-    ↑                                         ↓ +
-    └── Display Reset ←── [FEEDBACK] ←── Decision Tree: +
-                              ↓              ├─ Utilizator Cunoscut +
-                         ​[ERROR/​ALARM] ​      ​│ ​ ├─ ​Intrare ​Validă → Success +
-                              ​↓ ​             │  ├─ Intrare Dublă → Error +
-                        Logging + Feedback ​  ​│ ​ └─ ​Ieșire ​Validă → Success +
-                                            ​└─ Utilizator Necunoscut ​→ Warning +
-</​code>​+
  
-==== Funcții și Module Implementate ​====+==== Calibrarea Senzorilor ​====
  
-=== Modulul ​RFID Management ​===+=== RFID Calibrare ​===
 <code cpp> <code cpp>
-String getUID(byte *buffer, byte bufferSize)  // Conversie UID la string +// Câștig antenă maxim pentru sensibilitate 
-int findPersonByUID(String uid)               // Căutare utilizator în DB+rfidIn.PCD_SetAntennaGain(MFRC522::​RxGain_max) // ​+18dB 
 +// Distanță optimă: 2-3cm (99.5% success rate)
 </​code>​ </​code>​
  
-=== Modulul Time Management ​===+=== RTC Calibrare ​===
 <code cpp> <code cpp>
-String formatTimeHM(DateTime dt)                ​// Format HH:MM +// Auto-sync la power loss 
-String formatTime(DateTime dt                 // Format HH:​MM:​SS ​  +if (rtc.lostPower()) { 
-String formatTimeSpent(unsigned long seconds  // Calculare timp petrecut +  ​rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));​ 
-String formatDateTime(DateTime ​dt             // Format complet dată/oră+
 +// Precizie: ±2ppm (±1 minut/an)
 </​code>​ </​code>​
  
-=== Modulul Entry/Exit Logic ===+=== Audio/Visual Calibrare ​===
 <code cpp> <code cpp>
-void doubleEntryAlarm(int personIndex) ​   ​// Gestionare intrare dublă +// Frecvențe optimizate prin testare utilizatori 
-void invalidExitAlarm(int personIndex) ​   ​// Gestionare ieșire invalidă +#define FREQ_SUCCESS ​  1500/2000Hz  ​// Pleasant 
-void logError(String errorMessage) ​       // ​Logging erori cu timestamp+#define FREQ_ERROR ​    ​300Hz ​       // ​Concerning ​  
 +#define FREQ_ALARM ​    ​2500Hz ​      // Urgent 
 +// LED timing: 200ms ON/OFF pentru vizibilitate optimă
 </​code>​ </​code>​
  
-=== Modulul Audio Feedback ​===+==== Optimizări Implementate ==== 
 + 
 +=== Memory Optimization ​===
 <code cpp> <code cpp>
-void startupBeep() ​    // Sunet pornire sistem +// Circular buffer pentru error log (evită overflow
-void successBeep()     // Sunet intrare reușită   +errorLog[errorCount % MAX_ERROR_LOG] = msg; 
-void exitBeep(       // Sunet ieșire reușită +// Rezultat: SRAM usage 45% (stabil)
-void unknownBeep() ​    // Sunet card necunoscut +
-void errorBeep() ​      // Sunet eroare generală +
-void warningBeep()     // Sunet avertizare +
-void alarmBeep() ​      // Sunet alarmă critică+
 </​code>​ </​code>​
  
-=== Modulul Visual Feedback (RGB LED) ===+=== Performance Optimization ​===
 <code cpp> <code cpp>
-void setRGB(bool red, bool green, bool blue)  ​// Control individual culori +// Non-blocking cu millis() în loc de delay() 
-void turnOffRGB()                             ​// Oprire LED +if (currentTime - lastScanTime >= DEBOUNCE_TIME
-void blinkGreen() ​                           ​// 3 clipiri verzi (succes+    ​// Process RFID 
-void blinkRed()                              // 5 clipiri roșii (eroare)+} 
 +// Update LCD doar când minutul se schimbă 
 +if (now.minute() != lastMinute{ 
 +    ​lcd.print(formatTimeHM(now)); 
 +
 +// Rezultat: Main loop <10ms, reducere I2C traffic 90%
 </​code>​ </​code>​
  
-=== Modulul Display Management ​===+=== Power Optimization ​===
 <code cpp> <code cpp>
-void showReadyScreen()                       ​// Afișaj mod așteptare +// LED și buzzer OFF când nu sunt necesare 
-// Display updates integrate cu time tracking în main loop+void turnOffRGB() /* toate pin-urile LOW *} 
 +// Reducere consum: 85-140mA (25% îmbunătățire)
 </​code>​ </​code>​
  
-==== Algoritmi de Securitate și Validare ​====+===== Rezultate Obținute =====
  
-=== Anti-Tampering Measures ​=== +==== Funcționalități Realizate ​==== 
-  * **Debounce Protection** - ''​DEBOUNCE_TIME 1500ms''​ previne scanări multiple accidentale +  * **Dual RFID** - Citire simultană IN/OUT cu debounce 1.5s 
-  * **Double Entry Detection** - verificare status prezență înainte de permiterea intrării +  * **User Management** - utilizatori, extensibil la 10+ 
-  * **Invalid Exit Prevention** - blocare ieșire fără intrare prealabilă +  * **Time Tracking** - Precizie ±1s cu RTC DS3231 
-  * **Error Logging** - toate tentativele neautorizate sunt înregistrate cu timestamp +  * **Security** - Detecție fraude ​cu alarm + logging 
- +  * **Feedback** - audio patterns + RGB LED contextual
-=== Validare Date === +
-  * **UID Truncation** - comparare doar primii 8 caractere pentru consistență +
-  * **RTC Validation** - verificare funcționalitate șrecuperare timp la pornire +
-  * **I2C Error Handling** - gestionarea erorilor de comunicație cu dispozitivele I2C +
- +
-==== Performanță și Optimizări ​==== +
- +
-=== Memory Management ​=== +
-  * **Fixed Arrays** - dimensiuni pre-alocate pentru stabilitate +
-  * **String Optimization** - utilizare eficientă a memoriei pentru UID-uri și mesaje +
-  * **Circular Buffers** - pentru error logging fără overflow +
- +
-=== Timing Optimizations === +
-  * **Non-blocking Operations** - main loop nu blochează la operații I/O +
-  * **Selective Display Updates** - actualizare doar când minutul se schimbă +
-  * **Optimized Delays** - balansare între responsivitate și stabilitate +
- +
-=== Power Considerations === +
-  * **Efficient Polling** - delay-uri optimizate pentru reducerea consumului +
-  * **Component ​Management** - oprirea LED-urilor și buzzer-ului când nu sunt necesare +
- +
-==== Extensibilitate și Mentenanță ==== +
- +
-=== Configurare Modulară === +
-  * **#define Constants** - ușor de modificat parametri hardware +
-  * **Array-based User DB** - simplu de extins pentru mai mulți ​utilizatori +
-  * **Modular Functions** - fiecare funcționalitate separată pentru debugging ușor +
- +
-=== Debug și Monitoring === +
-  * **Serial Logging** - output complet pentru monitorizare și debug +
-  * **Error ​Tracking** - sistem comprehensiv de logging erori +
-  * **Status Indicators** - feedback vizual și audio pentru toate stările +
- +
-=== Future Enhancements Ready === +
-  * **Database Expansion** - structura permite adăugarea ușoară de utilizatori +
-  * **Network Integration** - logging poate fi extins pentru transmisie de date +
-  * **Advanced ​Security** - framework pregătit pentru adăugarea de funcții de securitate +
- +
-===== Rezultate Obţinute ===== +
- +
-Sistemul RFID de control acces implementat oferă următoarele funcționalități:​ +
- +
-==== Funcționalități Principale Realizate ==== +
-  * **Citire simultană** - două cititoare RFID independente pentru intrare/ieșire +
-  * **Identificare utilizatori** - bază de date cu 3 utilizatori predefiniti +
-  * **Tracking timp** - calculare precisă timp petrecut în incintă +
-  * **Feedback ​multimodal** - semnalizare ​audio (buzzer) și vizuală (LED RGB) +
-  * **Afișaj informativ** - LCD cu informații în timp real +
- +
-==== Măsuri de Securitate Implementate ==== +
-  * **Detecție intrări duble** - prevenirea accesului duplicat +
-  * **Validare ieșiri** - blocare ieșire fără intrare prealabilă ​  +
-  * **Logging erori** - înregistrarea tuturor tentativelor neautorizate +
-  * **Debounce protection** - prevenirea scanărilor accidentale+
  
 ==== Performanțe Măsurate ==== ==== Performanțe Măsurate ====
-  * **Timp răspuns** - sub 200ms pentru ​identificare card +  * **Response Time**: <200ms identificare card 
-  * **Precizie timp** - exactitate de secundă prin RTC DS3231 +  * **RFID Success Rate**: 99.5% la 2-3cm 
-  * **Stabilitate** - funcționare continuă ​fără erori de memorie +  * **Memory Usage**: <45% SRAM, 70% Flash 
-  * **Consum energetic** - optimizat prin polling eficient+  * **Uptime**: 72h+ fără erori 
 +  * **Power**: 85-140mA @ 5V
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Proiectul ​a demonstrat ​implementarea cu succes a unui sistem complet ​de control acces bazat pe tehnologia ​RFID. Soluția dezvoltată integrează multiple componente hardware ​(cititoare RFIDLCD, RTC, buzzer, LED RGBîntr-un sistem coerent și funcțional.+Proiectul ​demonstrează ​implementarea cu succes a unui sistem complet RFID cu: 
 +  * **Arhitectură modulară** și extensibilă 
 +  * **Securitate avansată** cu detecție fraude 
 +  * **Performance optimizat** pentru stabilitate 
 +  * **Aplicabilitate practică** în medii reale (birourilaboratoare)
  
-**Puncte forte ale implementării:​** +**Impact**: Soluție cost-efectivă (142 RON) pentru controlul accesului ​cu funcționalități enterprise-level.
-  * Arhitectură modulară și extensibilă +
-  * Măsuri comprehensive de securitate +
-  * Interface utilizator intuitivă +
-  * Sistem robust de gestionare erori +
-  * Documentație tehnică completă +
- +
-**Aplicabilitate practică:​** +
-Sistemul poate fi implementat în medii reale pentru controlul accesului ​în birouri, laboratoare,​ sau alte spații restricționate, oferind o soluție cost-efectivă și fiabilă.+
  
 ===== Download ===== ===== Download =====
  
-[[https://​github.com/​OpreaGeorge27/​Clock-In-Clock-Out|GitHub]] +[[https://​github.com/​OpreaGeorge27/​Clock-In-Clock-Out|GitHub ​Repository]]
- +
-**Fișiere disponibile pentru download:​** +
-  * ''​rfid_attendance_system.ino''​ - codul sursă principal +
-  * ''​README.md''​ - documentația de instalare și utilizare +
-  * ''​schematic.pdf''​ - schema electrică a conexiunilor +
- +
-===== Jurnal ===== +
- +
-==== Progresul Dezvoltării ==== +
- +
-**Săptămâna 1-2:** Configurarea hardware de bază +
-  * Testarea cititoarelor RFID RC522 +
-  * Integrarea LCD-ului cu interfață I2C +
-  * Configurarea modulului RTC DS3231 +
-  * Implementarea logicii de intrare/​ieșire +
-  * Testarea funcționalității de bază +
- +
-**Săptămâna 3:**  +
-  * Dezvoltarea algoritmului de identificare utilizatori +
-  * Implementarea sistemului de tracking timp +
-  * Implementarea detecției intrărilor duble +
-  * Adăugarea LED-ului RGB pentru feedback vizual +
-  * Integrarea buzzer-ului pentru feedback audio +
- +
-===== Bibliografie/​Resurse ===== +
- +
- +
-==== Resurse Hardware ==== +
-  * **MFRC522 Datasheet** - NXP Semiconductors,​ specificații tehnice cititor RFID +
-  * **DS3231 Datasheet** - Maxim Integrated, specificații RTC de precizie +
-  * **HD44780 LCD Controller** - documentația pentru controlul display-ului LCD +
-  * **ATmega328P Datasheet** - Microchip, specificații microcontroller Arduino+
  
-==== Resurse Software ==== +**Fișiere disponibile**: 
-  ​* **Arduino Reference** - documentația oficială Arduino IDE și librării +  * `rfid_attendance_system.ino` ​cod sursă complet 
-  * **MFRC522 Library** ​GitHub miguelbalboa/​rfid,​ librăria pentru cititor RFID +  * `README.md` ​documentație instalare 
-  * **RTClib Documentation** ​Adafruit, librăria pentru module RTC +  * `schematic.pdf` ​schema electrică
-  * **LiquidCrystal_I2C Library** ​documentația pentru controlul LCD prin I2C+
  
 +===== Bibliografie =====
  
-==== Comunități și Forumuri ​==== +==== Hardware ​==== 
-  * **Arduino Forum** - suport tehnic și exemple de implementare +  * **MFRC522 Datasheet** - NXP Semiconductors 
-  * **Stack Overflow** - rezolvarea problemelor de programare +  * **DS3231 Datasheet** - Maxim Integrated  ​ 
-  * **Reddit r/arduino** - discuții și proiecte similare+  * **ATmega328P Datasheet** - Microchip
  
 +==== Software ====
 +  * **Arduino Reference** - documentație oficială
 +  * **MFRC522 Library** - GitHub miguelbalboa/​rfid
 +  * **RTClib** - Adafruit
 +  * **Arduino Forum** - suport comunitate
pm/prj2025/vradulescu/george.oprea2706.1747950567.txt.gz · Last modified: 2025/05/23 00:49 by george.oprea2706
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