
Интернет-магазин «Неглупый Дом»
MQ-3 реагирует на пары этанола, аналоговое значение с датчика выводится на дисплей в реальном времени.
MQ-3 — полупроводниковый газовый датчик на основе диоксида олова (SnO2): при нагреве встроенной нитью накала чувствительный слой меняет своё электрическое сопротивление в присутствии паров этанола, и чем выше концентрация — тем сильнее падает сопротивление. Это изменение сопротивления схема датчика преобразует в аналоговое напряжение на выходе AO, которое Arduino считывает через АЦП как число от 0 до 1023.
Важная особенность всех MQ-датчиков: нити накала нужно время, чтобы выйти на рабочую температуру — сразу после подачи питания показания нестабильны и завышены. Обычно рекомендуют прогрев 1-2 минуты для разовых измерений и около суток непрерывной работы для действительно точной предварительной калибровки базовой линии (это не обязательно для развлекательного проекта, но стоит знать).
Датчик не избирателен исключительно к этанолу — он реагирует и на другие летучие органические пары (ацетон, некоторые растворители), поэтому результат стоит воспринимать как индикатор "в воздухе есть пары спирта", а не как точный измеритель промилле в крови.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int mq3Pin = A0; // аналоговый выход датчика MQ-3
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес 0x27 — самый частый, у некоторых плат 0x3F
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Progrev dvatchika");
delay(5000); // короткая пауза-напоминание, реальный прогрев дольше и идёт в фоне
lcd.clear();
}
void loop() {
int value = analogRead(mq3Pin); // 0-1023, условные единицы АЦП, не промилле
lcd.setCursor(0, 0);
lcd.print("Alcohol level:");
lcd.setCursor(0, 1);
lcd.print(value);
lcd.print(" "); // затираем хвост от предыдущего более длинного числа
Serial.print("Уровень (АЦП): ");
Serial.println(value);
delay(500);
}
Значение на экране — условные единицы АЦП (0-1023), а не промилле: без лабораторной калибровки под эталонный газоанализатор это развлекательный проект, а не сертифицированный прибор (см. подробности в статье про сам датчик).
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 370 ₽ 333 ₽ (экономия 37 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.