4.5. Определение концентрации углеводородных газов с помощью датчика MQ-2
Одна из самых важных задач в вопросе безопасности умного дома –обнаружение утечки газа. Для того, чтобы плата 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 по ссылке .



1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33 

 

Вверх