Датчик углекислого газа MQ-135

Описание

Вам нужно оценить качество воздуха? Воспользуйтесь датчиком газа MQ135, который хорошо обнаруживает концентрацию углекислого газа (CO2) в воздухе. Помимо углекислого газа датчик обнаруживает в воздухе угарный газ (CO), ацетон, аммоний, спирт (Alcohol), пыль, дым.

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

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

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

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

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

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

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

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

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

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

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

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

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

Определяемый газ Значение А Значение В
Углекислый газ (CO2) 110.47 -2.862
Пары толуола 44.947 -3.445
Угарный газ (CO) 605.18 -3.937
Пары спирта (Alcohol) 77.255 -3.18
Аммоний (NH4) 102.2 -2.473
Ацетон 34.668 -3.369

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

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

Пример 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 - порта.

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

Для повышения точности измерений датчиком

воспользуйтесь этими советами

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

#include "MQ135.h" // подключение библиотеки
#define MQ135PIN A0    // вывод контроллера к которому подключен датчик
#define RZERO 251.63    // определение значения коррекции вычислений
 
MQ135 gasSensor = MQ135(MQ135PIN); // инициализация объекта датчика
 
void setup()
{
  Serial.begin(9600); // инициализация последовательного соединения
}
 
void loop() {
 
  float ppm = gasSensor.getPPM(); // получение значения концентрации углекислого газа от датчика
  delay(1000); // задержка в 1 сек
  Serial.print("CO2 ppm value : "); // вывод поясняющей надписи
  Serial.println(ppm); // вывод значения в монитор порта
 
}

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

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

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

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

#include <MQUnifiedsensor.h> // подключение библиотеки
 
#define         Board                   ("Arduino UNO") // имя контроллера
#define         Pin                     (A0)  // пин подключения контакта S датчика
#define         Type                    ("MQ-135") // тип датчика
#define         Voltage_Resolution      (5) // количество Вольт платы
#define         ADC_Bit_Resolution      (10) // разрешение АЦП (в битах) для плат UNO/MEGA/NANO
#define         RatioMQ135CleanAir      (3.6) //RS / R0 = 3.6 ppm 
 
 
MQUnifiedsensor MQ135(Board, Voltage_Resolution, ADC_Bit_Resolution, Pin, Type); // создание объекта датчика
 
 
void setup() {
 
  Serial.begin(9600); // инициализация последовательного порта
 
  // установка математической модели для вычисления концентрации газов в PPM
  // и константы для каждого из определяемых газов 
  MQ135.setRegressionMethod(1); //_PPM =  a*ratio^b
  MQ135.setA(102.2); // конфигурация значения А
  MQ135.setB(-2.473); // конфигурация значения В 
 
  MQ135.init(); 
  // калибровка датчика
  Serial.print("Calibrating please wait.");
  float calcR0 = 0;
  for(int i = 1; i<=10; i ++)
  {
    MQ135.update(); // обновление данных
    calcR0 += MQ135.calibrate(RatioMQ135CleanAir);
    Serial.print(".");
  }
  MQ135.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);
  }
 
  MQ135.serialDebug(true); // вывод отладочных сообщений
}
 
void loop() {
  MQ135.update(); // обновление данных (чтение с аналогового порта)
  MQ135.readSensor(); // сенсор читает концентрацию, используя установленную модель и данные параметров А и В, установленные ранее
  MQ135.serialDebug(); // вывод отладочной таблицы в сериал порт
  delay(500); // задержка в 500 мс
}