Alcooltest

Introducere

Proiectul constă în realizarea unui alcooltest cu ajutorul unui senzor de vapori de alcool și a unei plăci Arduino UNO pentru a măsura alcoolemia din respirație.

Scopul acestui proiect este de a afișa corect alcoolemia detectată din vaporii de alcool ce intră în senzor și de a informa utilizatorul prin sunete/culoarea LED-urilor dacă valoarea este una îngrijorătoare sau dacă este una normală.

Am avut această idee deoarece, în ultimul timp, avem de-a face cu din ce în ce mai multe accidente rutiere din cauza condusului sub influența alcoolului. De aceea, am decis să creez un alcooltest care îți va indica dacă este sigur să te urci la volan în cazul în care ai consumat alcool la un moment dat în zi.

Descriere generală

Schema bloc

Hardware Design

Piese

Arduino UNO R3

  • Cu microcontroller ATmega 328p

Breadboard

Senzor detectie alcool MQ-3

  • Tensiune alimentare: 5VDC, 150mA
  • Va capta vaporii de alcool, valoare ce va fi afisata pe ecranul LCD

LED-uri

  • LED verde pentru a determina o alcoolemie in regula
  • LED rosu pentru a semnala o alcoolemie peste limite

Ecran LCD 1602

  • Comunica prin interfata I2C
  • Pe acest ercan se va afisa alcoolemia detectata de senzor
  • Tensiunea de alimentare: 5V

Modul interfata I2C pentru LCD 1602 Modul cu buzzer

  • Tensiune de alimentare: 3.3 V - 5 V
  • Va emite un sunet de alerta in cazul unei alcoolemii peste limita

Fire

  • Mama-Tata, Tata-Tata, Mama-Mama

Rezistente

  • Pentru LED-uri
  • 220 Ω, 100 Ω

Pushbutton

  • Cand acesta va fi apasat se va produce o intrerupere
  • Apasarea acestui buton va porni/opri masurarea

Condensator

  • Pentru a evita detectarea unor intreruperi “false” de la buton

Schema electrica

Pini

  • La senzorul de alcool MQ-3 am folosit pin-ul A0 pentru semnal analogic ce va intra in pin-ul A0 de pe Arduino, iar alimentarea va fi la 5V.
  • Pentru ecranul LCD am conectat pinii SCL si SDA de pe modulul I2C lipit la ecran, la pinii de SCL si respectiv SDA de pe Arduino, iar alimentarea la 5V.
  • Modulul cu Buzzer va avea pin-ul de I/O conectat la pin-ul 8 de pe Arduino, pentru semnal digital si alimentarea la 5V.
  • LED-urile vor avea anodul conectat la pinii 3 si 4 de pe Arduino pentru semnal digital.

Asamblare

  • Am testat initial senzorul cu spirt pentru a vedea ce valori detecteaza acesta si de asemenea l-am calibrat lasandu-l peste un pahar cu putin spirt pana tot alcoolul s-a evaporat pentru a vedea ce valori ia acesta si cat de mult scad pe masura ce trece timpul
  • Se poate vedea ca este aprins si LED-ul verde de pe spatele senzorului MQ-3 care arata ca s-a detectat alcoolul, dar si LED-ul verde montat de mine care se aprindea atunci cand era detectata o alcoolemie destul de mare (doar pentru testare, in varianta finala LED-ul verde va arata ca alcoolemia este ok.

  • Am lipit cu ciocanul de lipit modulul I2C de ecranul LCD 1602 pentru a il putea conecta la Arduino

  • Componentele sunt montate si functionale, dupa cum se poate vedea in poza de mai jos este afisata alcoolemia captata de senzor si un status pe ecran.
  • Pe parte hardware merge totul ok, insa mai sunt necesare adjustari ale design-ului.
  • Ramane sa schimb LED-ul albastru cu unul rosu cum am descris si in schemele circuitului, dar momentan doar pe acesta l-am avut.

Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare: Arduino IDE
  • Librarii folosite: LiquidCrystal_I2C.h, Wire.h

Repository GitHub

Demo video proiect

Functia setup()

  • Se seteaza baud rate-ul la 9600 pentru comunicarea cu seriala
  • Se seteaza pinii pentru LED-ul rosu si cel verde dar si pentru buzzer ca pini de output
  • Se seteaza pinii pentru senzorul de alcool MQ-3 si cel pentru buton ca pini de input
  • Se activeaza rezistenta de pull-up pe pinul pentru buton
  • Se initializeaza ecranul LCD si se afiseaza un scurt mesaj “Warming up …” pentru a lasa putin senzorul sa se incalzeasca inainte de pornirea testarii.
  • Dupa incalzirea senzorului se apeleaza functia “startPrint()” ce afiseaza pe LCD titlul proiectului “ALCOHOLTEST” si apoi un mesaj “Press button to start!” asteptand apasarea butonului.
  • Se activeaza intreruperea pe buton

Rutina de intrerupere pentru buton

  • Va nega variabila pentru masurarea alcoolului, care se va face true atunci cand se va apasa butonul pentru a porni masurarea si in false cand se apasa butonul pentru oprire ca sa nu se mai afiseze valoarea si status-ul pe ecran.
  • De asemenea, in functie de scopul apasarii butonului (start/stop masurare) se va seta o variabila dedicata unuia din cazuri pe true pentru a putea stii ce “loading screen” sa se afiseze pe ecran in cele ce urmeaza.

Loading screens

  • Daca butonul a fost apasat pentru start pe ecran va sta pentru 2 secunde mesajul “Starting measurement …” ca apoi sa se afiseze masuratorile pe ecran
  • Daca butonul a fost apasat pentru oprirea masurarii se va afisa pentru 10 secunde mesajul “Stopping measurement …” si apoi se va reveni la ecranul de inceput default ce asteapta apasarea butonului de start msaurare “Press button to start!”

Functia loop()

  • Se citeste atat valorea digitala (pentru a vedea daca senzorul a considerat ca s-a detectat alcool) cat si cea analog de la senzorul de alcool (pentru afisarea valorilor pe LCD), iar apoi daca a fost setata variabila de masurare alcool pe true, din rutina de intrerupere a butonului, in functie de valoarea digitala, daca s-a detctat sau nu alcool se va calcula cu o formula valorea in “ppm”.
  • Cat timp nu s-a detectat alcoolul LED-ul verde va sta aprins
  • Cat timp este detectat alcoolul se va auzi un sunet de alerta intermitent pe buzzer si se vor aprinde intermitent LED-ul verde si cel rosu

Rezultate Obţinute

* Alcooltestul detecteaza cu succes prezenta alcoolului notificand utilizatorul prin sunete pe buzzer si luminarea intermitenta a LED-urilor. De asemenea, pe LCD este afisata constant valoarea din aer a alcoolului in unitatea de masura “ppm” (parts per million) si statusul “No alcohol”/“Alcohol detected”.

* De asemenea, acuratetetea testarii depinde si de cat de incalzit este senzorul deoarece pe masura ce este mai incalzit acesta devine mai sensibil la vaporii de alcool oferind rezultate mai precise.

Concluzii

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Resurse hardware

Resurse software

pm/prj2024/vstoica/andrei.vasilescu02.txt · Last modified: 2024/05/26 18:10 by andrei.vasilescu02
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