This shows you the differences between two versions of the page.
pm:prj2025:iotelea:raluca.guceanu [2025/05/26 21:23] raluca.guceanu [Resurse software] |
pm:prj2025:iotelea:raluca.guceanu [2025/05/30 03:20] (current) raluca.guceanu [Concluzii] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Sistem de acces multi-nivel pentru șoferi ====== | ====== Sistem de acces multi-nivel pentru șoferi ====== | ||
+ | |||
+ | Autor: **Raluca-Zinca-Ioana Guceanu** \\ | ||
+ | Grupa: **331CD** \\ | ||
+ | GitHub: https://github.com/ralucaguceanu/Sistem-de-acces-multi-nivel-pentru-soferi | ||
+ | |||
===== Introducere ===== | ===== Introducere ===== | ||
Line 42: | Line 47: | ||
* **Card MicroSD (SPI)** | * **Card MicroSD (SPI)** | ||
- | * Conține fișierul `password.txt` cu hash-ul parolei corecte | + | * Conține fișierul cu hash-ul parolei corecte |
---- | ---- | ||
Line 70: | Line 75: | ||
==== Listă de piese ==== | ==== Listă de piese ==== | ||
- | * **Arduino UNO** – unitate de control | + | * **Arduino UNO** - unitate de control |
- | * **Ecran LCD (16x02, I2C)** – afișaj statusuri și mesaje | + | * **Ecran LCD (16x02, I2C)** - afișaj statusuri și mesaje |
- | * **Tastatură cu 4 taste** – introducere parolă și navigare pe ecran | + | * **Tastatură cu 4 taste** - introducere parolă și navigare pe ecran |
- | * **Card microSD + modul microSD (SPI)** – stocare date (hash-ul parolei) | + | * **Card microSD + modul microSD (SPI)** - stocare date (hash-ul parolei) |
- | * **Senzor alcool MQ-3** – măsurare alcoolemie | + | * **Senzor alcool MQ-3** - măsurare alcoolemie |
- | * **Buzzer (PWM)** – semnal sonor pentru feedback asupra parolei introduse | + | * **Buzzer (PWM)** - semnal sonor pentru feedback asupra parolei introduse |
- | * **LED roșu + LED verde** – semnal vizual acces refuzat/permis | + | * **LED roșu + LED verde** - semnal vizual acces refuzat/permis |
- | * **Rezistențe 220Ω** – pentru protecție LED-uri și buzzer | + | * **3 Rezistențe 220Ω** - pentru protecție LED-uri și buzzer |
- | * **Breadboard + fire** – pentru conexiuni rapide | + | * **Breadboard + fire** - pentru conexiuni rapide |
==== Schemă electrică ==== | ==== Schemă electrică ==== | ||
{{:pm:prj2025:iotelea:schema_electrica_r_guceanupng.png?600|}} | {{:pm:prj2025:iotelea:schema_electrica_r_guceanupng.png?600|}} | ||
Line 96: | Line 101: | ||
| SPI.h | Comunicare SPI între Arduino și cardul microSD | | | SPI.h | Comunicare SPI între Arduino și cardul microSD | | ||
| SD.h | Citire/scriere fișiere pe card microSD | | | SD.h | Citire/scriere fișiere pe card microSD | | ||
- | + | | SHA256.h | Hash-uirea parolei pentru securitate sporită | | |
==== Arhitectura software ==== | ==== Arhitectura software ==== | ||
- Inițializare componente: | - Inițializare componente: | ||
Line 105: | Line 109: | ||
- Fiecare tastă apărută ca `*` pe LCD | - Fiecare tastă apărută ca `*` pe LCD | ||
- Generare hash simplificat | - Generare hash simplificat | ||
- | - Validare: | + | - Validare parolă: |
- | - Citirea fișierului `password.txt` de pe card SD | + | - Citirea fișierului ce conține hash-ul pentru parola corectă de pe card SD |
- Comparare hash-uri | - Comparare hash-uri | ||
- | - Acces respins sau test alcool | ||
- Test alcool MQ-3: | - Test alcool MQ-3: | ||
- Afișare mesaj „Ready? Start!” și countdown 5 → 1 | - Afișare mesaj „Ready? Start!” și countdown 5 → 1 | ||
Line 117: | Line 120: | ||
==== Funcții implementate ==== | ==== Funcții implementate ==== | ||
^ Funcție ^ Scop ^ | ^ Funcție ^ Scop ^ | ||
- | | simpleHash(String) | Generează un hash simplificat din parolă | | + | | sha256Hex(const char *msg, char *hexOut) | Generează un hash din parola | |
| addChar(char) | Adaugă o cifră în șirul parolei și o afișează cu `*` | | | addChar(char) | Adaugă o cifră în șirul parolei și o afișează cu `*` | | ||
| resetPasswordInput() | Resetează parola și reafișează „Enter Password” | | | resetPasswordInput() | Resetează parola și reafișează „Enter Password” | | ||
Line 127: | Line 130: | ||
* **Parolă presetată**: 1324 | * **Parolă presetată**: 1324 | ||
* **Număr maxim caractere**: 4 | * **Număr maxim caractere**: 4 | ||
- | * **Prag senzor MQ-3**: 475 (se stabilește prin testare) | + | * **Prag senzor MQ-3**: 325 (stabilit prin testare) |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | ===== Funcționalitate sistem ===== | + | ==== Funcționalitate sistem ==== |
În urma implementării și testării, sistemul este complet funcțional și reușește să îndeplinească toate cerințele propuse: | În urma implementării și testării, sistemul este complet funcțional și reușește să îndeplinească toate cerințele propuse: | ||
* Introducerea parolei de către utilizator prin tastatură fizică | * Introducerea parolei de către utilizator prin tastatură fizică | ||
* Afișarea feedback-ului vizual pe ecranul LCD (parolă, status, mesaje pentru ghidare) | * Afișarea feedback-ului vizual pe ecranul LCD (parolă, status, mesaje pentru ghidare) | ||
- | * Salvarea și citirea unui hash de parolă din fișierul `password.txt` de pe cardul microSD | + | * Salvarea și citirea unui hash al parolei corecte din fișierul de pe cardul microSD |
* Compararea corectă a parolei introduse cu hash-ul stocat | * Compararea corectă a parolei introduse cu hash-ul stocat | ||
* Emiterea de semnale sonore prin buzzer, în funcție de validare (parolă corectă/greșită) | * Emiterea de semnale sonore prin buzzer, în funcție de validare (parolă corectă/greșită) | ||
Line 148: | Line 151: | ||
* Am realizat mai multe suflări de test înainte și după expunerea la vapori de alcool | * Am realizat mai multe suflări de test înainte și după expunerea la vapori de alcool | ||
* Valorile obținute: | * Valorile obținute: | ||
- | * < 475 → interpretat ca **''test passed''** | + | * < 325 → interpretat ca **''test passed''** |
- | * ≥ 475 → interpretat ca **''test failed''** | + | * ≥ 325 → interpretat ca **''test failed''** |
==== Fiabilitate și comportament în timp ==== | ==== Fiabilitate și comportament în timp ==== | ||
* Sistemul este stabil, nu s-au observat blocaje sau comportamente neprevăzute în timpul utilizării normale | * Sistemul este stabil, nu s-au observat blocaje sau comportamente neprevăzute în timpul utilizării normale | ||
* LCD-ul și componentele răspund corect la comenzi | * LCD-ul și componentele răspund corect la comenzi | ||
- | * Fișierul `password.txt` este creat automat dacă lipsește | + | * Fișierul cu hash-ul parolei este creat automat dacă lipsește |
* Poate fi extins cu ușurință (ex: adăugarea de useri și a unui modul RFID, salvarea rezultatelor într-un log) | * Poate fi extins cu ușurință (ex: adăugarea de useri și a unui modul RFID, salvarea rezultatelor într-un log) | ||
Line 175: | Line 178: | ||
Sistemul s-a dovedit funcțional, stabil și extensibil. În plus, poate fi aplicat în contexte reale, precum: | Sistemul s-a dovedit funcțional, stabil și extensibil. În plus, poate fi aplicat în contexte reale, precum: | ||
- | * flote de închiriere auto, | + | * flote de închiriere auto sau orice sistem de car-sharing securizat |
- | * sisteme de car-sharing securizate, | + | * prevenirea, în general, a utilizării vehiculelor sub influența alcoolului. |
- | * prevenirea utilizării vehiculelor sub influența alcoolului. | + | |
Consider că obiectivele propuse au fost atinse integral, iar experiența acumulată va fi utilă în proiecte viitoare ce implică atenție la detalii, securitate și integrarea mai multor componente într-un sistem. | Consider că obiectivele propuse au fost atinse integral, iar experiența acumulată va fi utilă în proiecte viitoare ce implică atenție la detalii, securitate și integrarea mai multor componente într-un sistem. | ||
- | ===== Download ===== | + | ===== Cod sursă ===== |
- | + | [[https://github.com/ralucaguceanu/Sistem-de-acces-multi-nivel-pentru-soferi | GitHub Repository]] | |
- | <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> | + | |
Line 200: | Line 197: | ||
* [[https://www.handsontec.com/dataspecs/module/I2C_1602_LCD.pdf | Datasheet Ecran LCD]] | * [[https://www.handsontec.com/dataspecs/module/I2C_1602_LCD.pdf | Datasheet Ecran LCD]] | ||
* [[https://components101.com/modules/micro-sd-card-module-pinout-features-datasheet-alternatives | Datasheet Modul SD]] | * [[https://components101.com/modules/micro-sd-card-module-pinout-features-datasheet-alternatives | Datasheet Modul SD]] | ||
+ | * [[https://youtu.be/BiOh_Z2N7kk?si=Eql0kOE4Smfd4rU_ | Conectare tastatură]] | ||
==== Resurse software și hardware ==== | ==== Resurse software și hardware ==== | ||
* [[https://lastminuteengineers.com/mq3-alcohol-sensor-arduino-tutorial/ | Manual de referință pentru senzorul MQ-3]] | * [[https://lastminuteengineers.com/mq3-alcohol-sensor-arduino-tutorial/ | Manual de referință pentru senzorul MQ-3]] |