Датчик водорода MQ-8

Описание

Работа с легковоспламеняемыми газами очень опасна. Часто, утечку заметить тяжело, ведь многие из них не имеют запаха. А если даже имеют, то порой бывает уже поздно почувствовать запах. Может для достоверности стоит поручить задачу автоматике? Хотя бы как дублёру? Воспользуйтесь датчиком газа MQ-8, который хорошо обнаруживает концентрацию водорода (H2) в воздухе. Помимо водорода датчик обнаруживает в воздухе сжиженный природный газ (LPG), угарный газ (CO), метан (CH4), пары спирта (Alcohol).

Датчик является одним из популярных датчиков серии MQ. Обнаружение концентрации газов в датчике происходит за счёт измерения сопротивления чувствительного материала при взаимодействии газов с этим чувствительным материалом. Датчик обнаруживает концентрации углеводородных газов, паров спирта, пропана, метана, водорода и дыма примерно от 300 до 10000 миллионных долей (ppm - parts per million).

Для описания количества газа в воздухе чаще всего пользуются либо процентным соотношением газа или миллионными долями. К примеру, Сто миллионных долей дыма означает, что если мы разобьём весь объём воздуха на 1'000'000 частей, то 100 из этих частей будут являться частями дыма, а 999'900 частей какие-то другие газы.

Основным рабочим элементом датчика является нагревательный элемент, за счет которого происходит химическая реакция, в результате которой получается информация о концентрации газа. В процессе работы датчик должен нагреваться - это нормально. Также необходимо помнить, что за счет нагревательного элемента, датчик потребляет большой ток, поэтому рекомендуется использовать внешнее питание.

Перед началом использования рекомендуется прогреть датчик, т.е. оставить его включенным на сутки. Это поможет достичь стабильных показаний в процессе его дальнейшей работы.

Обратите внимание, что показания датчика подвержены влиянию температуры и влажности окружающего воздуха. Поэтому в случае использования датчика в изменяющейся среде, будет необходима компенсация этих параметров.

Питание нагревателя

Основным элементом датчика - является нагреватель, он же является и основным потребителем энергии. Ввиду этого, на плате предусмотрен вывод питания нагревателя. Таким образом, можно управлять нагревателем для экономии энергопотребления. Если же такой задачи не требуется, просто объедините выводы VDD и VH с помощью перемычки, и нагреватель будет запитан от сигнала +.

Технические характеристики

  • Напряжение питания: 5 В
  • Потребляемый ток: 150 мА
  • Время прогрева при включении: 1 мин

Физические размеры

  • Модуль (Д х Ш х В): 35 х 20 х 21 мм

Таблица значений параметров

Для получения значения концентрации газа (см. пример 2), нужно установить соответствующие значения А и В для объекта датчика.

Определяемый газ Значение А Значение В
Водород (H2) 976.97 -0.688
Сжиженный природный газ (LPG) 10000000 -3.123
Метан (CH4) 80000000000000 -6.666
Угарный газ (CO) 2000000000000000000 -8.074
Пары спирта (Alcohol) 76101 -1.86

Файлы для загрузки

Примеры подключения и использования

Пример 1. Концентрация газов

В примере демонстрируется подключение датчика и вывод полученных данных в монитор Serial - порта. Таким образом можно измерить значение концентрации газов в среде с присутствием газов и в среде с их отсутствием. После этого делать вывод о наличии газов.

Схема подключения:

Скетч для загрузки:

const int analogSignal = A0; // подключение сигналоьного вывода
 
int gasValue = 0; // переменная для хранения количества газа
 
void setup() {
  Serial.begin(9600); // инициализация Serial порта
 
}
 
void loop() {
  gasValue = analogRead(analogSignal); // чтение данных о количестве газа
 
  //вывод сообщения
  Serial.print("The gas value is ");
  Serial.println(gasValue);
 
  delay(1000); //задержка 1 с
}

Пример 2. Определение концентрации газа

В данном примере используется уже более сложная универсальная библиотека для работы со многими видами датчиков газа. В примере демонстрируется подключение датчика и вывод полученных данных по отдельным компонентам в монитор Serial - порта. Таким образом можно измерить значения для газов, которые описаны в Таблице значений параметров (в описании к этой статье). В данном примере будет измерена концентрация водорода (H2).

Схема подключения:

Скетч для загрузки:

#include <MQUnifiedsensor.h> // подключение библиотеки
 
#define         Board                   ("Arduino UNO") // имя контроллера
#define         Pin                     (A0)  // пин подключения контакта S датчика
#define         Type                    ("MQ-8") // тип датчика
#define         Voltage_Resolution      (5) // количество Вольт платы
#define         ADC_Bit_Resolution      (10) // разрешение АЦП (в битах) для плат UNO/MEGA/NANO
#define         RatioMQ8CleanAir        (70) //RS / R0 = 70 ppm 
 
 
MQUnifiedsensor MQ8(Board, Voltage_Resolution, ADC_Bit_Resolution, Pin, Type); // создание объекта датчика
 
 
void setup() {
 
  Serial.begin(9600); // инициализация последовательного порта
 
  // установка математической модели для вычисления концентрации газов в PPM
  // и константы для каждого из определяемых газов 
  MQ8.setRegressionMethod(1); //_PPM =  a*ratio^b
  MQ8.setA(976.97); // конфигурация значения А
  MQ8.setB(-0.688); // конфигурация значения В 
 
  MQ8.init(); 
  // калибровка датчика
  Serial.print("Calibrating please wait.");
  float calcR0 = 0;
  for(int i = 1; i<=10; i ++)
  {
    MQ8.update(); // обновление данных
    calcR0 += MQ8.calibrate(RatioMQ8CleanAir);
    Serial.print(".");
  }
  MQ8.setR0(calcR0/10);
  Serial.println("  done!.");
 
  if(isinf(calcR0)) {
    Serial.println("Warning: Conection issue founded, R0 is infite (Open circuit detected) please check your wiring and supply"); 
    while(1);
  }
  if(calcR0 == 0){
    Serial.println("Warning: Conection issue founded, R0 is zero (Analog pin with short circuit to ground) please check your wiring and supply"); 
    while(1);
  }
 
  MQ8.serialDebug(true); // вывод отладочных сообщений
}
 
void loop() {
  MQ8.update(); // обновление данных (чтение с аналогового порта)
  MQ8.readSensor(); // сенсор читает концентрацию, используя установленную модель и данные параметров А и В, установленные ранее
  MQ8.serialDebug(); // вывод отладочной таблицы в сериал порт
  delay(500); // задержка в 500 мс
}