FORUM

Precyzyjny Alkomat na czujniku MQ3

Odpowiedz

Emotikony
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode włączony
[Img] włączony
[Flash] wyłączony
[URL] włączony
Emotikony włączone

Przegląd tematu
   

Rozwiń widok Przegląd tematu: Precyzyjny Alkomat na czujniku MQ3

Precyzyjny Alkomat na czujniku MQ3

autor: WitekR » 04 lis 2021, 23:48

Precyzyjny Alkomat na czujniku MQ3

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.
Rys1.jpg
Rys1.jpg (12.85 KiB) Przejrzano 1175 razy
Do budowy układu 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ę.
Rys2.jpg
Rys2.jpg (13.49 KiB) Przejrzano 1173 razy
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.
Rys3.jpg
Rys3.jpg (19.37 KiB) Przejrzano 1171 razy
Odczyty z czujnika MQ3 będą wyświetlane za pomocą Arduino mega na wyświetlaczu OLED.

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.
Rys4.jpg
Rys4.jpg (16.01 KiB) Przejrzano 1170 razy
Podłącz wszystkie komponenty jak pokazano na schemacie poniżej.
Rys5.jpg
Rys5.jpg (12.52 KiB) Przejrzano 1169 razy
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.

Kod: Zaznacz cały


#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;

 }
alkomat_kod.zip
(1.22 KiB) Pobrany 125 razy
tabela przelicznik.jpg
tabela przelicznik.jpg (178.18 KiB) Przejrzano 1048 razy

Na górę