Одна из самых важных задач в вопросе безопасности умного дома –обнаружение утечки газа. Для того, чтобы плата Arduino успешно решала задачи такого рода, нужно подключить к ней датчик газа MQ-2. Датчик MQ-2 (рис. 4.24) определит концентрацию углеводородных газов (пропан, метан, н-бутан), дыма (взвешенных частиц, являющихся результатом горения) и водорода в окружающей среде. Датчик можно использовать для обнаружения утечек газа и задымления. В газоанализатор встроенный нагревательный элемент, который необходим для химической реакции. Поэтому во время работы сенсор будет горячим. Для получения стабильных показаний новый сенсор необходимо один раз прогреть (оставить включенным) в течение 24 часов. После этого стабилизация после включения занимать около минуты.
Рис. 4.24. Датчик газов MQ-2.
В зависимости от уровня газа в атмосфере меняется внутреннее сопротивление датчика. MQ-2 имеет аналоговый выход, поэтому напряжение на этом выходе будет меняться пропорционально уровню газа в окружающей среде. Для определения по логическому уровню также имеется цифровой выход. На модуле датчика есть встроенный потенциометр, который позволяет настроить чувствительность этого датчика в зависимости от того, насколько точно вы хотите регистрировать уровень газа.
Теперь об единицах измерения. На территории бывшего Советского Союза, показатели принято измерять в процентах (%) или же непосредственно в массе к объему (мг/м3). В зарубежных странах применяет такой показатель как ppm.
Сокращение ppm расшифровывается как parts per million (частей на миллион). Например, 1 ppm = 0,0001%.
Диапазон измерений датчика:
• Пропан: 200–5000 ppm;
• Бутан: 300–5000 ppm;
• Метан: 500–20000 ppm;
• Водород: 300–5000 ppm.
Рассмотрим подключение датчика MQ-2 к плате Arduino Mega и модулю NodeMcu ESP8266.
4.5.1. Подключение датчика MQ-2 к плате Arduino Mega
Подключение датчика MQ-2 к плате Arduino Mega мы будем производить по аналоговому входу. Питание для датчика берем также с платы Arduino. Схема соединений представлена на рис. 4.25.
Рис. 4.25. Схема подключений датчика MQ-2 к плате Arduino Mega
Загрузим на плату Arduino Mega скетч получения данных с датчика MQ-2 и вывода в последовательный порт Arduino. Процедуры определения по данным, приходящим с аналогового входа:
• get_data_ppmpropan() – содержание пропана в ppm;
• get_data_ppmmethan() – содержание пропана в ppm;
• get_data_ppmsmoke() – содержание дыма.
Содержимое скетча представлено в листинге 4.10.
Листинг 4.10
// библиотека для работы с датчиками MQ
#include <TroykaMQ.h>
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// пин, к которому подключен датчик
#define MQ2PIN A10
// создаём объект для работы с датчиком
MQ2 mq2(MQ2PIN);
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup() {
// открываем последовательный порт
Serial.begin(9600);
// калибровка
mq2.calibrate();
mq2.getRo();
}
void loop() {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// получение данных c датчика mq2
float propan= get_data_ppmpropan();
// выводим значения газа в ppm
Serial.print("propan=");
Serial.print(propan);
Serial.println(" ppm ");
float methan= get_data_ppmmethan();
// выводим значения газа в ppm
Serial.print("methan=");
Serial.print(methan);
Serial.println(" ppm ");
float smoke= get_data_ppmsmoke();
// выводим значения газа в ppm
Serial.print("smoke=");
Serial.print(smoke);
Serial.println(" ppm ");
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных содержания пропана с датчика MQ2
float get_data_ppmpropan() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readLPG();
return value;
}
// получение данных содержания метана с датчика MQ2
float get_data_ppmmethan() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readMethane();
return value;
}
// получение данных содержания дыма с датчика MQ2
float get_data_ppmsmoke() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readSmoke();
return value;
}
Загрузим скетч на плату Arduino Mega, откроем монитор последовательного порта и увидите вывод данных о содержании пропана, метана и дыма (рис. 4.26).
Рис. 4.26. Вывод данных датчика MQ-2 в монитор последовательного порта.
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .
4.5.2. Подключение датчика MQ-2 к модулю NodeMcu ESP8266
Теперь рассмотрим подключение датчика MQ-2 к модулю NodeMcu ESP8266. Датчик MQ-2 подключаем к входу y2 мультиплексора. Для выбора аналогового входа мультиплексора используем контакты D5, D7, D8 модуля Node Mcu. Схема соединений представлена на рис. 4.27.
Рис. 4.27. Схема подключений датчика MQ-2 к NodeMcu ESP8266
Загрузим на модуль NodeMcu скетч получения данных с датчика MQ-2 и вывода в последовательный порт Arduino. Для выбора аналогового входа мультиплексора y2 подаем на контакты D5, D8 сигнал низкого уровня LOW, на контакт D7 сигнал высокого уровня HIGH.
Процедуры определения по данным, приходящим с аналогового входа:
• get_data_ppmpropan() – содержание пропана в ppm;
• get_data_ppmmethan() – содержание пропана в ppm;
• get_data_ppmsmoke() – содержание дыма.
Содержимое скетча представлено в листинге 4.11.
Листинг 4.11
// библиотека для работы с датчиками MQ
#include <TroykaMQ.h>
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// аналоговый пин
#define MQ2PIN A0
// создаём объект для работы с датчиком
MQ2 mq2(MQ2PIN);
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup() {
// входы подключения к мультиплексору D5, D7, D8 (GPIO 14, 13, 15)
// как OUTPUT
pinMode(14,OUTPUT);
pinMode(13,OUTPUT);
pinMode(15,OUTPUT);
// открываем последовательный порт
Serial.begin(9600);
// выбор входа мультиплексора CD4051 – y2 (010)
digitalWrite(14,LOW);
digitalWrite(13,HIGH);
digitalWrite(15,LOW);
// калибровка
mq2.calibrate();
mq2.getRo();
}
void loop() {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// выбор входа мультиплексора CD4051 – y2 (010)
digitalWrite(14,LOW);
digitalWrite(13,HIGH);
digitalWrite(15,LOW);
// получение данных c датчика mq2
float propan= get_data_ppmpropan();
// выводим значения газа в ppm
Serial.print("propan=");
Serial.print(propan);
Serial.println(" ppm ");
float methan= get_data_ppmmethan();
// выводим значения газа в ppm
Serial.print("methan=");
Serial.print(methan);
Serial.println(" ppm ");
float smoke= get_data_ppmsmoke();
// выводим значения газа в ppm
Serial.print("smoke=");
Serial.print(smoke);
Serial.println(" ppm ");
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных содержания пропана с датчика MQ2
float get_data_ppmpropan() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readLPG();
return value;
}
// получение данных содержания метана с датчика MQ2
float get_data_ppmmethan() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readMethane();
return value;
}
// получение данных содержания дыма с датчика MQ2
float get_data_ppmsmoke() {
Serial.println(mq2.readRatio());
// получение значения
float value=mq2.readSmoke();
return value;
}
Загрузим скетч на модуль Node Mcu, откроем монитор последовательного порта и видим вывод данных, получаемых с датчика MQ-2 (рис. 4.28).
Рис. 4.28. Вывод данных датчика MQ-2 в монитор последовательного порта.
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .