Alexandru NEGURĂ - Alcoolmetru/Etilotest
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Proiectul este destinat utilizarii personale pentru precautie inainte
de a executa actiuni ce necesita claritate mentala cat si atentie.
Alcoolmetrul va masura concentratia de alcool din aerul expirat(mg/L),
astfel determinand daca o persoana este apta pentru diferite activitati.
Descriere generală
Senzorul de alcool va masura informatiile din aer si le va trimite placii.
Placa va converti acea valoare folosind modulul ADC.
Apoi acea valoare va fi afisata pe:
LCD text, sub forma numerica + diferite mesaje de avertizare
6 LED-uri ce vor reprezenta intensitatea alcoolemiei
Buzzer ce va atentiona daca alcoolemia trece de valoarea maxima admisa.
Wifi ce va converti si trimite datele la un server cloud ce le va afisa online.
Hardware Design
Lista piese :
Software Design
Descrierea codului aplicaţiei (firmware):
mediu de dezvoltare
CLion facut sa mearga cu librariile AVR. (De mare ajutor)
BootLoaderHID pentru a incarca programul pe placuta
printre surse se pot mentiona:
lcd.c/.h pentru LCD-ul text, din cadrul laboratorului modificata pentru pinii nostrii
led.c/.h contine functii de initializare si aprindere/stingere leduri
buzzer.c/.h contine functii de initializare si de folosire a buzzerului
converter.c/.h un convertor ce transforma din double → string gasit pe internet (

aparent nu am reusit sa transfer date de tip %f nicaieri asa ca le-am convertit la %s si a mers

)
usart(*).c/.h biblioteca USART ce a venit la pachet odata cu:
wifi.c/.h o biblioteca gasita online pentru ESP8266 compatibil cu AVR (modificata putin ca sa o transform intr-un serviciu ce expune niste functii pe care sa apoi sa le folosesc separat)
adc.c/.h contine codul principal al aplicatiei. Pentru a primi info de la senzorul de alcool MQ3 am folosit un timer configurat pe 100ms care atunci cand “expira” face trigger la o conversie ADC. Pentru rezultatul conversiei am folosit interupt enable pentru ADC iar in rutina de tratare a acesteia am:
memorat rezultatu, adunat la un acumulator ce va face media unui numar de iteratii si il va transmite prin Wifi la un server online pentru vizualizare
va afisa pe LCD-ul text concentratia de alcool in mg/l din aerul expirat
va aprinde x / 6 leduri corespunzatoare concentratiei de alcool citite
va semnala un nivel foarte ridicat de alcoolemie printr-un sunet al buzzerului
Pentru formula de conversie de la semnalul primit pe pinul PA0 si valoarea in mg/L am folosit o formula gasita pe internet intr-o documentatie pe care nu o mai gasesc :)). Am tunat putin aceasta formula deoarece ea masura mult peste posibilitatile senzorului (care masoara un maxim de 0.4 mg/L in aerul expirat).
Daca am timp pana la PM fair doresc sa fac un “batch upload”. Serverul pe care il folosesc eu, Thingspeak, permite un update al datelor odata la 15 secunde. Mai bine zis primeste un singur request odata la 15 secunde ceea ce face aplicatia putin greu de urmarit si de vizualizat. Ceea ce vreau sa fac e ca la 15 secunde sa primeasca mai multe date din acel interval pentru o discretizare mai mare a valorilor.
P.S. pentru sunetul buzzerului am folosit pinul DO al MQ3 care se pune pe

0

atunci cand nivelul alcoolemiei creste suficient de mult. Acel pin ses pune pe 0 intern, nu de catre mine, ceea ce poate determina o masurare mai precisa. De asemenea e timpul sa te opresti din baut ca nu esti OK :)).
Rezultate Obţinute
A fost cea mai misto experienta de la PM. Semestrul a inceput greoi, laboratoarele de neinteles dar apoi dupa ce am primit acel MAGIC cheatsheet totul a fost clarificat si a inceput sa imi placa foarte mult ce am facut aici.
Cel mai greu lucru la acest proiect a fost sa construiesc acea casuta din lego. Experienta din copilarie cu aceste magnifice blocuri de jucarie a dat roade.
Concluzii
A fost o experienta de programare pe cinste. Ma bucur ca am invatat si ceva embedded in aceasta facultate si poate pe viitor ma voi juca in continuare si voi mai face separat alte mici proiecte, pentru amuzament.
Download
Bibliografie/Resurse