Table of Contents

Etilotest

Autor: Ghenescu Ștefan
Grupa: 322CA

Introducere

Proiectul este format dintr-un dispozitiv care masoara concentratia de alcool din aerul expirat. Sistemul foloseste un senzor de gaz sensibil la particulele de alcool si ofera user-ului feedback cu aceste valori. Pentru a porni testul, user-ul trebuie sa apese pe un buton, care va porni procesul de detectare. Apoi acesta va sufla pentru o anumita perioada de timp in aparat, durata fiind semnalizata de un buzzer, iar la final rezultatul este afisat pe ecran.

Scopul si utilitatea proiectului este de a ajuta la evitarea situatiilor in care o persoana conduce sub influenta alcoolului. Sistemul este o metoda rapida si usoara pentru aflarea starii soferului inainte de a pleca cu masina la drum.

Ideea proiectului a aparut din observatia ca, de multe ori, oamenii nu isi dau seama corect cat timp ramane alcoolul in corp. Un astfel de aparat care poate citi repede aceste valori poate ajuta la luarea unor decizii mai responsabile in legatura cu plecarea la drum.

Descriere generală

Proiectul are la baza un microcontrollerului ATmega328P-Xplained Mini, care gestioneaza toate etapele de functionare ale sistemului, de la citirea senzorilor pana la generarea semnalelor de iesire.

Senzorul MQ-3 este componenta principala care citeste de fapt concentratia de alcool din aerul expirat. Prin intermediul convertorului ADC, semalul analogic generat de senzor este citit de catre microcontroller pentru a fi apoi gestionat si afisat de catre LCD.

Butonul de start este folosit pentru inceperea testarii, fiind conectat printr-un pin GPIO. Odata apasat, sistemul porneste secventa de suflare si activeaza timerul care controleaza durata procesului.

Buzzerul este folosit pentru informarea inceputului si sfarsitului testarii, fiind conectat la un pin digital si oferind feedback sonor user-ului.

LED-urile (verde si rosu) sunt folosite pentru indicarea rezultatului testului, in functie de pragurile de alcool stabilite in cod.

Display-ul LCD este utilizat pentru afisarea pe tot parcursul testului a diferitelor informatii, comunicarea cu microcontrollerul realizandu-se prin interfata I2C. Pe ecran vor fi afisate mesaje precum “BLOW” in timpul suflarii, timpul ramas pana la finalul procedurii si valoarea citita de la senzor dupa finalizare.

Microfonul este utilizat pentru detectarea suflarii, asigurandu-se ca utilizatorul chiar sufla in timpul testului.

Hardware Design

Lista de piese

Schema electrica

View schematic

Software Design

Mediu de dezvoltare

Proiectul a fost facut folosind PlatformIO si framework-ul Arduino.

Biblioteci folosite

LiquidCrystal_I2C: biblioteca folosita pentru controlul display-ului LCD 1602 prin I2C. Cu ajutorul ei, am reusit sa scriu diferite mesaje pe ecran.
Wire: biblioteca folosita pentru comunicatia I2C intre microcontroller si modulul LCD.

Structura codului

Codul este structurat ca o masina de stari, acesta fiind scris in mare parte in functia principala loop().
Numarul de click-uri consecutive pe buton determina actiunea executata: 1-2 click-uri pornesc un test normal, 3 click-uri declanseaza calibrarea baseline (valoare senzor in aer curat), iar 4 click-uri declanseaza calibrarea cu alcool.

IDLE: aparatul asteapta apasarea butonului de start. Cand este detectata apasarea, se aplica un debounce de 50ms si apoi o a doua citire ca sa fiu sigur ca nu a fost o eroare, sau zgomot mecanic.

PREGATIRE: Se afiseaza un mesaj de pregatire timp de 2 secunde, iar apoi buzzerul emite un bip (200ms) pentru a semnaliza inceputul testarii.

SUFLARE: Timp de 5 secunde ADC-ul citeste senzorul de gaz la fiecare 100ms si retine valoarea maxima pe care o inregistreaza (peak). In paralel, verific daca modulul de microfon detecteaza suflare (semnal LOW activ). Daca nu este detectat zgomot cauzat de suflare timp de o secunda, utilizatorul este avertizat. Daca suflarea nu este reluata in urmatoarele 2 secunde, testul este anulat si sistemul revine in starea IDLE.

REZULTAT: Valoarea peak este convertita in mg/L si comparata cu LEGAL_THRESHOLD_MGL. In functie de rezultat, se aprinde LED-ul verde (sub prag) sau LED-ul rosu (peste prag), buzzerul emite un semnal sonor de avertizare in cazul depasirii, iar LCD-ul afiseaza rezultatul si valoarea masurata. Dupa 5 secunde, sistemul revine in starea IDLE.

Algoritm calibrare senzor

Sistemul implementeaza o calibrare in 2 etape. In prima etapa se masoara valoarea senzorului in aer curat, care reprezinta baseline-ul senzorului. In a doua etapa se masoara valoarea cu spirt pur langa senzor, din care se calculeaza coeficientul alcoholScaleFactor folosit in conversia in mg/L. Ambele etape fac media a 100 de citiri pentru a reduce zgomotul.

Conversia in mg/L
Conversia foloseste o functie power-law inspirata din curba RS/R0 din datasheet-ul senzorului de gaz MQ-3:
mgL = alcoholScaleFactor * (value / cleanAirValue - 1) ^ 1.6
Exponentul 1.6 aproximeaza neliniaritatea curbei senzorului, iar alcoholScaleFactor este calculat la calibrare astfel incat spirt pur sa corespunda la 1.5 mg/L. Valoarea rezultata este limitata la MAX_MGL = 2.5 mg/L pentru a preveni afisarea unor valori nerealiste.

Rezultate Obţinute


Video: Calibrare etilotest - aer curat
Video: Calibrare etilotest - alcool pur
Video: Testare aer curat - fara alcool
Video: Testare alcool
Video: Testare - nu se sufla

Concluzii

Prin acest proiect am invatat cum se integreaza mai multe componente intr-un sistem embedded functional, de la citirea unui senzor analogic pana la afisarea rezultatului pe LCD si oferirea de feedback sonor si vizual. Am observat ca lucrul cu senzori analogici nu este trivial, valorile brute necesitand calibrare si procesare inainte de a putea fi folosite. Mi-a placut ca la final am obtinut ceva concret si util, un dispozitiv care poate ajuta oamenii sa ia decizii mai responsabile inainte de a pleca la drum.

Download

Link Github
Arhiva cod

Bibliografie/Resurse

Export to PDF