Serwisy partnerskie:
Close icon
Serwisy partnerskie

Alkomat Arduino wykorzystujący czujnik gazu MQ3 i wyświetlacz OLED

Article Image
Elmax
W tym projekcie przedstawimy jak zbudować alkomat przy użyciu czujnika gazu MQ3, wyświetlacza OLED i Arduino. Alkomat jest uogólnioną nazwą handlową dla urządzeń służących do określania zawartości alkoholu we krwi na podstawie próbki oddechu. Oznacza to, że urządzenie może wykryć na podstawie Twojego oddechu ilość alkoholu, którą zażyłeś. Za pomocą tego urządzenia można łatwo ostrzec kierowcę by nie próbował prowadzić samochód. Trzeba jednak zauważyć, że ten projekt nie gwarantuje wystarczającej dokładności, aby zastąpić standardowy alkomat.

Do tego projektu będziemy używać czujnika alkoholu MQ3. Jest to tani czujnik półprzewodnikowy zdolny do wykrywania obecności alkoholu w powietrzu w stężeniach od 0,05 mg/L do 10 mg/L. Czujnik wykorzystuje reakcję chemiczną do określenia poziomu alkoholu, a podstawowym elementem wykrywającym w czujniku jest SnO2, przewodność SnO2 jest niska w czystym powietrzu, ale wzrasta wraz ze wzrostem stężenia alkoholu w powietrzu (oddechu). Posiada wysoką czułość na alkohol i dobrą odporność na zakłócenia  powodowane przez  dym lub benzynę.

Czujnik alkoholu MQ-3

Moduł MQ3 ma 4 piny, w tym wyjścia cyfrowe i analogowe, VCC i Gnd. Moduł czujnika alkoholu MQ3 może być łatwo połączony z mikrokontrolerami i płytkami uruchomieniowymi, takimi jak Arduino Boards, Raspberry Pi itp.

Rozkład pinów czujnika alkoholu MQ-3

Odczyty z czujnika MQ3 będą wyświetlane za pomocą Arduino mega na wyświetlaczu OLED. Tutorial opisujący jak używać wyświetlacza OLED z arduino jest dostępny tutaj.

Czujnik MQ3 wykrywa alkohol w nieco kontrolowanym środowisku, w tym sensie, że czujnik wyczuwa alkohol tylko po podgrzaniu do określonego poziomu. Aby uzyskać dokładne wyniki, potrzebuje on od 10 do 15 minut po włączeniu zasilania, aby rozgrzać się do pożądanego poziomu temperatury, który zwykle wynosi około 40 stopni.

Rozgrzewanie

Podłącz wszystkie komponenty jak pokazano na schemacie poniżej.

Schemat podłączeniawyświtlacza i czeujnika do Arduino

Podłącz komponenty jak pokazano powyżej. Dla przejrzystości, połączenia pinów są również opisane poniżej.

MQ3 - Arduino
VCC
5v
GND
GND
A0
A0
OLED - Arduino
VCC
5v
GND
GND
SCL
SCL(Pin D21)
SDA
SDA(Pin D20)

Po wykonaniu wszystkich połączeń, jesteśmy gotowi do rozpoczęcia pisania kodu.

Kod

Jak zwykle, przed wrzuceniem całego kodu podzielimy go na części.

Pierwszą rzeczą, którą zrobimy jest włączenie funkcji, które są potrzebne, abyśmy mogli połączyć wyświetlacz OLED z Arduino. więcej informacji na temat działania wyświetlacza w tym projekcie można znaleźć tutaj.

//Written by Nick Koumaris
//info@educ8s.tv
//educ8s.tv

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Następnie wprowadzamy czas oczekiwania. Tutaj użyłem 900s, ale możesz go zmienić, aby dostosować do swoich potrzeb.

int TIME_UNTIL_WARMUP = 900;
unsigned long time;

Następnie deklarujemy pin analogowy, do którego podłączony jest nasz czujnik alkoholu, czyli Analog pin 0.

int analogPin = 0;

Kolejna ważna część po zadeklarowaniu pinu znajduje się w funkcji pętli, gdzie wywołujemy funkcję read alcohol, która podaje nam wartość analogową wyznaczoną przez czujnik alkoholu.

val = readAlcohol();

Z zapisaną wartością sprawdzamy, czy urządzenie jest ciepłe i wyświetlamy wartość analogową za pomocą funkcji print alcohol. Wyświetlamy również komunikat na podstawie poziomu analogowego, aby powiedzieć, czy osoba  testowana jest trzeźwa, czy nie.

if(time<=TIME_UNTIL_WARMUP)
 {
   time = map(time, 0, TIME_UNTIL_WARMUP, 0, 100);
   display.drawRect(10, 50, 110, 10, WHITE); //Empty Bar
   display.fillRect(10, 50, time,10,WHITE);
 }else
 {
    printTitle();
    printAlcohol(val);
    printAlcoholLevel(val);  
 }

Pełny kod tego projektu jest dostępny poniżej.

//Written by Nick Koumaris
//info@educ8s.tv
//educ8s.tv

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
int TIME_UNTIL_WARMUP = 900;
unsigned long time;


int analogPin = 0;
int val = 0;
Adafruit_SSD1306 display(OLED_RESET);


void setup()   {                

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 display.clearDisplay();
}


void loop() {  
  
  delay(100);

  val = readAlcohol();
  printTitle();
  printWarming();

  time = millis()/1000;
  
  if(time<=TIME_UNTIL_WARMUP)
  {
    time = map(time, 0, TIME_UNTIL_WARMUP, 0, 100);
    display.drawRect(10, 50, 110, 10, WHITE); //Empty Bar
    display.fillRect(10, 50, time,10,WHITE);
  }else
  {
     printTitle();
     printAlcohol(val);
     printAlcoholLevel(val);  
  }
  display.display();

}


void printTitle()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(22,0);
  display.println("Breath Analyzer");
}

void printWarming()
{
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,20);
  display.println("Warming up");
}

void printAlcohol(int value)
{
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(45,25);
  display.println(val);
}

void printAlcoholLevel(int value)
{
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10,55);
  
  if(value<200)
  {
      display.println("You are sober.");
  }
  if (value>=200 && value<280)
  {
      display.println("You had a beer.");
  }
  if (value>=280 && value<350)
  {
      display.println("Two or more beers.");
  }
  if (value>=350 && value <450)
  {
      display.println("I smell Oyzo!");
  }
  if(value>450)
  {
     display.println("You are drunk!");
  }
 }
 
 int readAlcohol()
 {
  int val = 0;
  int val1;
  int val2;
  int val3; 


  display.clearDisplay();
  val1 = analogRead(analogPin); 
  delay(10);
  val2 = analogRead(analogPin); 
  delay(10);
  val3 = analogRead(analogPin);
  
  val = (val1+val2+val3)/3;
  return val;
 }

Skopiuj kod, wklej do Arduino IDE i wgraj na swoją płytkę. Po czasie potrzebnym na rozgrzanie  powinieneś zobaczyć coś takiego jak na obrazku tytułowym. Kod Arduino jest dołączony w pliku zip na końcu projektu.

Wideo
Do pobrania
Download icon Program dla Arduino

Artykuł ARDUINO BREATHALYZER USING MQ3 GAS SENSOR AND OLED DISPLAY opracowano w wersji polskiej na podstawie współpracy z portalem www.electronics-lab.com.

Firma:
AUTOR
Źródło
www.electronics-lab.com
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Edukacja
1/10 Jak działa rezystor LDR?
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"