СОДЕРЖАНИЕ ►
Датчик MQ-3 Arduino сможет определить концентрацию паров спирта (алкоголя) в воздухе. Поэтому на основе MQ-3 и LCD дисплея можно создать алкотестер (breathalyzer — название устройств для определения концентрации алкоголя в крови по выдыхаемому воздуху). Датчик паров спирта MQ-3 довольно просто подключить к микроконтроллеру и также легко написать прошивку для устройства на Ардуино.
Датчик паров спирта MQ-3 Ардуино

Сенсор MQ-3 — недорогой полупроводниковый прибор для измерения наличия паров спирта в воздухе при концентрации от 0,05 мг/л до 10 мг/л. Алкотестер на основе чувствительного элемента SnO2 использует химическую реакцию для определения уровня алкоголя. У этого сенсора в чистом низкая воздухе электропроводность, которая повышается линейно при росте концентрации паров алкоголя.
MQ-3 обладает высокой чувствительностью и защищен от помех, например, дыма и паров углеводородных газов. Аналоговый датчик имеет 4 вывода: питание VCC и земля Gnd, а также цифровой и аналоговый вывод. Для точных измерений необходимо достичь рабочей температуры при помощи встроенного нагревателя (около 40 градусов), подержав MQ-3 Arduino во включенном состоянии в течение 10 минут.
Схема алкотестера на Ардуино Уно своими руками
Для этого проекта потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- датчик паров спирта MQ-3;
- LCD дисплей 1602;
- провода «папа-мама», «папа-папа».

Соберите схему, как на картинке выше. Порты SDA и SCL у дисплея Ардуино подключаются к пинам A4 и A5 на Arduino Uno. Датчик необходимо подключить к 5V и GND, а аналоговый выход к пину A1. При первом включении датчика возможны посторонние запахи от MQ3 при его нагреве — это нормально. После сборки алкотестера на Ардуино, загрузите следующую простую программу для устройства.
Скетч алкотестера на Ардуино Уно с дисплеем
#include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // библиотека для LCD 1602 LiquidCrystal_I2C LCD(0x27,20,2); // присваиваем имя дисплею int mq3; void setup() { pinMode(A1, INPUT); // пин для подключения сенсора analogWrite(A1, LOW); Serial.begin(9600); // запускаем монитор порта LCD.init(); // инициализация дисплея LCD.backlight(); // включение подсветки } void loop() { mq3 = analogRead(A1); // считываем данные с порта A1 Serial.print("Alcohol: "); Serial.println(mq3); // выводим значение на монитор LCD.setCursor(0,0); // ставим курсор на 1 символ первой строки LCD.print("Alcohol: "); LCD.print(mq3); // выводим значение на дисплей delay(500); LCD.clear(); // очищаем экран дисплея }
Пояснения к коду:
- схема подключения дисплея к Arduino Mega будет отличаться, так как на этом микроконтроллере есть отдельные пины SDA, SCL;
- на дисплее будут отображаться значения с MQ3, обработанные АЦП (Аналогово Цифровым Преобразователем) микроконтроллера.
Датчик паров спирта MQ-3 «Troyka-модуль»

Используя аналоговый датчик MQ3 (пусть и с цифровым выходом) невозможно получить точные значения концентрации паров спирта в воздухе. Получится лишь грубое приближение к настоящим значениям, после длительной калибровки сенсора. Но используя цифровой датчик, например, от компании Амперка (Troyka-модуль) и библиотеку TroykaMQ.h можно узнать точную концентрацию газов в воздухе.
Схема алкотестера на Ардуино Нано с дисплеем

На данном датчике имеется две группы контактов. Первая группа — это питание и выходной сигнал, вторая группа служит для включения/выключения нагревателя. При замкнутой перемычке на плате MQ3, нагреватель находится всегда во включенном состоянии, поэтому вторая группа контактов не используется. После сборки схемы, согласно приведенной картинке, загрузите следующий код в Arduino Nano.
Скетч алкотестера на Ардуино Нано с дисплеем
#include <TroykaMQ.h> // библиотека для MQ датчиков #include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // библиотека для LCD 1602 LiquidCrystal_I2C LCD(0x27,20,2); // присваиваем имя дисплею MQ3 mq3(A1); void setup() { Serial.begin(9600); // запускаем монитор порта LCD.init(); // инициализация дисплея LCD.backlight(); // включение подсветки mq3.calibrate(); // калибровка датчика MQ3 } void loop() { Serial.print("Alcohol: "); Serial.print(mq3.readAlcoholMgL()); // выводим значение на монитор Serial.println(" mG/L"); Serial.print("Alcohol: "); Serial.print(mq3.readAlcoholPpm()); // выводим значение на монитор Serial.println(" ppm"); LCD.setCursor(0,0); LCD.print("Alcohol: "); LCD.print(mq3.readAlcoholMgL()); // выводим значение на дисплей LCD.print(" mG/L"); LCD.setCursor(0,1); LCD.print("Alcohol: "); LCD.print(mq3.readAlcoholPpm()); // выводим значение на дисплей LCD.print(" ppm"); delay(500); LCD.clear(); // очищаем экран дисплея }
Пояснения к коду:
- как и сенсор MQ-2 Arduino, датчик выводит информацию о концентрации паров спирта в долях на миллион (ppm), а также в миллиграммах на литр (mG/L);
- оба скетча будут работать на разных платах — Uno и Nano. Главное установить библиотеку TroykaMQ.h, которую можно скачать на нашем сайте здесь.
Заключение. Если дисплея 1602 у вас под рукой нет, то можете просто закомментировать или удалить ненужную часть кода. При этом информация с датчика MQ-3, подключенного к плате Arduino, будет выводиться только на монитор порта Arduino IDE. Если у вас остались вопросы по подключению или программированию MQ-3 сенсора для алкотестера на Arduino, оставляйте их в комментариях к этой записи.










Спасибо. Давно искал такой проект с готовой программой
Показывает в попугаях. Что нельзя было привязать в графику из даташита что бы показывал в мг/л?
комментарий к скетчу с TroykaMQ. первое слово alcohol: при выполнении куска кода
delay(500);
LCD.clear();
не моргает, в отличие от значений в mG, pp и второго слова alcohol:
зачем вообще очищать экран?
Первые значения выводятся в монитор порта Arduino IDE (дисплей тут и не должен ничего делать). Очищать экран надо, чтобы вывести новые значения на дисплей. Можете эти две строчки перенести вверх перед строчкой LCD.setCursor(0,0);
а где такой купить? нигде не могу найти.