This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:matei.hutu [2026/05/01 14:13] matei.hutu |
pm:prj2026:bianca.popa1106:matei.hutu [2026/05/02 22:49] (current) matei.hutu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Smart helmet lock ====== | + | ====== Smart Helmet Lock ====== |
| + | * Autor: **Huțu Matei-Alexandru** | ||
| + | * Grupa: 331CA | ||
| + | * GitHub: [[https://github.com/Matei2807/Proiect-PM|Matei2807/Proiect-PM]] | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| - | <note tip> | + | **Smart Helmet Lock** este un sistem de securitate bazat pe microcontroler-ul ATmega328P, conceput pentru a bloca fizic și a securiza breteaua (D ring) a unei căști moto într-o cutie sau pe sașiul motocicletei. |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | **Scopul proiectului** este de a oferi o soluție smart și rapidă motocicliștilor care doresc să își lase casca în siguranță lângă motocicletă, fără a fi nevoiți să o transporte manual în magazine, la facultate sau la locul de muncă. |
| - | * care este scopul lui | + | |
| - | * care a fost ideea de la care aţi pornit | + | **Ideea de pornire** a venit din inconvenientul real al echipamentului de protecție voluminos. Căștile moto sunt scumpe și incomode de transportat ca bagaj de mână. Majoritatea soluțiilor de pe piață implică lacăte mecanice cu chei sau cifruri care sunt greu de operat cu mănuși si de calitate proastă. |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
| - | </note> | + | **De ce este util?** |
| + | Sistemul rezolvă această problemă folosind autentificare **RFID** (prin apropierea unui breloc/card) pentru descuierea unui mecanism acționat de un servomotor. Sistemul este dotat cu feedback vizual (semafor LED), feedback acustic (buzzer) și, cel mai important, un sistem de alarmă activat de un senzor de vibrații în cazul tentativelor de furt. | ||
| + | |||
| + | **Ipoteză:** | ||
| + | Consider că utilizarea unei astfel de încuietori va îmbunătăți semnificativ siguranța, deoarece previne furtul prin emiterea unei alarme sonore, descurajând acțiunile de efracție. Mai mult folosirea modulului RFID îl va face mult mai ușor de folosit cu mănuși (sau fără) fața de încuietoarele de pe piață. | ||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| - | <note tip> | + | Arhitectura proiectului se face în jurul microcontrolerului **ATmega328P** (pe placa Xplained Mini). Sistemul este gândit sub forma unui automat de stări (Unlocked, Locked, Tamper Warning, Alarm). |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | **Interacțiunea modulelor:** |
| - | </note> | + | * **Modulul RFID (RC522)** comunică cu microcontrolerul prin protocolul **SPI**. Este folosit pentru citirea UID-ului de pe card. Dacă UID-ul corespunde cu master key-ul salvat în memorie, controller-ul schimbă starea sistemului. Deoarece modulul funcționează la 3.3V, liniile de date dinspre microcontroller (5V) trec printr-un divizor de tensiune pentru a proteja modulul. |
| + | * **Senzorul de Vibrații (SW-420)** este conectat la un pin setat să genereze o **întrerupere externă**. La detecția unei mișcări, codul iese instant din rutina curentă și semnalează efracția. | ||
| + | * **Servomotorul (SG90)** reprezintă actuatorul mecanic. Primește un semnal **PWM de 50Hz** generat hardware de **Timer 1** (16-bit), modificând ciclul de lucru pentru a roti tija la 0° (Încuiat) sau 90° (Descuiat). | ||
| + | * **Buzzerul Pasiv** este modulat cu un semnal dreptunghiular de 1-2kHz prin **Timer 2** (Fast PWM) pentru emiterea tonurilor de confirmare sau a sirenei de alarmă. | ||
| + | * **Semaforul LED** folosește pini GPIO pentru a oferi utilizatorului feedback vizual imediat (Verde = Deschis, Roșu = Încuiat, Galben = Avertisment). | ||
| + | |||
| + | **Schema Bloc:** | ||
| + | |||
| + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/bianca.popa1106/schema_bloc_proiect_pm-hutumatei.png|Schema Bloc Sistem}} | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | <note tip> | + | Proiectul cuprinde componente care operează atât la 5V, cât și la 3.3V, împărțind GND-ul. |
| - | Aici puneţi tot ce ţine de hardware design: | + | |
| - | * listă de piese | + | **Listă de componente:** |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
| - | * diagrame de semnal | + | ^ Nume componenta ^ Model ^ Protocol ^ |
| - | * rezultatele simulării | + | | Microcontroller | ATmega328P Xplained Mini | USB, UART | |
| - | </note> | + | | Modul RFID | RC522 | SPI | |
| + | | Servomotor | SG90 | PWM | | ||
| + | | Senzor Vibrații | SW-420 | Digital Input (INT0) | | ||
| + | | Buzzer pasiv | - | Fast PWM | | ||
| + | | LED-uri | 3 x 5mm (roșu, galben, verde) | GPIO | | ||
| + | | Alte elemente | Rezistențe (330Ω, 1kΩ, 2kΩ) | - | | ||
| + | |||
| + | |||
| + | **Descriere detaliată a componentelor hardware:** | ||
| + | |||
| + | **Modul RFID RC522:** | ||
| + | |||
| + | Modulul este folosit pentru citirea cardurilor și funcționează la 3.3V. Comunică cu ATmega328P prin interfața SPI. Deoarece pinii microcontrolerului trimit semnale logice de 5V, pe liniile MOSI, SCK și SDA am implementat un divizor de tensiune (cu rezistențe de 1kΩ și 2kΩ) pentru a proteja modulul. | ||
| + | |||
| + | Conectarea pinilor: | ||
| + | ^ Pin RC522 ^ Pin ATmega328P ^ | ||
| + | | VCC | 3.3V | | ||
| + | | GND | GND | | ||
| + | | RST | 3.3V | | ||
| + | | MISO | PB4 | | ||
| + | | MOSI | PB3 (prin divizor de tensiune) | | ||
| + | | SCK | PB5 (prin divizor de tensiune) | | ||
| + | | SS | PB2 (prin divizor de tensiune) | | ||
| + | |||
| + | **Servomotor SG90:** | ||
| + | |||
| + | Acționează mecanismul fizic (zăvorul) pentru a bloca inelele căștii. Este controlat printr-un semnal PWM de 50Hz, generat hardware de Timerul 1 pe 16-biți. | ||
| + | |||
| + | Conectarea pinilor: | ||
| + | ^ Pin SG90 ^ Pin ATmega328P ^ | ||
| + | | VCC (Fir Roșu) | 5V | | ||
| + | | GND (Fir Maro) | GND | | ||
| + | | Semnal (Fir Portocaliu) | PB1 - OC1A | | ||
| + | |||
| + | **Senzor de Vibrații SW420:** | ||
| + | |||
| + | Folosit ca declanșator pentru alarma. Este conectat la un pin configurat să genereze o întrerupere hardware la orice tranziție a semnalului declanșat de o vibrație. | ||
| + | |||
| + | Conectarea pinilor: | ||
| + | ^ Pin SW-420 ^ Pin ATmega328P ^ | ||
| + | | VCC | 5V | | ||
| + | | GND | GND | | ||
| + | | DO (Digital Out) | PD2 - INT0 | | ||
| + | |||
| + | **Buzzer Pasiv:** | ||
| + | |||
| + | Furnizează feedback acustic (beep-uri scurte la scanarea cardului și sirena de alarmă la tampering). Semnalul este o undă generată prin Fast PWM (~1-3kHz) folosind Timerul 2. | ||
| + | |||
| + | Conectarea pinilor: | ||
| + | ^ Pin Buzzer ^ Pin ATmega328P ^ | ||
| + | | I/O | PD3 - OC2B | | ||
| + | | VCC | 5V | | ||
| + | | GND | GND | | ||
| + | |||
| + | **LED-uri Stare (Semafor):** | ||
| + | |||
| + | Sistemul folosește 3 LED-uri indicatoare. Pentru a proteja LED-urile împotriva arderii, fiecare are în serie câte o rezistență de limitare a curentului de 330Ω între anod și microcontroller. | ||
| + | |||
| + | Conectarea pinilor: | ||
| + | ^ Componentă ^ Pin ATmega328P ^ | ||
| + | | Anod LED Roșu (+) | PD5 | | ||
| + | | Anod LED Galben (+) | PD6 | | ||
| + | | Anod LED Verde (+) | PD7 | | ||
| + | | Catozi LED-uri (-) | GND | | ||
| + | |||
| + | **Schema Electrica:** | ||
| + | |||
| + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2026/bianca.popa1106/schema_electrica_proiect_pm-hutumatei.png?730|Schema Electrica}} | ||
| + | |||
| + | **TODO rezultatele asamblare hardware** | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | **1. Mediul de dezvoltare și librării** | ||
| - | <note tip> | + | Proiectul a fost dezvoltat în **C**, folosind **PlatformIO**. O caracteristică importantă a implementării este lipsa bibliotecilor Arduino. Tot codul este scris încât să interacționăm direct cu regiștrii. Acest lucru asigură o folosire mică de memorie și un control strict al temporizărilor (timere, întreruperi). |
| - | 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 ===== | + | **2. Algoritmul principal: Automatul de Stări** |
| - | <note tip> | + | Logica centrală a sistemului este implementată în fișierul ''main.c'' printr-un automat de stări (FSM). Funcționarea decurge în următorii pași: |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | - **Inițializarea** - Se configurează pinii GPIO, interfața UART, protocolul SPI, și se pornesc timerele și intreruperile (''sei()''). Sistemul pornește implicit în starea ''STATE_UNLOCKED''. |
| + | - **Așteptare (Unlocked)** - LED-ul verde este aprins. Senzorul de vibrații este ignorat intenționat. Sistemul așteaptă scanarea prin SPI a cardului RFID cu UID-ul master. | ||
| + | - **Securizarea (Locked)** - La validarea cardului, se emite un beep, servo-ul coboară tija (0°), LED-ul roșu se aprinde, iar flag-ul de întreruperi pentru tamper este activat. | ||
| + | - **Avertisment (Tamper Warning)** - Dacă o vibrație declanșează întreruperea ''INT0'', se trece într-o stare de avertisment (LED Galben) de 1 secundă. Aceasta permite deblocarea sistemului dacă mișcarea a fost făcută chiar de proprietar înainte de a pune cardul. | ||
| + | - **Alarma (Alarm)** - Dacă avertismentul expiră fără prezentarea cardului Master, începe bucla de alarmă vizuală și sonoră de 5 secunde. | ||
| + | - **Ieșirea non-blocantă** - În timpul alarmei sau avertismentului, se folosește o funcție ''wait_and_check_master_card()''. Aceasta sparge funcțiile de ''delay'' în pași de 50ms, verificând constant antena RFID, permițând oprirea instantanee a alarmei. | ||
| - | ===== Download ===== | + | **3. Implementarea modulelor** |
| - | <note warning> | + | Pentru a asigura modularitatea codului, funcționalitățile sunt împărțite în fișiere specifice, asemănător cu laboratoarele: |
| - | 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**. | + | **1. timer.c (Generare semnale PWM - Lab 3)** |
| - | </note> | + | * **Timer 1 (16-bit):** Setează pinul PB1 (OC1A) în modul Fast PWM. Registrul ''ICR1'' este folosit ca TOP pentru a seta o frecvență fixă de 50Hz (perioadă de 20ms). Modificarea registrului ''OCR1A'' controlează ciclul de lucru (1000 tick-uri pentru 0°, 4800 tick-uri pentru 180°), mișcând brațul servomotorului. |
| + | * **Timer 2 (8-bit):** Setează pinul PD3 (OC2B) în Fast PWM. Este pornit și oprit cu un prescaler de 64 pentru a modula un semnal de ~3kHz, acționând buzzerul pentru beep-uri. | ||
| - | ===== Jurnal ===== | + | **2. tamper.c (Întreruperi externe - Lab 2)** |
| + | * Configurează pinul PD2 să declanșeze întreruperea ''INT0''. Registrul ''EICRA'' pentru a declanșa întreruperea la orice modificare logică a pinului (mișcare a senzorului). Rutina (ISR) modifică o variabilă globală ''volatile uint8_t vibration_detected''. | ||
| + | **3. spi.c și rfid.c (Comunicație SPI - Lab 5)** | ||
| + | * Microcontrolerul este configurat ca master. | ||
| + | * Codul de comunicare cu modulul RC522 folosește funcții low-level manipulând pinul SS și trimițând date de control pentru a porni antena și a prelua răspunsul de 4 octeți (UID-ul cardului). | ||
| + | |||
| + | **4. uart.c (Comunicație Serială - Lab 1)** | ||
| + | * Inițializează regiștrii ''UBRR0H'' și ''UBRR0L'' pentru a seta rata de transfer la 9600 baud. Este folosit pentru afișarea stării curente a sistemului pe laptop prin funcția ''UART_print()''. | ||
| + | |||
| + | ===== Rezultate Obţinute ===== | ||
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | Care au fost rezultatele obţinute în urma realizării proiectului vostru. |
| </note> | </note> | ||
| - | ===== Bibliografie/Resurse ===== | + | ===== Concluzii ===== |
| - | <note> | + | ===== Jurnal ===== |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * **10.04.2026 - 01.05.2026:** Stabilirea temei, achiziționarea componentelor, testarea individuală a modulelor. Realizarea milestone 1 (Introducere, Arhitectură Bloc, Lista de componente). |
| - | </note> | + | * **02.05.2026:** Realizare schema electrică a proiectului în Cirkit Designer, adăugare tabele la Hardware Design și completarea Softawre Design. |
| - | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | ===== Bibliografie/Resurse ===== |
| + | **Resurse Hardware:** | ||
| + | * [[https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet Microcontroler ATmega328P]] | ||
| + | * [[https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/UserGuides/ATmega328P-Xplained-Mini-UG-DS50002659B.pdf|User Guide Xplained Mini ATmega328P]] | ||
| + | * [[https://www.handsontec.com/dataspecs/RC522.pdf|Datasheet RC522 (Modul RFID)]] | ||
| + | * [[https://www.friendlywire.com/projects/ne555-servo-safe/SG90-datasheet.pdf|Datasheet SG90 Micro Servo]] | ||
| + | **Resurse Software și Tool-uri:** | ||
| + | * Google Drawings (Pentru realizarea schemei bloc) | ||
| + | * Cirkit Designer (Pentru realizarea schemei electrice) | ||
| + | * GitHub (Pentru versionarea codului sursă) | ||