? подключение датчика газа mq2 ардуино

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры Raspberry Pi, например Raspberry Pi 4.

Схема устройства

Подключите датчик CO2 к пинам и шины I²C компьютера Raspberry Pi.

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Cap, которая надевается сверху на малину методом бутерброда.

Программная настройка

  1. Подготовьте Raspberry Pi

  2. Для стабильной работы сенсора, понизьте скорость I²C:

    1. Запустите терминал.
    2. Откройте файл настроек системы.

      sudo nano /boot/config.txt
    3. Добавьте параметр скорости I²C со значением 10 кГц.

      dtparam=i2c_baudrate=10000
    4. Сохраните файл и перезагрузите малину.

Исходный код

Запустите на малине скрипт, приведённый ниже.

sensor-co2-ccs811-with-case-raspberry-pi-read-data.py
# подключаем необходимые библиотеки
import time
import board
import busio
import adafruit_ccs811
 
 # инициализируем шину I²C
i2c = busio.I2C(board.SCL, board.SDA)
# создаём объект для работы с датчиком CCS811
ccs811 = adafruit_ccs811.CCS811(i2c)
 
# ждём данные с датчика
while not ccs811.data_ready:
    pass
 
# если данные пришли
while True:
    # выводим в консоль количество CO2 и летучих органически веществ
    print("CO2: {} PPM, TVOC: {} PPB".format(ccs811.eco2, ccs811.tvoc))
    time.sleep(0.5)

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

Датчик утечки газа MQ2 на Ардуино

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

При измерении газов, термин «концентрация» используется для описания количества газа в воздухе по объему. Наиболее распространенными единицами измерения являются доли на миллион и процентная концентрация. Доли на миллион (ppm) — это отношение одного газа к другому. Например, концентрация 1000 ppm CO означает, что на 999 000 молекул газа, 1000 из них будут относится к углекислому газу.

Характеристики датчика MQ2 Ардуино

  • Питание: 5 Вольт;
  • Потребляемый ток: 180мА;
  • Чувствительность: 300-10000 ppm;
  • Рабочая температура: от -10 до +50 °C;
  • Влажность воздуха: не более 95%;
  • Интерфейс: аналоговый и цифровой.

Схема и распиновка датчика газа MQ2


Распиновка сенсора утечки газа MQ2 на Ардуино

Напряжение аналогового выхода изменяется пропорционально концентрации дыма или газа. Чем выше концентрация газа, тем выше выходное напряжение. Логический сигнал можно откалибровать, держа датчик рядом с дымом, который вы хотите обнаружить. Далее вращайте потенциометр по часовой стрелке (для увеличения чувствительности сенсора), пока не загорится красный светодиод на модуле.

Шаг 1. Комплектующие и инструменты

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

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

Инструменты:

  1. пистолет для горячего клея
  2. острый нож
  3. металлическая линейка
  4. некоторые инструменты рисования (в зависимости от ваших личных предпочтений)

Комплектующие:

  1. Arduino Nano
  2. USB-кабель
  3. Датчик газа MQ-4
  4. Дисплей (семисегментный индикатор)
  5. Картон или другой материал для корпуса (вы можете использовать прилагаемый чертеж и распечатать его на толстой бумаге) или заказать трехмерный

Калибровка модуля датчика газа MQ-2

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

Рисунок 10 – Потенциометр регулировки чувствительности модуля датчика газа MQ-2

Компаратор на модуле постоянно проверяет, достиг ли аналоговый выходной сигнал (A0) порогового значения, установленного потенциометром. Когда он пересекает пороговое значение, цифровой выход (D0) выдаст высокий логический уровень, и загорится светодиодный индикатор. Эта настройка очень полезна, когда вам нужно при достижении определенного порога запустить какое-то действие. Например, когда концентрация дыма пересекает пороговое значение, вы можете включить или выключить реле или дать команду включить вентиляцию или спринклерную систему пожаротушения.

Код Arduino

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

Скетч начинается с определения вывода Arduino, к которому подключен аналоговый вывод датчика газа MQ-2. Переменная под названием определена для хранения значения датчика.

В функции мы инициализируем последовательную связь с ПК и ждем 20 секунд, чтобы дать датчику прогреться.

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

Когда концентрация газа достаточно высока, датчик обычно выдает значение, превышающее 300. Мы можем отслеживать это значение с помощью оператора . И когда значение датчика превысит 300, мы отобразим сообщение «Smoke detected!» (Обнаружен дым!).

Вывод в мониторе последовательного порта выглядит так:

Рисунок 13 – Вывод в мониторе последовательного порта скетча для работы с модулем датчика газа MQ-2

Что такое датчик газа MQ-2?

MQ-2 является одним из наиболее часто используемых датчиков газа из серии датчиков MQ. Это датчик газа типа металл-оксид-полупроводник (МОП, MOS), также известный как химрезистор (химический резистор), поскольку обнаружение основано на изменении сопротивления чувствительного материала, когда газ вступает в контакт с этим материалом. Используя простую цепь делителя напряжения, можно измерить концентрацию газа.

Рисунок 2 – Датчик газа MQ-2

Датчик газа MQ-2 работает при постоянном напряжении 5 В и потребляет около 800 мВт. Он может обнаруживать концентрации LPG (сжиженного нефтяного газа), дыма, алкоголя, пропана, водорода, метана и угарного газа от 200 до 10000 ppm (миллионных долей).

Чему равен 1 ppm?

При измерении газов, таких как углекислый газ, кислород или метан, термин концентрация используется для описания количества газа по объему в воздухе. Двумя наиболее распространенными единицами измерения являются миллионная доля (ppm) и процентная концентрация.

Миллионная доля (сокращенно ppm) – это соотношение одного газа к другому. Например, 1000 ppm CO означает, что если бы вы могли сосчитать миллион молекул газа, 1000 из них были бы моноокисью углерода, а 999 000 молекул – какими-то другими газами.

Вот полный список технических характеристик:

Технические характеристика датчика газа MQ-2
Рабочее напряжение 5 В
Сопротивление нагрузки 20 кОм
Сопротивление нагревателя 33 Ом ± 5%
Потребляемая мощность <800 мВт
Сопротивление чувствительности 10 кОм — 60 кОм
Измерение концентрации 200 — 10000 ppm
Время разогрева более 24 часов

Для более подробной информации, пожалуйста, обратитесь техническому описанию.

Совет

Датчик чувствителен к нескольким газам – но не может сказать, какой из них он обнаружил! Это нормально; большинство датчиков газа такие. Таким образом, он лучше всего подходит для измерения изменений концентрации известного газа, а не для определения концентрация какого газа изменилась.

Объяснение программы для измерения концентрации CO2 с помощью Arduino и датчика MQ-135

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В коде программы мы будем использовать библиотеки Adafruit_GFX, Adafruit_SSD1306 и MQ135.h. Первые две из них можно скачать и установить с помощью менеджера библиотек (Library Manager) Arduino IDE. Для этого запустите Arduino IDE и в ней откройте пункт меню Sketch < Include Library < Manage Libraries. Откроется окно, в нем запустите поиск Adafruit GFX, после ее нахождения установите библиотеку Adafruit GFX от компании Adafruit.

Аналогичным образом установите библиотеку Adafruit SSD1306 от компании Adafruit. Библиотеку MQ135 можно скачать по этой ссылке.

Arduino

#include «MQ135.h»
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

1
2
3
4

#include «MQ135.h»
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

После этого укажем в программе ширину и высоту OLED дисплея, в нашем случае мы используем дисплей 128×64 с поддержкой интерфейса SPI. Вы можете изменить значения SCREEN_WIDTH и SCREEN_HEIGHT если используете OLED дисплей с другим разрешением.

Arduino

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

1
2

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Затем укажем контакты платы Ардуино, к которым дисплей подключен по интерфейсу SPI.

Arduino

#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13

1
2
3
4
5

#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13

После этого создадим объект OLED дисплея с необходимыми характеристиками.

Arduino

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

1 Adafruit_SSD1306display(SCREEN_WIDTH,SCREEN_HEIGHT,OLED_MOSI,OLED_CLK,OLED_DC,OLED_RESET,OLED_CS);

Затем дадим название контакту, к которому подключен датчик MQ-135.

Arduino

int sensorIn = A0;

1 intsensorIn=A0;

После этого в функции setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки. Также инициализируем OLED дисплей с помощью функции begin().

Arduino

Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();

1
2
3

Serial.begin(9600);

display.begin(SSD1306_SWITCHCAPVCC);

display.clearDisplay();

Внутри функции loop() мы будем считывать значение с выхода датчика MQ-135 на выходе АЦП контакта A0 с помощью функции analogRead().

Arduino

val = analogRead(A0);
Serial.print («raw = «);

1
2

val=analogRead(A0);

Serial.print(«raw = «);

Затем мы будем вызывать функцию gasSensor.getPPM() для расчета значения углекислого газа в единицах PPM (частей на миллион), которое рассчитывается на основе сопротивления нагрузочного резистора, значения Ro и считанного с контакта A0 значения.

Arduino

float ppm = gasSensor.getPPM();
Serial.print («ppm: «);
Serial.println (ppm);

1
2
3

floatppm=gasSensor.getPPM();

Serial.print(«ppm: «);

Serial.println(ppm);

После этого установим размер текста и его цвет на OLED дисплее с помощью функций setTextSize() и setTextColor().

Arduino

display.setTextSize(1);
display.setTextColor(WHITE);

1
2

display.setTextSize(1);

display.setTextColor(WHITE);

Затем установим позицию курсора с помощью функции setCursor(x,y) и будем выводить значения концентрации CO2 на экран OLED дисплея с помощью функции display.println().

Arduino

display.setCursor(18,43);
display.println(«CO2»);
display.setCursor(63,43);
display.println(«(PPM)»);
display.setTextSize(2);
display.setCursor(28,5);
display.println(ppm);

1
2
3
4
5
6
7

display.setCursor(18,43);

display.println(«CO2»);

display.setCursor(63,43);

display.println(«(PPM)»);

display.setTextSize(2);

display.setCursor(28,5);

display.println(ppm);

И, наконец, вызовем функцию display() для отображения необходимого текста на экране OLED дисплея.

Arduino

display.display();
display.clearDisplay();

1
2

display.display();

display.clearDisplay();

Hardware Overview – MQ2 Gas Sensor Module

Since MQ2 Gas Sensor is not breadboard compatible, we do recommend this handy little breakout board. It’s very easy to use and comes with two different outputs. It not only provides a binary indication of the presence of combustible gases but also an analog representation of their concentration in air.

The analog output voltage provided by the sensor changes in proportional to the concentration of smoke/gas. The greater the gas concentration, the higher is the output voltage; while lesser gas concentration results in low output voltage. The following animation illustrates the relationship between gas concentration and output voltage.

The analog signal from MQ2 Gas sensor is further fed to LM393 High Precision Comparator (soldered on the bottom of the module), of course to digitize the signal. Along with the comparator is a little potentiometer you can turn to adjust the sensitivity of the sensor. You can use it to adjust the concentration of gas at which the sensor detects it.

The sensor is sensitive to multiple gasses – but cannot tell which it is! That’s normal; most gas sensors are like that. So, it is best for measuring changes in a known gas density, not detecting which is changing.

Что такое датчик газа MQ-2?

MQ-2 является одним из наиболее часто используемых датчиков газа из серии датчиков MQ. Это датчик газа типа металл-оксид-полупроводник (МОП, MOS), также известный как химрезистор (химический резистор), поскольку обнаружение основано на изменении сопротивления чувствительного материала, когда газ вступает в контакт с этим материалом. Используя простую цепь делителя напряжения, можно измерить концентрацию газа.

Рисунок 2 – Датчик газа MQ-2

Датчик газа MQ-2 работает при постоянном напряжении 5 В и потребляет около 800 мВт. Он может обнаруживать концентрации LPG (сжиженного нефтяного газа), дыма, алкоголя, пропана, водорода, метана и угарного газа от 200 до 10000 ppm (миллионных долей).

Чему равен 1 ppm?

При измерении газов, таких как углекислый газ, кислород или метан, термин концентрация используется для описания количества газа по объему в воздухе. Двумя наиболее распространенными единицами измерения являются миллионная доля (ppm) и процентная концентрация.

Миллионная доля (сокращенно ppm) – это соотношение одного газа к другому. Например, 1000 ppm CO означает, что если бы вы могли сосчитать миллион молекул газа, 1000 из них были бы моноокисью углерода, а 999 000 молекул – какими-то другими газами.

Вот полный список технических характеристик:

Технические характеристика датчика газа MQ-2
Рабочее напряжение 5 В
Сопротивление нагрузки 20 кОм
Сопротивление нагревателя 33 Ом ± 5%
Потребляемая мощность мВт
Сопротивление чувствительности 10 кОм — 60 кОм
Измерение концентрации 200 — 10000 ppm
Время разогрева более 24 часов

Для более подробной информации, пожалуйста, обратитесь техническому описанию.

Скачать техническое описание MQ-2

Совет

Датчик чувствителен к нескольким газам – но не может сказать, какой из них он обнаружил! Это нормально; большинство датчиков газа такие. Таким образом, он лучше всего подходит для измерения изменений концентрации известного газа, а не для определения концентрация какого газа изменилась.

Пример для Espruino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например Iskra JS.

Схема устройства

Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Iskra JS. Для коммуникации используйте выходной провод от сенсора совместно с
соединительными проводами «папа-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте выходной провод от сенсора.

Исходный код

sensor-co2-ccs811-with-case-espruino-read-data.js
// настраиваем шину I²C
PrimaryI2C.setup({sda SDA, scl SCL});
// подключаем библиотеку CCS811 для работы с датчиком качества воздуха
var gas = require("CCS811").connectI2C(PrimaryI2C);
// каждую секунду выводим показания качества воздуха:
// количество углекислого газа и летучих органических веществ в воздухе
setInterval(function() {
  print(gas.get());
}, 1000);

После загрузки скрипта, в консоль будет выводиться количество углекислого газа в и летучих органических веществ в .

Представленные на рынке модели

Датчики Arduino, относящиеся к давлению, делятся согласно средам применения и конструктивным особенностям, непосредственно связанным с получением конечного результата. Есть модели, защищенные от влаги и предназначенные для применения в жидкостях, другие работают только в качестве анероидов атмосферы, иные устанавливаются в разрыв движения потока, четвертые в качестве определителей внутреннего давления наполняющего емкость газа. Их всех объединяет наличие общих интерфейсов подключения к микроконтроллеру и низкое, не более нескольких милливатт (реже Ватт), потребление энергии.

