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

  • 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

```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ță ```

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 ↑ ↓ └── 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 ```

Modulul Audio Feedback

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

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