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:17]
george.oprea2706 [Librării și Dependențe]
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 =====
-{{ :​pm:​prj2025:​vradulescu:​schema_bloc_pm_og.png?​direct ​|}}+{{ :​pm:​prj2025:​vradulescu:​schema_bloc_pm_og.png?​300 |}}
  
 ===== 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
  
-<note tip> +=== I2C (Lab 6=== 
-Descrierea codului aplicaţiei ​(firmware): +**Utilizare**LCD (0x27șRTC (0x68) pe același bus (Wire.begin()) 
-  mediu de dezvoltareArduino IDE (C++) +**Justificare**:​ Economisire pin-uri (doar SDA/SCL pentru ambele)
-  * librării şsurse 3rd-party: MFRC522, ​Wire, LiquidCrystal_I2C,​ RTClib +
-  algoritmi şi structuri implementate pentru sistemul de acces RFID +
-  ​funcţii şi surse implementate pentru tracking-ul prezenţei +
-</note>+
  
-==== 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 === 
-```cpp +<​code>​
-// RFID Readers +
-#define RST_PIN_IN ​     8   // Reset pin cititor INTRARE +
-#define RST_PIN_OUT ​    ​7 ​  // Reset pin cititor IEȘIRE ​  +
-#define SS_PIN_IN ​      ​10 ​ // SDA pin cititor INTRARE +
-#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 Address: 0x68 (implicit DS3231) +
-``` +
- +
-==== Structuri de Date și Algoritmi ==== +
- +
-=== Database Utilizatori === +
-```cpp +
-// 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ță +
-``` +
- +
-=== Sistema de Logging Erori === +
-```cpp +
-// Circular buffer pentru istoricul erorilor +
-#define MAX_ERROR_LOG 10 +
-String errorLog[MAX_ERROR_LOG];​ +
-int errorCount = 0; +
-``` +
- +
-=== Algoritm Principal (State Machine=== +
- +
-**Stări Sistema:​** +
-  - **READY** - așteptare scanare card +
-  - **PROCESSING** - validare și procesare card +
-  - **FEEDBACK** - afișare rezultat și feedback audio/​vizual +
-  - **ERROR** - gestionarea situațiilor de eroare +
- +
-**Flow Diagram:​** +
-```+
 [READY] → Card Detectat → [PROCESSING] → Validare UID [READY] → Card Detectat → [PROCESSING] → Validare UID
     ↑                                         ↓     ↑                                         ↓
-    └── ​Display Reset ←── [FEEDBACK] ←── ​Decision Tree: +    └── ​Timeout 3s ←── [FEEDBACK] ←── ​─ Cunoscut: Success/Alarm 
-                              ↓              ├─ Utilizator ​Cunoscut +                                     ​└─ NecunoscutWarning 
-                         ​[ERROR/ALARM] ​      ​│ ​ ├─ Intrare Validă → Success +</​code>​
-                              ↓              │  ├─ Intrare Dublă → Error +
-                        ​Logging + Feedback ​  ​│  ​└─ ​Ieșire Validă → Success +
-                                            └─ Utilizator ​Necunoscut ​→ Warning +
-```+
  
-==== Funcții și Module Implementate ====+=== Interacțiunea Modulelor ​=== 
 +<​code>​ 
 +Main Loop (10ms) → RFID Manager → Database Lookup → Security Check 
 +                → Display Manager → Feedback Controller → Error Logger 
 +</​code>​
  
-=== Modulul RFID Management ​=== +==== Demo Video ==== 
-```cpp +[[https://streamable.com/in2vkb|Video Demonstrativ]]
-String getUID(byte *buffer, byte bufferSize) ​    // Conversie UID la string +
-int findPersonByUID(String uid)                  ​// Căutare utilizator în DB +
-```+
  
-=== Modulul Time Management === +Demonstrează
-```cpp +  ​*  Intrare normală → Success feedback 
-String formatTimeHM(DateTime dt)                // Format HH:MM +  ​* ​ Ieșire normală → Time calculation 
-String formatTime(DateTime dt)                  // Format HH:​MM:​SS ​  +  ​* ​ Detecție fraudă → Alarm 
-String formatTimeSpent(unsigned long seconds) ​  // Calculare timp petrecut +  ​* ​ Real-time clock update
-String formatDateTime(DateTime dt)              // Format complet dată/oră +
-```+
  
-=== Modulul Entry/Exit Logic === +==== Calibrarea Senzorilor ====
-```cpp +
-void doubleEntryAlarm(int personIndex) ​         // Gestionare intrare dublă +
-void invalidExitAlarm(int personIndex) ​         // Gestionare ieșire invalidă +
-void logError(String errorMessage) ​            // Logging erori cu timestamp +
-```+
  
-=== Modulul Audio Feedback ​=== +=== RFID Calibrare ​=== 
-```cpp +<​code ​cpp> 
-void startupBeep() ​     // Sunet pornire sistem +// știg antenă maxim pentru sensibilitate 
-void successBeep() ​     ​// Sunet intrare reușită   +rfidIn.PCD_SetAntennaGain(MFRC522::​RxGain_max);  ​// +18dB 
-void exitBeep()         ​// Sunet ieșire reușită +// Distanță optimă: 2-3cm (99.5% success rate
-void unknownBeep() ​     ​// Sunet card necunoscut +</code>
-void errorBeep() ​       // Sunet eroare generală +
-void warningBeep()      // Sunet avertizare +
-void alarmBeep() ​       ​// Sunet alarmă critică +
-```+
  
-=== Modulul Visual Feedback (RGB LED) === +=== RTC Calibrare ​=== 
-```cpp +<​code ​cpp> 
-void setRGB(bool red, bool green, bool blue)    ​// Control individual culori +// Auto-sync la power loss 
-void turnOffRGB()                               // Oprire LED +if (rtc.lostPower()) { 
-void blinkGreen()                              // 3 clipiri verzi (succes+  ​rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
-void blinkRed() ​                               ​// 5 clipiri roșii ​(eroare+} 
-```+// Precizie: ±2ppm ​(±1 minut/an
 +</​code>​
  
-=== Modulul Display Management ​=== +=== Audio/​Visual Calibrare ​=== 
-```cpp +<​code ​cpp> 
-void showReadyScreen() ​                        // Afișaj mod așteptare +// Frecvențe optimizate prin testare utilizatori 
-// Display updates integrate cu time tracking în main loop +#define FREQ_SUCCESS ​  1500/2000Hz  ​// Pleasant 
-```+#define FREQ_ERROR ​    ​300Hz ​       // Concerning ​  
 +#define FREQ_ALARM ​    ​2500Hz ​      // Urgent 
 +// LED timing: 200ms ON/OFF pentru vizibilitate optimă 
 +</​code>​
  
-==== Algoritmi de Securitate și Validare ​====+==== Optimizări Implementate ​====
  
-=== Anti-Tampering Measures ​=== +=== Memory Optimization ​=== 
-  * **Debounce Protection** - `DEBOUNCE_TIME 1500ms` previne scanări multiple accidentale +<code cpp> 
-  * **Double Entry Detection** - verificare status prezență înainte de permiterea intrării +// Circular buffer pentru error log (evită overflow) 
-  * **Invalid Exit Prevention** - blocare ieșire fără intrare prealabilă +errorLog[errorCount % MAX_ERROR_LOG] = msg; 
-  * **Error Logging** - toate tentativele neautorizate sunt înregistrate cu timestamp+// Rezultat: SRAM usage 45% (stabil) 
 +</​code>​
  
-=== Validare Date === +=== Performance Optimization ​=== 
-  * **UID Truncation** ​comparare ​doar primii 8 caractere pentru consistență +<code cpp> 
-  * **RTC Validation** - verificare funcționalitate și recuperare timp la pornire +// Non-blocking cu millis() în loc de delay() 
-  * **I2C Error Handling** - gestionarea erorilor de comunicație cu dispozitivele ​I2C+if (currentTime - lastScanTime >= DEBOUNCE_TIME) { 
 +    // Process RFID 
 +
 +// 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>​
  
-==== Performanță ​și Optimizări ====+=== Power Optimization ​=== 
 +<code cpp> 
 +// LED și buzzer OFF când nu sunt necesare 
 +void turnOffRGB() { /* toate pin-urile LOW */ } 
 +// Reducere consum: 85-140mA (25% îmbunătățire) 
 +</​code>​
  
-=== Memory Management ​=== +===== Rezultate Obținute =====
-  * **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 ​=== +==== Funcționalități Realizate ==== 
-  * **Non-blocking Operations** - main loop nu blochează la operații I/O +  * **Dual RFID** - Citire simultană IN/OUT cu debounce 1.5s 
-  * **Selective Display Updates** - actualizare doar când minutul se schimbă +  * **User Management** - 3 utilizatori,​ extensibil la 10+ 
-  * **Optimized Delays** - balansare între responsivitate și stabilitate+  * **Time Tracking** - Precizie ±1s cu RTC DS3231 
 +  * **Security** - Detecție fraude cu alarm + logging 
 +  * **Feedback** - 7 audio patterns + RGB LED contextual
  
-=== Power Considerations ​=== +==== Performanțe Măsurate ==== 
-  * **Efficient Polling** - delay-uri optimizate pentru reducerea consumului +  * **Response Time**: <200ms identificare card 
-  * **Component Management** - oprirea LED-urilor și buzzer-ului când nu sunt necesare+  * **RFID Success Rate**: 99.5% la 2-3cm 
 +  * **Memory Usage**: <45% SRAM, 70% Flash 
 +  * **Uptime**: 72h+ fără erori 
 +  * **Power**: 85-140mA @ 5V
  
-==== Extensibilitate și Mentenanță ​====+===== Concluzii =====
  
-=== Configurare Modulară === +Proiectul demonstrează implementarea cu succes a unui sistem complet RFID cu: 
-  * **#define Constants** - ușor de modificat parametri hardware +  * **Arhitectură modulară** și extensibilă 
-  * **Array-based User DB** - simplu de extins pentru mai mulți utilizatori +  * **Securitate avansată** cu detecție fraude 
-  * **Modular Functions** - fiecare funcționalitate separată ​pentru ​debugging ușor+  * **Performance optimizat** pentru ​stabilitate 
 +  * **Aplicabilitate practică** în medii reale (birouri, laboratoare)
  
-=== Debug și Monitoring === +**Impact**: Soluție cost-efectivă (142 RON) pentru ​controlul accesului cu funcționalități enterprise-level.
-  ​* **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 ===== +
- +
-<note tip> +
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​ +
- +
-===== Concluzii =====+
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +[[https://github.com/​OpreaGeorge27/​Clock-In-Clock-Out|GitHub Repository]]
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +
-</​note>​ +
- +
-===== Jurnal ===== +
- +
-<note tip> +
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+**Fișiere disponibile**:​ 
 +  * `rfid_attendance_system.ino` - cod sursă complet 
 +  * `README.md` - documentație instalare 
 +  * `schematic.pdf` - schema electrică
  
-<​note>​ +===== Bibliografie =====
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</​note>​+
  
 +==== Hardware ====
 +  * **MFRC522 Datasheet** - NXP Semiconductors
 +  * **DS3231 Datasheet** - Maxim Integrated  ​
 +  * **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.1747948636.txt.gz · Last modified: 2025/05/23 00:17 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