This is an old revision of the document!
Lista de piese (Bill of Materials):
Conexiunile hardware de până acum sunt următoarele:
| Componenta | Conectare |
|---|---|
| Breadboard | 5V microcontroller → bara VCC (roșie) superioară breadboard |
| Breadboard | 3.3V microcontroller → bara VCC (roșie) inferioară breadboard |
| Breadboard | GND microcontroller → barele GND (albastre) breadboard |
| Componenta | Pin componenta | Conectare |
|---|---|---|
| Senzor Ultrasonic HC-SR04 | VCC | 5V breadboard |
| Senzor Ultrasonic HC-SR04 | GND | GND breadboard |
| Senzor Ultrasonic HC-SR04 | Trig | Pin 6 microcontroller |
| Senzor Ultrasonic HC-SR04 | Echo | Pin 7 microcontroller |
| Componenta | Pin componenta | Conectare |
|---|---|---|
| Modul RFID-RC522 | 3.3V | 3.3V breadboard |
| Modul RFID-RC522 | GND | GND breadboard |
| Modul RFID-RC522 | RST | Pin 9 microcontroller |
| Modul RFID-RC522 | SDA (SS) | Pin 10 microcontroller |
| Modul RFID-RC522 | MOSI | Pin 11 microcontroller |
| Modul RFID-RC522 | MISO | Pin 12 microcontroller |
| Modul RFID-RC522 | SCK | Pin 13 microcontroller |
| Componenta | Pin componenta | Conectare |
|---|---|---|
| Modul TM1638 (LED & Key) | VCC | 5V breadboard |
| Modul TM1638 (LED & Key) | GND | GND breadboard |
| Modul TM1638 (LED & Key) | STB | Pin 2 microcontroller |
| Modul TM1638 (LED & Key) | CLK | Pin 3 microcontroller |
| Modul TM1638 (LED & Key) | DIO | Pin 4 microcontroller |
| Componenta | Pin componenta | Conectare |
|---|---|---|
| Buzzer | Pin semnal (+) | Pin 5 microcontroller |
| Buzzer | GND (-) | GND breadboard |
| LED Roșu Extern | Anod (+) conectat prin rezistență | Pin 8 microcontroller |
| LED Roșu Extern | Catod (-) | GND breadboard |
| LED Verde Extern | Anod (+) conectat prin rezistență | Pin A4 microcontroller |
| LED Verde Extern | Catod (-) | GND breadboard |
Proiectul a fost dezvoltat în mediul Arduino IDE / PlatformIO, folosind framework-ul Arduino pentru microcontroller-ul ATmega328P (placa Arduino Uno). Codul este scris în C++ și este structurat pe o arhitectură robustă de tip Mașină de Stări (Finite State Machine).
Abordarea este predominant non-blocantă, utilizând funcția `millis()` pentru măsurarea timpului (Timer hardware). Această arhitectură permite monitorizarea simultană și în timp real a senzorului ultrasonic, a cititorului RFID, a stării butoanelor de pe modulul TM1638 și a comenzilor primite de la distanță prin consola UART (Serial Monitor), fără ca execuția programului să “înghețe”.
Funcții principale implementate:
| Functie | Rol |
|---|---|
| setup() | Inițializează pinii pentru senzori, buzzer și LED-uri, setează un timeout optimizat pentru portul Serial, pornește comunicația SPI, inițializează modulele RFID și TM1638, și afișează mesajul de pornire pe Serial. |
| loop() | Reprezintă bucla principală a programului. Evaluează continuu starea curentă a mașinii (IDLE, ARMAT, PRE-ALARMA, ALARMA, ADAUGARE, STERGERE), citește butoanele și apelează listener-ul pentru comenzile UART. |
| isMasterCard() | Verifică dacă UID-ul cardului scanat aparține cardului Master (card invincibil cu acces de administrator, codat hard în memorie). |
| isAuthorizedCard() | Verifică dacă un card scanat are drept de acces, căutându-i UID-ul în baza de date dinamică stocată în memoria RAM sau verificând dacă este cardul Master. |
| printeazaUIDSerial() | Formatează UID-ul citit în hexazecimal și generează log-uri detaliate în consola UART pentru trasabilitatea evenimentelor de securitate (folosind macro-ul F() pentru salvarea memoriei SRAM). |
| afiseazaUIDPeEcran() | Descompune octeții UID-ului și utilizează un font HEX custom pentru a afișa identificatorul cardului direct pe cele 8 display-uri cu 7-segmente ale modulului TM1638. |
| afiseazaAccesRespins() | Declanșează secvența vizuală și sonoră de eroare (pâlpâire LED roșu + buzzer intermitent + textul “dEnIEd”) la respingerea unei cartele neautorizate. |
| executaDezarmareCuSucces() | Funcție de tranziție care oprește avertizările, afișează mesajul de siguranță (“SAFE”), emite un bip de confirmare și trece sistemul înapoi în starea de repaus (IDLE). |
| afiseazaTimerCentrat() | Calculează zecile și unitățile din timpul de pre-alarmă rămas și le afișează centrat, în formatul ”- X Y -”, pe display. |
| afiseazaStareArmatCuDistanta() | Construiește interfața modului radar (“On” urmat de valoarea distanței în centimetri) afișată în timp ce sistemul este armat. |
| afiseazaTimpPeLEDuri() | Folosește funcția map() pentru a stinge treptat cele 8 LED-uri roșii de pe modulul TM1638, oferind un progress-bar vizual intuitiv în timpul perioadei de pre-alarmă. |
| citesteDistantaFiltrata() | Implementează un filtru software de tip *Averaging Filter*. Ia 3 eșantioane consecutive de la senzorul HC-SR04, elimină valorile nule/aberante și returnează media aritmetică pentru o stabilitate maximă a citirilor. |
| proceseazaComenziSeriale() | Implementează un terminal UART bidirecțional pe bază de buffer (String acumulativ), care permite unui operator PC să trimită comenzi text (ARM, DISARM, PANIC, STATUS) pentru a controla sistemul de la distanță. |
Biblioteci folosite:
| Biblioteca | Rol |
|---|---|
| Arduino.h | Funcții de bază ale framework-ului Arduino: control pini (GPIO), măsurare timp (millis, delayMicroseconds), citire impulsuri (pulseIn) și comunicație Serială UART. |
| SPI.h | Protocolul Serial Peripheral Interface, absolut necesar pentru comunicarea rapidă la nivel hardware între placa de dezvoltare și modulul cititor RFID. |
| MFRC522.h | Gestionează inițializarea cipului RC522, emisia undelor radio de 13.56MHz și citirea/decriptarea ID-ului (UID) de pe tag-urile și cartelele de securitate scanate. |
| TM1638.h | Gestionează multiplexarea prin 3 fire (STB, CLK, DIO) necesară pentru a controla simultan cele 8 afișaje cu 7 segmente, cele 8 LED-uri roșii și pentru a citi starea celor 8 butoane integrate. |
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.