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. |
Dezvoltarea sistemului SMART GUARD a reprezentat o oportunitate excelentă de a aprofunda concepte complexe de hardware și software embedded. Proiectul a evoluat spectaculos de la o simplă alarmă de proximitate la un sistem hibrid de control acces, capabil să gestioneze memorii dinamice și comenzi de la distanță.
Principala provocare a proiectului a fost gestionarea corectă a resurselor limitate ale microcontroller-ului ATmega328P. Implementarea terminalului UART bogat în mesaje de log a dus inițial la depășirea memoriei SRAM (Stack Crash) și la resetarea plăcii în buclă. Problema a fost rezolvată optimizând arhitectura software și folosind macro-ul F() pentru a forța compilatorul să citească string-urile direct din memoria Flash (ajungând la un consum stabil de sub 50% RAM).
Din punct de vedere arhitectural, trecerea la o Mașină de Stări (Finite State Machine) complet non-blocantă, bazată pe Timere hardware (millis()) în detrimentul funcțiilor de tip delay(), a fost un succes. Aceasta i-a permis sistemului să ruleze în paralel: să filtreze zgomotul senzorului ultrasonic, să afișeze fluid interfața pe modulul TM1638, să asculte magistrala SPI pentru carduri RFID și să mențină portul UART deschis pentru consolă.
Rezultatul este un produs robust, interactiv și foarte apropiat de standardele comerciale de securitate.
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.