Proiectul presupune un sistem cu 2 functionalitati principale:
1. Masurarea cantitatii de alcool din aerul expirat
2. Salvarea si vizualizarea masuratorilor precedente
La pornire, utilizatorul are 2 optiuni: sa apese butonul rosu pentru a citi de pe cardul SD atasat masuratorile anterioare (la fiecare apasare a butonului rosu se va afisa urmatoarea masuratoare din lista salvata pe card) sau sa apese butonul albastru pentru inceperea unei noi masuratori. Odata apasat butonul albastru, vor fi primite date de la senzorului MQ-3 timp de 5 secunde si va fi memorata doar valoarea cea mai mare. La expirarea timpului buzzerul va scoate un sunet scurt, dupa care se va afisa pe ecranul LCD rezultatul masuratorii si se vor aprinde LED-urile corespunzator: verde daca nu a fost detectat alcool, sau rosu in caz contrar. Dupa afisarea rezultatului masuratorii, daca este apasat butonul rosu rezultatul va fi salvat in cardul SD, iar daca va fi apasat butonul albastru se va reveni la ecranul default, de unde se pot vedea masuratorile anterioare sau se poate porni o masuratoare noua.
Etilotestul este un aparat util, ce poate fi folosit de fiecare data inainte de a urca la volan pentru a ne asigura ca suntem in legalitate. Acesta este folositor in special in diminetile de dupa petreceri cand o persoana trebuie sa plece acasa, dar nu este sigura daca efectul alcoolului a trecut. Prin folosiera acestui aparat se poate urca la volan linistit sau, dupa caz, mai asteapta o perioada de timp inaintea repetarii testului. Acest comportament este de dorit deoarece ajuta atat soferii sa evite situatiile neplacute in care le poate fi permisul suspendat, cat si societatea, reducand numarul de persoane care conduc sub influenta alcoolului.
Celulele gri reprezinta dispozitive de intrare ce trimit date catre μC.
Celulele portocalii reprezinta iesirile:
Pentru dezvoltare am folosit Arduino IDE impreuna cu urmatoarele biblioteci:
In functia setup() declar pinii ca pini de output/input, dupa caz, initializez ecranul lcd si cardul SD si creez/deschid fisierul pentru a stoca masuratorile.
In functia loop() se afla logica pentru 'homepage', unde utilizatorul poate apasa butonul rosu pentru a citi masuratorile existente pe cardul SD, sau butonul albastru pentru a incepe o noua masuratoare. In functia measureAlcohol este logica pentru masuratoare. Flow-ul este in modul urmator:
Functiile de manipulare a cardului SD, anume InitializeSD, createFile, openFile, closeFile, readLine sunt luate din urmatorul tutorial: https://educ8s.tv/arduino-sd-card-tutorial/, fiind aduse mici modificari asupra acestora.
Am reusit sa implementez etilotestul si acesta functioneaza cum mi-am dorit. Ar mai trebui facuta transformarea valorii primite de la senzor in mg alcool/litru aer expirat, lucru pe care as vrea sa il fac in viitor. O problema pe care inca o am ar fi durata mare necesara senzorului MQ3 pentru a reveni la base value, mai ales dupa o masurare in care se detecteaza cantitati mari de alcool. In principiu, valorile intoarse de senzor ar fi:
Base value-ul pe care l-am detectat ar fi aproximativ 77, dar dureaza foarte mult sa revina la aceasta valoare o data ce a fost detectat alcool.
Proiectul a fost foarte placut si foarte satisfacator la final, o data ce am reusit sa faca totul sa mearga. A fost foarte amuzant si sa il testez, mai ales pentru a afla ce valori returneaza senzorul in prezenta alcoolului
Testare functionalitate: https://www.youtube.com/shorts/ktZ3uBsFENs
Resurse Hardware:
Resurse Software: