Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
main:sensors:mq135 [2020/03/30 11:47]
smartadmin ↷ Страница перемещена из main:датчики:mq135 в main:sensors:mq135
main:sensors:mq135 [2021/02/17 10:26] (текущий)
smartadmin [Пример 3. Определение концентрации газа]
Строка 1: Строка 1:
-====== ​Модуль датчика газа MQ-135 ======+====== ​Датчик ​углекислого ​газа MQ-135 ======
 ===== Описание ===== ===== Описание =====
-Универсальный датчик,​ обнаруживающий в воздухе ​бензол,​ спирт, пыль, дымАналого - цифровой ​модуль позволяет как получать данные о содержании газов к которым восприимчив ​газоанализатор, так и работать напрямую с устройствами,​ выдавая цифровой сигнал о превышении/уменьшении ​порогового значения. Имеет регулятор чувствительности, что ​позволяет подстраивать датчик ​под нужды конкретного проекта. Модуль имеет два светодиодапервый (красный) - индикация питаниявторой (зеленый) - индикация превышения/уменьшения порогового значения.+Вам нужно оценить качество воздуха? Воспользуйтесь ​датчиком газа MQ135который хорошо ​обнаруживает концентрацию углекислого газа (CO2) в воздухе. ​Помимо углекислого газа датчик обнаруживает в воздухе угарный газ ​(CO), ацетон, аммоний, ​спирт (Alcohol), пыль, дым
 + 
 +Датчик является ​одним из популярных датчиков серии MQ. Обнаружение ​концентрации газов в датчике происходит ​за счёт измерения сопротивления ​чувствительного материала ​при взаимодействии газов с этим чувствительным материалом. Датчик обнаруживает ​концентрации углеводородных ​газов, паров спирта, пропана, ​метана, водорода ​и дыма ​примерно от 300 до 10000 миллионных долей (ppm - parts per million). 
 + 
 +Для описания ​количества газа в воздухе чаще всего пользуются либо процентным соотношением газа или миллионными долями. К примеру, Сто миллионных долей дыма означает, что если мы разобьём ​весь ​объём воздуха ​на 1'​000'​000 ​частей, то 100 из этих частей будут ​являться частями дыма, а 999'​900 частей какие-то другие газы.
  
 Основным рабочим элементом датчика является нагревательный элемент,​ за счет которого происходит химическая реакция,​ в результате которой получается информация о концентрации газа. В процессе работы датчик должен нагреваться - это нормально. Также необходимо помнить,​ что за счет нагревательного элемента,​ датчик потребляет большой ток, поэтому рекомендуется использовать внешнее питание. Основным рабочим элементом датчика является нагревательный элемент,​ за счет которого происходит химическая реакция,​ в результате которой получается информация о концентрации газа. В процессе работы датчик должен нагреваться - это нормально. Также необходимо помнить,​ что за счет нагревательного элемента,​ датчик потребляет большой ток, поэтому рекомендуется использовать внешнее питание.
Строка 9: Строка 13:
 Обратите внимание,​ что показания датчика подвержены влиянию температуры и влажности окружающего воздуха. Поэтому в случае использования датчика в изменяющейся среде, будет необходима компенсация этих параметров. Обратите внимание,​ что показания датчика подвержены влиянию температуры и влажности окружающего воздуха. Поэтому в случае использования датчика в изменяющейся среде, будет необходима компенсация этих параметров.
  
-Диапазон измерений: 0,001 - 0,1 % +==== Питание нагревателя ==== 
 +Основным элементом датчика - является нагреватель,​ он же является и основным ​потребителем энергии. Ввиду этого, на плате предусмотрен вывод питания нагревателя. Таким образом, можно управлять нагревателем для экономии энергопотребления. Если же такой задачи не требуетсяпросто объедините выводы VDD и VH с помощью перемычкии нагреватель будет запитан от сигнала +.
 ==== Технические характеристики ==== ==== Технические характеристики ====
   * Напряжение питания:​ 5 В   * Напряжение питания:​ 5 В
Строка 19: Строка 23:
   * Модуль (Д х Ш х В): 35 х 20 х 21 мм   * Модуль (Д х Ш х В): 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 ​ |
  
-==== Минусы использования ==== 
-  * Перед использованием требует долгого прогрева (не менее 24 часов) 
-  * Для снятия показаний требуется прогрев (не менее 1 минуты) 
-  * Высокое энергопотребление (желательно дополнительное питание) 
  
-===== Пример подключения и использования ===== +==== Файлы для загрузки ==== 
-В примере демонстрируется подключение датчика и вывод полученных данных в монитор Serial - порта. ​ример тестировался на контроллере Smart UNO)+  * [[http://​files.smartelements.ru/​know_libs/​MQ135.zip|Скачать библиотеку (MQ135)]] 
 +  * [[http://​files.smartelements.ru/​know_libs/​MQUnifiedsensor.zip|Скачать библиотеку (MQUnifiedsensor)]] 
 +  * [[http://​files.smartelements.ru/​datasheet/​MQ135.pdf|Скачать даташит на датчик MQ135]] 
 + 
 + 
 + 
 + 
 +===== Примеры подключения и использования ===== 
 +==== Пример 1. Концентрация газов ==== 
 + 
 +В примере демонстрируется подключение датчика и вывод полученных данных в монитор Serial - порта. ​Таким образом можно ​измерить значение концентрации газов в среде с присутствием газов и в среде с их отсутствием. После этого делать вывод о наличии газов.
  
 ^ Что нужно ​                                                                                                                         ^ Кол-во,​ шт  ^ ^ Что нужно ​                                                                                                                         ^ Кол-во,​ шт  ^
-| [[http://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]]                                       ​| 1           | +| [[https://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]] | 1           | 
-| [[http://​smartelements.ru/​collection/​datchiki-i-sensory/product/modul-datchika-gaza-mq-135|Модуль датчика газа MQ-135]] ​ | 1           | +| [[https://​smartelements.ru/​collection/​shildy/product/sensor-shield|Sensor shield]] ​ | 1           | 
-| [[http://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]] ​            ​| ​4           |+| [[|Датчик ​углеводородных ​газов MQ-135]] ​ | 1           | 
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​shleyf-mama-mama-h3-20-sm|Шлейф мама-мама]] ​            ​| ​1          ​|
  
 **Схема подключения:​** **Схема подключения:​**
-{{ главная:датчики:mq135.jpg |}}+{{ :main:sensors:mq2.png?​nolink ​|}}
  
 **Скетч для загрузки:​** **Скетч для загрузки:​**
 <file Arduino> <file Arduino>
-const int analogSignal = A0; //​подключение ​аналогового ​сигналоьного ​пина +const int analogSignal = A0; // подключение сигналоьного ​вывода
-const int digitalSignal = 8; //​подключение цифрового сигнального пина +
-boolean noGas; //​переменная ​для хранения значения о присутствии газа +
-int gasValue = 0; //​переменная для хранения количества газа+
  
 +int gasValue = 0; // переменная для хранения количества газа
 + 
 void setup() { void setup() {
-  ​pinMode(digitalSignal,​ INPUT); //установка режима пина +  ​Serial.begin(9600); // инициализация Serial порта 
-  ​Serial.begin(9600); //инициализация Serial ​порта+  
 +
 +  
 +void loop() { 
 +  ​gasValue = analogRead(analogSignal); // чтение данных о количестве газа 
 +  
 +  //​вывод сообщения 
 +  ​Serial.print("​The gas value is "); 
 +  Serial.println(gasValue);​ 
 +  
 +  delay(1000);​ //задержка 1 с 
 +
 +</​file>​
  
 +==== Пример 2. Определение количества углекислого газа ====
 +
 +В данном примере используется простая библиотека для работы с датчиком.
 +В примере демонстрируется подключение датчика и вывод полученных данных о концентрации углекислого газа в монитор Serial - порта.
 +
 +^ Что нужно ​                                                                                                                         ^ Кол-во,​ шт  ^
 +| [[https://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]] | 1           |
 +| [[https://​smartelements.ru/​collection/​shildy/​product/​sensor-shield|Sensor shield]] ​ | 1           |
 +| [[|Датчик углеводородных газов MQ-135]] ​ | 1           |
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​shleyf-mama-mama-h3-20-sm|Шлейф мама-мама]] ​            | 1          |
 +
 +**Схема подключения:​**
 +{{ :​main:​sensors:​mq2.png?​nolink |}}
 +
 +<WRAP center round tip 60%>
 +Для повышения точности измерений датчиком ++++ воспользуйтесь этими советами | 
 +
 +Для более точного измерения концентрации углекислого газа, рекомендуется проделать следующие шаги:
 +
 +**1.** Оставьте датчик газа включенным на примерно 24 часа.
 +
 +**2.** Поместите датчик на свежий воздух (или хорошо проветриваемое помещение) при температуре 20°С и примерной влажности 35%.
 +
 +**3.** Измерьте корректирующее значение с помощью скетча:​
 +
 +<file Arduino>
 +#include "​MQ135.h"​ // подключение библиотеки
 +#define MQ135PIN A0    // вывод контроллера к которому подключен датчик
 +
 +MQ135 gasSensor = MQ135(MQ135PIN);​
 +
 +void setup()
 +{
 +  Serial.begin(9600);​ // инициализация последовательного порта
 +  Serial.println("​Calculating calibration value..."​);​ // вывод поясняющей надписи
 +  float rzero = gasSensor.getRZero();​ // чтение корректирующего значения
 +  delay(3000);​ // задержка 3 сек
 +  Serial.print("​MQ135 RZERO Calibration Value : "); // вывод корректирующего значения
 +  Serial.println(rzero);​ // в монитор порта
 } }
  
 void loop() { void loop() {
-  noGas = digitalRead(digitalSignal);​ //​считываем значение о присутствии газа 
-  gasValue = analogRead(analogSignal);​ // и о его количестве 
  
-  //вывод сообщения +
-  ​Serial.print("There is "); +</file> 
-  if (noGas) Serial.print("no gas"); + 
-  else Serial.print("​gas"​); +**4.** Откройте монитор порта и скопируйте значение. 
-  Serial.print(", the gas value is "); + 
-  ​Serial.println(gasValue);+**5.** В нижеприведённом скетче,​ укажите полученное ​выше значение ​в строке: 
 +<​file>​ 
 +#define RZERO 251.63 ​   // определение значения ​коррекции вычислений 
 +</​file>​ 
 + 
 +++++ 
 +</​WRAP>​ 
 + 
 + 
 + 
 + 
 +**Скетч для загрузки:​** 
 +<file Arduino>​ 
 +#include "MQ135.h" ​// подключение библиотеки 
 +#define MQ135PIN A0    // вывод контроллера к которому подключен датчик 
 +#define RZERO 251.63    // определение значения коррекции вычислений 
 + 
 +MQ135 gasSensor = MQ135(MQ135PIN); // инициализация объекта датчика 
 + 
 +void setup() 
 +{ 
 +  Serial.begin(9600); // инициализация последовательного соединения 
 +
 + 
 +void loop() {
   ​   ​
-  delay(1000);​ //​задержка 1 с+  ​float ppm = gasSensor.getPPM();​ // получение значения концентрации углекислого газа от датчика 
 +  ​delay(1000);​ // задержка ​в сек 
 +  Serial.print("​CO2 ppm value : "); // вывод поясняющей надписи 
 +  Serial.println(ppm);​ // вывод значения в монитор порта 
 +   
 +
 +</​file>​ 
 + 
 +==== Пример 3. Определение концентрации газа ==== 
 + 
 +В данном примере используется уже более сложная универсальная библиотека для работы со многими видами датчиков газа. 
 +В примере демонстрируется подключение датчика и вывод полученных данных по отдельным компонентам в монитор Serial - порта. Таким образом можно измерить значения для газов, которые описаны в **Таблице значений параметров** (в описании к этой статье). В данном примере будет измерена концентрация аммония (NH4). 
 + 
 +^ Что нужно ​                                                                                                                         ^ Кол-во,​ шт  ^ 
 +| [[https://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]] | 1           | 
 +| [[https://​smartelements.ru/​collection/​shildy/​product/​sensor-shield|Sensor shield]] ​ | 1           | 
 +| [[|Датчик углеводородных газов MQ-135]] ​ | 1           | 
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​shleyf-mama-mama-h3-20-sm|Шлейф мама-мама]] ​            | 1          | 
 + 
 +**Схема подключения:​** 
 +{{ :​main:​sensors:​mq2.png?​nolink |}} 
 + 
 +**Скетч для загрузки:​** 
 +<file Arduino>​ 
 +#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 мс
 } }
 </​file>​ </​file>​