Наименование Питание (V) Точность Разрешение
(hPa)
Диапазон (hPa) Рабочая температура
(°C)
Интерфейсы Примечание
SPI I2C UEXT
Атмосферные
MOD-BMP085 1.8–3.6 0.03 hPa 0.01 300–1100 (от 500 м ниже уровня моря до 9 км. высоты –40..+85 + + Измерение температуры
GY-BMP280 3.3 0.12 hPa 0.0016 300–1100 –40..+85 + + Измерение температуры до +65, с точностью 0.01
MD-PS002 5V ±0.2% –100–+150 –40..+125 + Только не агрессивные среды
Жидкостные
MS5803-02BA 1.8–3.6 20 см жидкости 30–1100
(10–2000)
–40..+85 + +
MS5803-07BA 1.8–3.6 0–7 мбар
(70 м погружения)
–20..+85 + +
Open-Smart 5V G1/4 0-1.2 MPa Hydraulic Pressure Sensor for Non-Corrosive Water 5 1.5 % 1–2.4 мбар (max 3) 0..+85 Собственный коннектор, соединяемый к I2C через резистор, датчик оснащен термометром

Конечно, в приведенном списке числятся далеко не все существующие модели. В нем указаны только те, которые обладают определенной популярностью и затребованы пользователями.

Элементы платы

Датчик газа MQ-4

Датчик MQ-4 относится к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.

Выбор режима питания нагревателя

В сенсоре предусмотрено два режима работы, переключаемых джампером.

  • Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
  • Управление нагревателем программно.

1 группа

  • Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
  • Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — Соедините с пином микроконтроллера.

2 группа

  • Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
  • Питание (H) — Питание нагревателя. Соедините с пином

  • Земля (G) — Соедините с пином микроконтроллера..

Обзор аппаратного обеспечения – модуль датчика газа MQ-2

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

Рисунок 8 – Модуль датчика газа MQ-2

Напряжение на аналоговом выходе датчика изменяется пропорционально концентрации дыма/газа. Чем больше концентрация газа, тем выше выходное напряжение; в то время как меньшая концентрация газа приводит к более низкому выходному напряжению. Следующая анимация иллюстрирует взаимосвязь между концентрацией газа и выходным напряжением.

Рисунок 9 – Выходной сигнал модуля датчика газа MQ-2

Аналоговый сигнал от датчика газа MQ-2 поступает на высокоточный компаратор LM393 (впаян в нижней стороне модуля) для оцифровки. Рядом с компаратором имеется небольшой потенциометр, который можно покрутить, чтобы отрегулировать чувствительность датчика. Вы можете использовать его для регулировки концентрации газа, при которой датчик его обнаруживает.

Как работает дымовая сигнализация?

Датчик дыма MQ-2 имеет  выход в форме аналогового сигнала. Мы установили в нашем коде условие, при котором, если выходное значение датчика больше 400 зуммер начнет подавать звуковой сигнал и загорится красный светодиод; и если выходное значение датчика меньше 400, то зуммер будет молчать, а загорится зеленый светодиод.

Используемый здесь ESP8266 создаст веб-страницу по IP-адресу и отправит данные на этотадрес и выведет там данные. После загрузки кода этот IP-адрес можно увидеть на последовательном мониторе, как показано ниже.

Когда вы вводите этот IP-адрес в своем браузере, то увидите страницу как на рисунке ниже:

Как работает датчик газа?

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

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

Примеры программ для Arduino

mq135Heater.ino
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
 
// имя для пина, к которому подключен датчик
#define PIN_MQ135         A0
// имя для пина, к которому подключен нагреватель датчика
#define PIN_MQ135_HEATER  11
 
// создаём объект для работы с датчиком
// и передаём ему номер пина выходного сигнала и нагревателя
MQ135 mq135(PIN_MQ135);
 
void setup()
{
  // открываем последовательный порт
  Serial.begin(9600);
  // включаем нагреватель
  mq135.heaterPwrHigh();
  Serial.println("Heated sensor");
}
 
void loop()
{
  // если прошёл интервал нагрева датчика
  // и калибровка не была совершена
  if (!mq135.isCalibrated() && mq135.heatingCompleted()) {
    // выполняем калибровку датчика на чистом воздухе
    mq135.calibrate();
    // если известно сопротивление датчика на чистом воздухе 
    // можно его указать вручную, допустим 160
    // mq135.calibrate(160);
    // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт
    Serial.print("Ro = ");
    Serial.println(mq135.getRo());
  }
  // если прошёл интевал нагрева датчика
  // и калибровка была совершена
  if (mq135.isCalibrated() && mq135.heatingCompleted()) {
    // выводим отношения текущего сопротивление датчика
    // к сопротивлению датчика в чистом воздухе (Rs/Ro)
    Serial.print("Ratio: ");
    Serial.print(mq135.readRatio());
    // выводим значения газов в ppm
    Serial.print("\tCO2: ");
    Serial.print(mq135.readCO2());
    Serial.println(" ppm");
    delay(100);
  }
}

К платам Arduino c 5 вольтовой логикой датчик можно подключить используя всего один трёхпроводной шлейф. Для этого установите перемычку на разъём «выбор питания нагревателя».

Выведем в Serial-порт текущее значение вредных газов в , при этом нагреватель всегда включён.

mq135.ino
// библиотека для работы с датчиками MQ (Troyka-модуль)
#include <TroykaMQ.h>
 
// имя для пина, к которому подключен датчик
#define PIN_MQ135  A0
// создаём объект для работы с датчиком и передаём ему номер пина
MQ135 mq135(PIN_MQ135);
 
void setup()
{
  // открываем последовательный порт
  Serial.begin(9600);
  // перед калибровкой датчика прогрейте его 60 секунд
  // выполняем калибровку датчика на чистом воздухе
  mq135.calibrate();
  // при знании сопративления датчика на чистом воздухе
  // можно его указать вручную, допустим 160
  // mq135.calibrate(160);
  // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт
  Serial.print("Ro = ");
  Serial.println(mq135.getRo());
}
 
void loop()
{
  // выводим отношения текущего сопротивление датчика
  // к сопротивлению датчика в чистом воздухе (Rs/Ro)
  Serial.print("Ratio: ");
  Serial.print(mq135.readRatio());
  // выводим значения газов в ppm
  Serial.print("\tCO2: ");
  Serial.print(mq135.readCO2());
  Serial.println(" ppm");
  delay(100);
}

Принципиальная схема

Прежде всего, подключите модуль ESP8266 к Ардуино. Чтобы правильно подключить ESP8266 к Arduino, мы использовали модуль адаптера ESP-01, который сделает соединение очень простым. Этот адаптерный модуль имеет встроенный регулятор 5В на 3,3 В, что означает, что вам не придется использовать резисторы.

Подключите контакт VCC адаптера ESP-01 к выходу 5V на Arduino и Землю (GND) на ESP-01 к GND на Arduino. Затем подключите вывод TX от адаптера к пину 2 на Ардуино и RX от адаптера к выходу 3 на Arduino.

Дальше подключите датчик MQ-2 к Ардуино. Подключите VCC и GND к датчику к контактам 5V и GND на Arduino. Затем подключите контакт A0 на MQ-2 к A0 на Arduino.

После этого подключите Зуммер и светодиоды к Arduino. Подключите положительный сигнал к зуммеру с контактом 10 на Arduino и отрицательный сигнал на зуммере с GND на Arduino. Затем подключите отрицательную сторону светодиодов к заземлению через резистор 220 Ом и положительную сторону к контактам 8 и 9 на Arduino.

Элементы платы

Датчик газа MQ-7

Датчик MQ-7 относиться к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.

Выбор режима питания нагревателя

В сенсоре предусмотрено два режима работы, переключаемых джампером.

  • Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
  • Управление нагревателем программно.

1 группа

  • Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
  • Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — Соедините с пином микроконтроллера.

2 группа

  • Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
  • Питание (H) — Питание нагревателя. Соедините с пином .
  • Земля (G) — Соедините с пином микроконтроллера.

Характеристики оборудования, его настройка, примечания

Здесь начать стоит непосредственно с преобразователя аналогового сигнала в цифровой, а конкретно с платы-посредника между Arduino и тензодатчиками — HX711:

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

Коэффициент Пиковый ток
32 ± 80 мА
64 ± 40 мА
238 ± 20 мА

В тех случаях, когда на вход АЦП поступает ток меньше нижней границы диапазона, на его выходе будет выдано 800000h, а если больше верхней — 7FFFFFh.

К сожалению, есть у преобразователя HX711 определенные проблемы. К примеру, точность его работы сильно зависит от температуры окружающей среды. Дополнительно, даже в нормальном режиме, происходит изменение определяемых аналоговых значений. То есть, результирующие коды все время «бегают» в определенных, достаточно сильных пределах:

Один из немногих дельных советов для таких случаев, выясненный при помощи интернет, — использовать для питания ровно 5 В в отношении датчиков и самого АЦП, а также снизить частоту определения до 10 Гц. Кроме того, пользователи названой платы применяют линейные фильтры на вводе и рекомендуют делать больший упор в конструкциях на канал B — он менее шумный. Также хорошим стабилизатором показаний будет опрос 10 значений и вывода среднего. Вариантом можно применить сборки на основе АЦП HX710A. Названый конвертер дополнительно оснащен сенсором температуры, корректирующим выходные данные.

К Ардуино преобразователь соединяется четырьмя контактами, два из которых питание, а остальные применяются в деле передачи данных:

Arduino HX711
5V VCC
GND GND
DT Цифровой вывод
SCK Цифровой вывод

Закончив с конвертером аналога в цифру для Ардуино, перейдем к характеристикам, которыми обладают сами тензодатчики:

На выходе полу мостового тензодатчика три провода, которыми он подключается к HX711. Классически они имеют следующее цветовое разделение:

Контакт Цвет
А+ Белый
E- Черный
E+ Красный

У мостового детектора четыре исходящих контакта, имеющих следующую цветовую дифференциацию:

Контакт Цвет
А+ Белый
E- Черный
E+ Красный
A- Зеленый

На обоих видах резистивных детекторов присутствуют отверстия под крепежные болты M4/5.

Шаг 5. Загрузка кода

Ардуино детектор газа нужно запрограммировать, это очень легко сделать. Мы используем программное обеспечение, представленное на официальном сайте Ардуино — www.arduino.cc.

Возьмите код или файл ниже и загрузите его в arduino.

int sensorValue;
int num;


      void setup()
      {
          pinMode(2, OUTPUT);
          pinMode(3, OUTPUT);
          pinMode(4, OUTPUT);
          pinMode(5, OUTPUT);
          pinMode(6, OUTPUT);
          pinMode(7, OUTPUT);
          pinMode(8, OUTPUT);
          pinMode(9, OUTPUT);
          Serial.begin(9600);      // sets the serial port to 9600
       }


      void loop()
      {
        sensorValue = analogRead(0);       // read analog input pin 0
        
              if (sensorValue < 400)      // if there is little or no gas detected display blinking lights
              {
                
                  digitalWrite(2, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(4, LOW);
                  digitalWrite(6, LOW);
                  digitalWrite(7, LOW);
                  digitalWrite(8, LOW);
                  digitalWrite(9, LOW);
                
              digitalWrite(3, LOW);
              digitalWrite(8, HIGH);
              delay(500);
              digitalWrite(8, LOW);
              digitalWrite(6, HIGH);
              delay(500);
              digitalWrite(6, LOW);
              digitalWrite(3, HIGH);
              delay(500);
              }
              else
              {
                  if (sensorValue >= 900)               // the value of the gas measurement between 400 and 900 is displayed (this part refers to the cases below) 
                  {num = 9;}
                  else if (sensorValue >= 800)
                  {num = 8;}
                  else if (sensorValue >= 700)
                  {num = 7;}
                  else if (sensorValue >= 600)
                  {num = 6;}
                  else if (sensorValue >= 500)
                  {num = 5;}
                  else if (sensorValue >= 400)
                  {num = 4;} 
              }
              
              if (sensorValue > 700)                // if there is a lot of gas detected, the dot on the led display will blink
              {
              digitalWrite(5, HIGH);
              delay(100);
              digitalWrite(5, LOW);
              delay(100);
              }  
        
        
                  switch (num)
                  {
                  case 9:
                  digitalWrite(2, LOW);
                  digitalWrite(3, HIGH);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, HIGH);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(9, HIGH);
                  break;
                  case 8:
                  digitalWrite(2, HIGH);
                  digitalWrite(3, HIGH);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, HIGH);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(9, HIGH);
                  break;
                  case 7:
                  digitalWrite(2, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, LOW);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(9, HIGH);
                  break;
                  case 6:
                  digitalWrite(2, HIGH);
                  digitalWrite(3, HIGH);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, HIGH);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(9, LOW);
                  break;
                  case 5:
                  digitalWrite(2, LOW);
                  digitalWrite(3, HIGH);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, HIGH);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, HIGH);
                  digitalWrite(9, LOW);
                  break;
                  case 4:
                  digitalWrite(2, LOW);
                  digitalWrite(3, LOW);
                  digitalWrite(4, HIGH);
                  digitalWrite(6, HIGH);
                  digitalWrite(7, HIGH);
                  digitalWrite(8, LOW);
                  digitalWrite(9, HIGH);
                  break;
                  }
        
        
      }

Внутренняя структура датчика газа MQ-2

Датчик фактически заключен в два слоя тонкой сетки из нержавеющей стали, которая называется «антивзрывной сеткой» (anti-explosion network). Она гарантирует, что нагревательный элемент внутри датчика не вызовет взрыва, когда мы ищем легковоспламеняющиеся газы.

Рисунок 3 – Внешние компоненты датчика газа MQ-2

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

Рисунок 4 – Внутренняя структура с чувствительным элементом и соединительными выводами

Так выглядит датчик при удалении внешней сетки. Звездообразная структура образована из чувствительного элемента и шести соединительных ножек, которые выходят за пределы бакелитового основания. Из шести два вывода (H) отвечают за нагрев чувствительного элемента и соединены через катушку из никель-хромовой проволоки, хорошо известного проводящего сплава.

Остальные четыре вывода (A и B), отвечающие за выходные сигналы, подключены с использованием платиновых проводов. Эти провода соединены с корпусом чувствительного элемента и передают небольшие изменения тока, который проходит через чувствительный элемент.

Рисунок 5 – Чувствительный элемент – керамика на основе оксида алюминия с покрытием из диоксида олова

Трубчатый чувствительный элемент изготовлен из керамики на основе оксида алюминия (Al2O3) и покрыт диоксидом олова (SnO2). Диоксид олова здесь является наиболее важным материалом, будучи чувствительным к горючим газам. Керамическая подложка просто увеличивает эффективность нагрева и обеспечивает постоянное нагревание площади датчика до рабочей температуры.

Рисунок 6 – Внутренняя структура чувствительного элемента датчика газа MQ-2

Итак, никель-хромовая катушка и керамика на основе оксида алюминия образуют систему подогрева; в то время как платиновые проволоки и покрытие из диоксида олова образуют сенсорную систему.