This shows you the differences between two versions of the page.
pm:prj2025:iotelea:raluca.guceanu [2025/05/26 21:38] raluca.guceanu [Listă de piese] |
pm:prj2025:iotelea:raluca.guceanu [2025/05/30 03:20] (current) raluca.guceanu [Concluzii] |
||
---|---|---|---|
Line 3: | Line 3: | ||
Autor: **Raluca-Zinca-Ioana Guceanu** \\ | Autor: **Raluca-Zinca-Ioana Guceanu** \\ | ||
Grupa: **331CD** \\ | Grupa: **331CD** \\ | ||
- | GitHub: | + | GitHub: https://github.com/ralucaguceanu/Sistem-de-acces-multi-nivel-pentru-soferi |
===== Introducere ===== | ===== Introducere ===== | ||
Line 47: | 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 101: | 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 110: | 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 122: | 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 132: | 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) |
Line 142: | Line 140: | ||
* 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 153: | 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 180: | 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> | + | |