This is an old revision of the document!


Clock in Clock out

Introducere

Proiectul meu constă într-un sistem automatizat de pontaj bazat pe tehnologia RFID (Radio-Frequency Identification), implementat cu ajutorul unui microcontroler, două module RC522, un ecran LCD, un buzzer și un leg RGB.

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 intrare, angajatul 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.

Schema Bloc

Hardware Design

Piesele utilizate

Componentă Cantitate Preț/Buc (RON)
Arduino Uno 1 40
Modul RFID MFRC522 2 15
Modul RTC 1 19
Ecran Led 1 15
Carduri/tag-uri RFID min. 3 5
Rezistori (diferite valori) ~10 2
RGB 1 2
Buzzer 1 4
Breadboard 2 4
Fire de conexiune 1 set 35

Software Design

Mediul de Dezvoltare

Arduino IDE - mediul de dezvoltare principal pentru programarea microcontrollerului

  • Limbaj: C++ (Arduino Framework)
  • Target Platform: Arduino Uno/Nano (ATmega328P)
  • Compiler: avr-gcc

Librării și Dependențe

Librării Core

  • 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

// 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

// 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

// 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:

  1. READY - așteptare scanare card
  2. PROCESSING - validare și procesare card
  3. FEEDBACK - afișare rezultat și feedback audio/vizual
  4. ERROR - gestionarea situațiilor de eroare

Flow Diagram:

[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

Funcții și Module Implementate

Modulul RFID Management

String getUID(byte *buffer, byte bufferSize)  // Conversie UID la string
int findPersonByUID(String uid)               // Căutare utilizator în DB

Modulul Time Management

String formatTimeHM(DateTime dt)                // Format HH:MM
String formatTime(DateTime dt)                  // Format HH:MM:SS  
String formatTimeSpent(unsigned long seconds)   // Calculare timp petrecut
String formatDateTime(DateTime dt)              // Format complet dată/oră

Modulul Entry/Exit Logic

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

void startupBeep()     // Sunet pornire sistem
void successBeep()     // Sunet intrare reușită  
void exitBeep()        // Sunet ieșire reușită
void unknownBeep()     // Sunet card necunoscut
void errorBeep()       // Sunet eroare generală
void warningBeep()     // Sunet avertizare
void alarmBeep()       // Sunet alarmă critică

Modulul Visual Feedback (RGB LED)

void setRGB(bool red, bool green, bool blue)  // Control individual culori
void turnOffRGB()                             // Oprire LED
void blinkGreen()                            // 3 clipiri verzi (succes)
void blinkRed()                              // 5 clipiri roșii (eroare)

Modulul Display Management

void showReadyScreen()                       // Afișaj mod așteptare
// Display updates integrate cu time tracking în main loop

Algoritmi de Securitate și Validare

Anti-Tampering Measures

  • Debounce Protection - DEBOUNCE_TIME 1500ms previne scanări multiple accidentale
  • Double Entry Detection - verificare status prezență înainte de permiterea intrării
  • Invalid Exit Prevention - blocare ieșire fără intrare prealabilă
  • Error Logging - toate tentativele neautorizate sunt înregistrate cu timestamp

Validare Date

  • UID Truncation - comparare doar primii 8 caractere pentru consistență
  • RTC Validation - verificare funcționalitate și 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

  • Timp răspuns - sub 200ms pentru identificare card
  • Precizie timp - exactitate de secundă prin RTC DS3231
  • Stabilitate - funcționare continuă fără erori de memorie
  • Consum energetic - optimizat prin polling eficient

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 RFID, LCD, RTC, buzzer, LED RGB) într-un sistem coerent și funcțional.

Puncte forte ale implementării:

  • 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

GitHub

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

  • Arduino Reference - documentația oficială Arduino IDE și librării
  • MFRC522 Library - GitHub miguelbalboa/rfid, librăria pentru cititor RFID
  • RTClib Documentation - Adafruit, librăria pentru module RTC
  • LiquidCrystal_I2C Library - documentația pentru controlul LCD prin I2C

Resurse Teoretice

  • RFID Technology Handbook - principiile tehnologiei RFID
  • Embedded Systems Design - concepte de design pentru sisteme embedded
  • Arduino Programming Guide - ghid de programare și best practices

Comunități și Forumuri

  • Arduino Forum - suport tehnic și exemple de implementare
  • Stack Overflow - rezolvarea problemelor de programare
  • Reddit r/arduino - discuții și proiecte similare
pm/prj2025/vradulescu/george.oprea2706.1747950539.txt.gz · Last modified: 2025/05/23 00:48 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