This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:smart-guard [2026/05/22 18:49] rares_florian.oprea [Hardware Design] |
pm:prj2026:ciprian.popescu0411:smart-guard [2026/05/22 20:29] (current) rares_florian.oprea [Hardware Design] |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| + | * Proiectul constă într-un prototip de alarmă hibridă, guvernat de o Mașină de Stări (FSM) non-blocantă. În modul armat, un senzor ultrasonic acționează ca o „barieră virtuală”. Când un obiect încalcă perimetrul (scăzând sub pragul critic de distanță), se declanșează un cronometru de pre-alarmă. Utilizatorul aflat la ușă are la dispoziție 15 secunde pentru a apropia o cartelă RFID autorizată și a opri alerta, altfel sistemul intră în starea de alarmă generală. | ||
| - | *Proiectul constă într-un prototip de alarmă inteligentă care monitorizează constant o zonă prin intermediul unui senzor ultrasonic. Când sistemul este armat și senzorul detectează un obiect sau o mișcare sub un prag de distanță prestabilit (simulând o intruziune), se declanșează un cronometru de pre-alarmă. Utilizatorul are la dispoziție un timp limitat (ex: 15 secunde) pentru a apropia o cartelă RFID autorizată de cititor pentru a dezarma sistemul. Starea sistemului și timpul rămas sunt afișate pe un modul cu ecrane cu 7 segmente. Interfața dispune de LED-uri și avertizări sonore, iar butoanele pot fi folosite pentru setări adiționale (ex: introducerea unui cod PIN de rezervă în lipsa cartelei). | + | * Spre deosebire de o alarmă clasică, SMART GUARD rulează o bază de date dinamică în memorie. Prin intermediul butoanelor de pe interfața hardware principală (modulul LED & Key), administratorul poate adăuga cartele noi sau elimina cartele compromise direct pe loc, modulul afișând UID-urile hexazecimale pe afișajul cu 7 segmente. Interfața locală oferă un feedback multi-senzorial complex: texte de tranzitare (SECURE, dEnIEd, SAFE), progress-bar pe LED-uri pentru timpul rămas, avertizări sonore stratificate și indicatoare luminoase externe de acces (Verde/Roșu). |
| + | * Paralel cu interfața fizică de la punctul de acces, sistemul comunică bidirecțional printr-un terminal UART cu o stație de monitorizare (PC). Această interfață este destinată personalului de securitate care urmărește camerele video. Terminalul generează rapoarte la fiecare scanare a unei cartele (inclusiv încercările respinse) și acceptă comenzi scrise. Astfel, un gardian poate arma/dezarma sistemul de la distanță pentru un vizitator fără cartelă, sau poate tasta comanda „PANIC” pentru a declanșa instantaneu alarma dacă observă o activitate suspectă pe monitor, indiferent de starea senzorilor locali. | ||
| ===== Schema Bloc ===== | ===== Schema Bloc ===== | ||
| - | {{:pm:prj2026:ciprian.popescu0411:schemabloc_smart-guard.png?600|}} | + | {{:pm:prj2026:ciprian.popescu0411:schemabloc_smart-guard.v2.png?600|}} |
| - | * Input: Senzor Ultrasonic HC-SR04 (detecție prezență), Modul RFID-RC522 (citire cartelă), Butoane modul TM1638 (cod de backup, comenzi) | + | |
| - | * Procesare: Placă de dezvoltare Arduino Uno (monitorizare senzori, gestionare cronometru, validare UID cartelă, mașină de stări) | + | |
| - | * Output: Display 7-segmente TM1638 (afișare mesaje/timer), LED-uri TM1638 & LED Roșu extern (indicatori de stare), Buzzer (avertizare sonoră) | + | |
| - | + | ||
| - | ===== Schema Bloc ===== | + | |
| - | + | ||
| - | {{:pm:prj2026:ciprian.popescu0411:schemabloc_smart-guard.png?600|}} | + | |
| * Input: Senzor Ultrasonic HC-SR04 (detecție prezență), Modul RFID-RC522 (citire cartelă), Butoane modul TM1638 (cod de backup, comenzi) | * Input: Senzor Ultrasonic HC-SR04 (detecție prezență), Modul RFID-RC522 (citire cartelă), Butoane modul TM1638 (cod de backup, comenzi) | ||
| * Procesare: Placă de dezvoltare Arduino Uno (monitorizare senzori, gestionare cronometru, validare UID cartelă, mașină de stări) | * Procesare: Placă de dezvoltare Arduino Uno (monitorizare senzori, gestionare cronometru, validare UID cartelă, mașină de stări) | ||
| Line 74: | Line 69: | ||
| - | {{:pm:prj2026:ciprian.popescu0411:milestone_hardware_smartguard.jpeg?600|}} | + | {{:pm:prj2026:ciprian.popescu0411:img_5888.jpeg?600|}} |
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | * Demo proiect: https://youtu.be/0NK5whnqt9E | ||
| + | * Github: https://github.com/RaresOprea04/SMART-GUARD | ||
| - | <note tip> | + | 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)**. |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| - | ===== Rezultate Obţinute ===== | + | 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". |
| - | <note tip> | + | Funcții principale implementate: |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | ^ 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ță. | | ||
| - | ===== Download ===== | + | Biblioteci folosite: |
| - | <note warning> | + | ^ Biblioteca ^ Rol ^ |
| - | 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ă ;-). | + | | 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**. | + | ===== Concluzii ===== |
| - | </note> | + | 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ță. |
| - | ===== Jurnal ===== | + | 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. | ||
| + | ===== Download ===== | ||
| - | <note tip> | + | Arhiva completă a proiectului **SMART GUARD**, pregătită pentru descărcare. Aceasta conține codul sursă (PlatformIO / Arduino), diagramele hardware, fișierul README cu documentația și istoricul versiunilor (ChangeLog). |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | |
| + | {{:pm:prj2026:ciprian.popescu0411:smart_guard_v2.zip|}} | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| <note> | <note> | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * **Hardware & Datasheets:** |
| + | * [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] | ||
| + | * [[https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf|Datasheet MFRC522 (Modul RFID)]] | ||
| + | * Specificații tehnice TM1638 (Modul LED & Key) și HC-SR04. | ||
| + | * **Software & Biblioteci:** | ||
| + | * [[https://github.com/miguelbalboa/rfid|Biblioteca MFRC522 (miguelbalboa)]] | ||
| + | * [[https://github.com/rjbatista/tm1638-library|Biblioteca TM1638 (rjbatista)]] | ||
| + | * Documentația oficială Arduino Reference pentru manipularea registrelor și a funcțiilor de timing. | ||
| </note> | </note> | ||