This is an old revision of the document!
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.
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 |
Arduino IDE - mediul de dezvoltare principal pentru programarea microcontrollerului
```cpp 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ță ```
```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 ↑ ↓ └── 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 === ```cpp String getUID(byte *buffer, byte bufferSize) Conversie UID la string int findPersonByUID(String uid) Căutare utilizator în DB ``` === Modulul Time Management === ```cpp 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 === ```cpp void doubleEntryAlarm(int personIndex) Gestionare intrare dublă void invalidExitAlarm(int personIndex) Gestionare ieșire invalidă void logError(String errorMessage) Logging erori cu timestamp ```
```cpp
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) ===
```cpp
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 ===
```cpp
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 =====
<note tip>
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
</note>
===== Concluzii =====
===== Download =====
<note warning>
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.
</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 =====
<note>
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.
</note>