Alcoololmetru

Nume: Staicu Matei
Grupa: 336CB

Introducere

Proiectul consta intr-un etilotest bazat pe platforma Arduino, care va fi capabil sa masoare concentratia de alcool din aerul expirat si va afisa diverse masuratori pe ecranul digital, dar va putea emite si sunete, in functie de concentratia inregistrata. Scopul proiectului este de a estima concentratia de alcool din aerul expirat si va fi util spre exemplu soferilor, care vor afla daca se pot urca in siguranta la volan si, de asemenea, o estimare a timpului necesar pentru a intra in legalitate. Ideea a pornit de la situatiile cand, dupa consumarea de bauturi alcoolice, ai nevoie sa te deplasezi undeva cu masina si nu stii exact daca sau dupa cat timp esti in legalitate, ceea ce este important intr-o tara cum este Romania, unde concentratia maxima legala este 0mg/L.

Descriere generală

Aparatul va masura pe baza senzorului MQ3 concentratia de alcool din aerul expirat si, pe baza unei formule matematice, va afisa concentratia si nivelul de intoxicare pe ecranul LCD, riscul de a face accident, timpul pana la intrarea in legalitate etc. De asemenea, in functie de rezultat, va emite si un sunet. Toate aceste date vor fi bazate si pe input de la utilizator, precum varsta, gen, greutate cu ajutorul unor potentiometre.

Hardware Design

alcoololmetru.jpg Lista de piese:

  1. Arduino Uno
  2. Buzzer
  3. Senzor MQ-3
  4. Ecran LCD
  5. 2x Potentiometru
  6. 2x Buton
  7. Breadboard
  8. Rezistente
  9. Cabluri

Ecranul este montat direct intr-un colt al breadboardului pentru ca este mai usor de urmarit daca este fix. Pe breadboard mai este montat buzzerul, butonul de reset (cel rosu), dar si cel utilizat pentru navigarea prin informatiile oferite de arduino pe ecran (cel verde). Potentiometrele sunt conectate la breadboard si arduino prin niste cabluri putin mai lungi, pentru ca fixarea acestora pe breadboard ar fi facut accesul la acestea, dar si la celelalte componente destul de dificil. Senzorul MQ-3 am ales sa il fixez tot pe breadboard pentru a fi cat mai stabil posibil, dar si o conexiune cat mai buna. Am incercat sa compensez utilizarea mai greoaie prin utilizarea unui cablu de conectare la laptop mai lung, dar si fixarea componentelor impreuna, pe cat posibil. In asamblarea componentelor, am utilizat o rezistenta de 220 Ohmi pentru ecranul LCD, dar si alte 3 rezistente pentru buzzer si cele doua butoane.

Software Design

Pentru dezvoltarea codului am folosit Arduino IDE, versiunea 1.8.19.

In prima parte a codului am importat biblioteca LiquidCrystal, utilizata pentru manipularea ecranului LCD. Ca o paranteza, acesta foloseste SPI, nu este varianta I2C. Tot in prima parte a codului sunt toate constantele pe care le-am folosit pe parcursul implementarii (am incercat sa evit pe cat posibil hardcodari pentru a fi cat mai usor de modificat), dar si cateva variabile globale.
In continuare, la setup, se vor apela doua functii. Prima functie este cea de warmup, care va permite etilotestului sa se incalzeasca pentru 30 de secunde (in special pentru a se stabiliza senzorul MQ-3) si va afisa un mesaj pe LCD. Cea de-a doua functie este cea de initialState(), care va afisa un mesaj cum ca etilotestul este gata.

In functia de loop(), sunt implementate functionalitatile in functie de inputul de la butoane si potentiometre. Daca se apasa butonul de reset (cel rosu), se va apela functia de initialState(). Pentru celalalt buton, la prima apasare se va permite inputul pentru varsta si sex, cu ajutorul potentiometrelor (folosind ADC), in functia de measureInput(). La a doua apasare, se va masura concentratia de alcool cu ajutorul senzorului MQ-3, prin masurari succesive intr-un interval de 5 secunde, se va face media acestor masuratori si se va afisa pe ecran. In sfarsit, la urmatoarea apasare de buton, se vor calcula timpul pana cand utilizatorul se va putea urca in siguranta la volan, dar si riscul de a face un accident daca utilizatorul se urca la volan in acel moment. Daca concentratia este peste limita, buzzerul va fi activat. La urmatoarele apasari de buton, se va face switch intre concentratie si timpul necesar/riscul de accident. Am folosit un delay de 0.1 secunde in functia de loop() pentru a asigura precizia la trecerea prin meniuri si a nu sari din greseala peste unul dintre ele la o singura apasare de buton.

Au fost folosite mesaje prin interfata seriala, in scop de debug. Formulele folosite in cadrul proiectului pentru diversele calcule sunt aproximative si pot avea erori destul de mari, fiind multi factori implicati in masurarea concentratiei de alcool in aerul expirat, dar si precizia senzorului poate fi destul de mica.

Concentratia = valoareMQ3 * (voltajReferinta / 1023) * senzitivitate * factorVarsta * factorGen, unde

  1. valoareMQ3 = valoarea inregistrata de senzor
  2. voltajReferinta = 5
  3. senzitivitate = 0.15
  4. factorVarsta = 0.9, daca varsta este pana in 25 de ani
  5. factorGen = 0.95 pentru barbati si 1.05 pentru femei


Timpul de asteptare = concentratie / rataEliminareAlcool, unde

  1. rataEliminare = 0.16 pentru barbati si 0.12 pentru femei


Nota: Desi in legislatia din Romania nu este permisa o concentratie de alcool mai mare de 0, eu am folosit in implementare o limita de 0.2 mg/L, pentru ca senzorul si formula nu sunt foarte precise, dar exista si alte tari care au limita mai mare decat 0.

Rezultate Obţinute

alcoololmetruwarmup.jpg alcoololmetruready.jpg alcoololmetruinput.jpg alcoololmetrumeasuring.jpg alcoololmetruconcentration.jpg alcoololmetrutimerisk.jpg

Concluzii

Acesta a fost primul proiect Arduino facut de la 0 de mine. A fost foarte interesant si mult mai usor de realizat decat mi-am imaginat. Nu am intampinat probleme majore cu componentele, asamblarea fiind putin mai complicata pe alocuri, in special din cauza cablurilor care nu stateau conectate cum trebuie/nu faceau contact. Din pacate, singura dezamagire este faptul ca nu am reusit sa gasesc o formula suficient de precisa pentru calculul concentratiei, ce-i drept fiind si foarte multi factori implicati in aceasta masuratoare.
Nota: nu s-a consumat alcool pentru testarea acestui proiect. :)

Download

Jurnal

03.05.2023: Alegerea temei
05.05.2023: Crearea paginii pe ocw si adaugarea unei descrieri generale si a listei de componente necesare
16.05.2023: Sosirea pieselor
20.05.2023: Conectarea pieselor
21.05.2023: Testarea componentelor si actualizarea paginii de ocw cu sectiunea Hardware Design
28.06.2023: Realizarea software-ului
29.06.2023: Finalizarea paginii de ocw si o testare finala

Bibliografie/Resurse

pm/prj2023/iotelea/alcoololmetru.txt · Last modified: 2023/05/29 21:52 by matei.staicu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0