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
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare: Arduino IDE (C++)
librării şi 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
Mediul de Dezvoltare
Arduino IDE - mediul de dezvoltare principal pentru programarea microcontrollerului
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:
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
↑ ↓
└── 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
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
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
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
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
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
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un 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.
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
components_list.txt
- lista componentelor necesare
CHANGELOG.md
- istoricul modificărilor
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