Подключение mq 2 к arduino. Датчики газа серия MQ (Trema-модуль v2.0). Программный код для Arduino IDE

  1. Датчик газа MQ-2: http://ali.ski/6JRA_
  2. Arduino uno: http://ali.ski/gC_mOa
  3. Макетная плата: http://ali.ski/rq8wz8
  4. Контактные провода: http://ali.ski/Exjr3
  5. Диоды и резисторы: http://fas.st/KK7DwjyF

В этом уроке мы подключим к Arduino датчик газа. С его помощью мы сможем следить за количеством углекислого газа в помещении.

Сама плата датчика состоит из самого датчика 6 пинового который для точных показаний должен некоторое время постоять работающим и нагреться до необходимой температуры. Потенциометр для изменении чувствительности датчика. Ну и 4 пина, 2 из которых +,- и два пина один Аналоговый, другой цифровой. Следовательно и подключать нужно либо к аналоговому пину ардуино или же к цифровому пину.

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

Подключать датчик будем к аналоговому пину ардуино A0. Соответственно возьмем аналоговый пин с датчика MQ-2,а не цифровой.

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

Const int analogInPin = A0; // Указываем пин, к которому подключен датчик const int ledPin = 13; int sensorValue = 0; // Объявляем переменную для хранения значений с датчика //и задаем ее начальное значение 0 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); // Задаем режим для 13 пина Serial.println("MQ2 Test"); //Посылаем текст в монитор порта, чтобы следить за выполнением программы } void loop() { sensorValue = analogRead(analogInPin); //считываем значения с датчика if (sensorValue >= 350) //и если превышен заданный порог { digitalWrite(ledPin, HIGH); // то включаем светодиод. } else // а если нет { digitalWrite(ledPin, LOW); // то выключаем } Serial.print("MQ2 value= "); //Для отслеживания данных с датчика транслируем их в монитор порта Serial.println(sensorValue); delay(1000); }

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

Подробнее можно посмотреть в видео приведенном ниже.

Видео:

Описание

Модуль датчика газа, основным элементом которого является газоанализатор MQ-2, позволяет выявить наличие в окружающем воздухе углеводородные газы (пропан, метан, н-бутан), дым, водород. Датчик можно использовать в проектах обнаружения утечек газа, задымления. Аналого - цифровой модуль позволяет как получать данные о содержании газов к которым восприимчив газоанализатор, так и работать напрямую с устройствами, выдавая цифровой сигнал о превышении/уменьшении порогового значения. Имеет регулятор чувствительности, что позволяет подстраивать датчик под нужды конкретного проекта. Модуль имеет два светодиода: первый (красный) - индикация питания, второй (зеленый) - индикация превышения/уменьшения порогового значения.

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

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

Диапазоны измерений:

    0-1% - пропан

    0,03-0,5% - бутан

    0,05-2% - метан

    0,03-0,5% - водород

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

    Напряжение питания: 4,8 - 5,2 В

    Потребляемый ток: 170 мА

    Время прогрева при включении: 1 мин

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

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

Плюсы использования

    Оптимальное недорогое решение для проектов обнаружения газа и дыма

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

Минусы использования

    Перед использованием требует долгого прогрева (не менее 24 часов)

    Для снятия показаний требуется прогрев (не менее 1 минуты)

    Высокое энергопотребление (желательно дополнительное питание)

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

В примере демонстрируется подключение датчика и вывод полученных данных в монитор Serial - порта. (Пример тестировался на контроллере Smart UNO)

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

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

const int analogSignal = A0; //подключение аналогового сигналоьного пина const int digitalSignal = 8 ; //подключение цифрового сигнального пина boolean noGas; //переменная для хранения значения о присутствии газа int gasValue = 0 ; //переменная для хранения количества газа void setup() { pinMode (digitalSignal, INPUT ) ; //установка режима пина Serial .begin (9600 ) ; //инициализация Serial порта } void loop() { noGas = digitalRead (digitalSignal) ; //считываем значение о присутствии газа gasValue = analogRead (analogSignal) ; // и о его количестве //вывод сообщения Serial .print ("There is " ) ; if (noGas) Serial .print ("no gas" ) ; else Serial .print ("gas" ) ; Serial .print (", the gas value is " ) ; Serial .println (gasValue) ; delay (1000 ) ; //задержка 1 с } mq2Heater.ino #include // имя для пина, к которому подключен датчик #define PIN_MQ2 A0 // имя для пина, к которому подключен нагреватель датчика #define PIN_MQ2_HEATER 13 // создаём объект для работы с датчиком // и передаём ему номер пина выходного сигнала и нагревателя MQ2 mq2(PIN_MQ2, PIN_MQ2_HEATER) ; void setup() { Serial.begin (9600 ) ; // включаем нагреватель mq2.heaterPwrHigh () ; Serial.println ("Heated sensor" ) ; } void loop() { // и калибровка не была совершена if (! mq2.isCalibrated () && mq2.heatingCompleted () ) { mq2.calibrate () ; Serial.print ("Ro = " ) ; Serial.println (mq2.getRo () ) ; } // если прошёл интервал нагрева датчика // и калибровка была совершена if (mq2.isCalibrated () && mq2.heatingCompleted () ) { Serial.print ("LPG: " ) ; Serial.print (mq2.readLPG () ) ; Serial.print (" ppm " ) ; Serial.print (" Methane: " ) ; Serial.print (mq2.readMethane () ) ; Serial.print (" ppm " ) ; Serial.print (" Smoke: " ) ; Serial.print (mq2.readSmoke () ) ; Serial.print (" ppm " ) ; Serial.print (" Hydrogen: " ) ; Serial.print (mq2.readHydrogen () ) ; Serial.println (" ppm " ) ; delay(100 ) ; } }

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

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

mq2.ino // библиотека для работы с датчиками MQ (Troyka-модуль) #include //имя для пина, к которому подключен датчик #define PIN_MQ2 A0 // создаём объект для работы с датчиком и передаём ему номер пина MQ2 mq2(PIN_MQ2) ; void setup() { // открываем последовательный порт Serial.begin (9600 ) ; // перед калибровкой датчика прогрейте его 60 секунд // выполняем калибровку датчика на чистом воздухе mq2.calibrate () ; // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт Serial.print ("Ro = " ) ; Serial.println (mq2.getRo () ) ; } void loop() { // выводим отношения текущего сопротивление датчика // к сопротивлению датчика в чистом воздухе (Rs/Ro) Serial.print ("Ratio: " ) ; Serial.print (mq2.readRatio () ) ; // выводим значения газов в ppm Serial.print ("LPG: " ) ; Serial.print (mq2.readLPG () ) ; Serial.print (" ppm " ) ; Serial.print (" Methane: " ) ; Serial.print (mq2.readMethane () ) ; Serial.print (" ppm " ) ; Serial.print (" Smoke: " ) ; Serial.print (mq2.readSmoke () ) ; Serial.print (" ppm " ) ; Serial.print (" Hydrogen: " ) ; Serial.print (mq2.readHydrogen () ) ; Serial.println (" ppm " ) ; delay(100 ) ; }

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

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

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

Характеристики

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

Принцип работы

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

Концентрация газа измеряется в ppm. Она расшифровывается, как parts per million (частей на миллион). Таким образом 1ppm соответствует концентрации в 0,0001%. Что бы получить точное значение измеренной концентрации газа ppm, необходимо выполнить сложное нелинейное преобразование напряжения на аналоговом выходе датчика по таблицам преобразования из документации на датчик, с учетом температуры окружающего воздуха.

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

Индикаторы, расположенные на датчике, уведомляют нас подключенном питании и превышении порога чувствительности цифрового выхода.

Подключение

Подключить датчик можно к плате Arduino или напрямую к модулю реле. В первом случае используется аналоговый выход А0 датчика, который подключают к аналоговому входу на плате Arduino. В случае с реле используют цифровой выход датчика.


Внимание. Не подавайте на датчик напряжение питания более 5В, избегайте попадания влаги и щелочи на газоанализатор, избегайте обморожения датчика при очень низких температурах.

Схема подключения представлена на картинке ниже:


Программный код для Arduino IDE

Пример исходного кода проверки работоспособности датчика для Arduino представлен ниже. Код выводит в монитор порта текущее значение АЦП аналогового входа и информацию о превышении порогового значения. В строчке кода #define smokePin A0 вы можете задать номер пина Arduino, к которому подключен аналоговый выход датчика. Пороговое значение концентрации газа в воздухе вы можете задать самостоятельно.

#define smokePin A0 // определяем аналоговый выход к которому подключен датчик
int sensorThres = 400; // пороговое значение АЦП, при котором считаем что газ есть

Void setup() {
Serial.begin(9600); // Устанавливаем скорость порта 9600 бод
}

Void loop() {
int analogSensor = analogRead(smokePin); // считываем значения АЦП с аналогового входа
// к которому подключен датчик
Serial.print (analogSensor); // выводим в порт значение АЦП сигнала с датчика

// Проверяем, достигнуто ли пороговое значение
if (analogSensor > sensorThres) { // если значение больше допустимого...
Serial.println(" Gaz!"); // выводим в порт надпись, что газ есть
}
else { // иначе...
Serial.println(" normal"); // выводим в порт надпись, что газа нет
}
delay(500); // задержка в 500 миллисекунд.

Гуляя по каталогам китайских продавцов на E-bay случайно наткнулся на датчик газа MQ-4. Этот датчик предназначен для определения концентрации метана (CH4) в воздухе. А так как этот газ является основным компонентом бытового газа, иметь подобный датчик весьма полезно - можно собрать детектор утечки газа или что-нибудь подобное. В общем интересная штучка, особенно радует цена в $4,5 и аналоговый интерфейс общения - проблем с подключением не возникнет.

Для подключения датчика под его пузом имеются 6 выводов, 4 из которых дублируют друг друга. Поэтому для подключения используется всего 4 вывода:

Н-Н это выводы нагревателя. К нему подводится напряжение 5 вольт, причем неважно постоянное или переменное.

А-А и В-В это электроды. Сигнал можно снимать с любого из них. Например, на схеме ниже питание подведено к A-A, а сигнал снимается с электрода B-B. Но можно и наоборот - запитывать к B-B, а сигнал снимать с А-А. Работать будет в обоих случаях. В этом сенсор чем-то похож на вакуумную электронную лампу

Резистором RL настраивается чувствительность датчика. Рекомендуется ставить в диапазоне 10к. Чувствительность датчика, если верить документации составляет от 200 до 10000 ppm (что это?)

В даташите на MQ-4 приведен график, по которому видно, что помимо метана, датчик очень хорошо реагирует на пропан (LPG), и в меньшей степени на газообразный водород, угарный газ и пары алкоголя


А вообще в семействе датчиков MQ-x имеются сенсоры специально предназначенные для обнаружения этих газов. Вот некоторые из них:

MQ-3 - сенсор паров алкоголя

MQ-5 и MQ-6 - предназначены для обнаружения пропана/ бутана

MQ-7 - чувствителен к угарному газу (имхо, заслуживает отдельного внимания)

MQ-8 - специализируется по водороду H2

И т.д. список можно дополнить еще парой-тройкой датчиков, все они легко гуглятся.

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


Датчик подключается к ADC0 (PortC.0). В качестве опорного напряжения АЦП используется внутренний ИОН на 2,54 вольта. Поэтому на резисторах R5-R6 собран делитель напряжения, чтобы на вход АЦП попадало не больше 2,5 вольт. Резистор R7 дополнительная подтяжка к земле согласно схеме из даташита, его я взял 3,3 килоома - что было под рукой.

Набросал небольшую программку для ATmega8, частота тактирования 1 МГц

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 1200

"конфигурация АЦП
Config Adc = Single , Prescaler = Auto , Reference = Internal

"подключение светодиодов
Config Portb . 1 = Output
Config Portb . 2 = Output
Config Portb . 3 = Output
Config Portb . 4 = Output

Dim W As Integer "для хранения значения полученного с АЦП

Do

"запуск и считывание показаний с датчика
Start Adc
W = Getadc (0 ) "датчик подключён к PortC.0

"в зависимости от значения показаний зажгем светодиоды индикации
If W < 700 Then
Portb = & B00000000 "значение меньше порога срабатывания, все гуд
End If

If W > 700 And W < 750 Then "низкий уровень загазованности
Portb = & B00000010
End If

If W > 750 And W < 800 Then "средний уровень
Portb = & B00000110
End If

If W > 850 And W < 900 Then "загазовано чуть меньше чем полностью
Portb = & B00001110
End If

If W > 900 Then "караул!
Portb = & B00011110
End If

Print W "отсылаем показания в UART

Wait 1

Loop

End

Показания с датчика будут считываться с частотой 1 раз в секунду. И в зависимости от показаний будет гореть определенное количество светодиодов или не будут гореть вовсе. Значения порогов я взял после пробного испытания и вывода показаний в UART.

Тестовая схема собранная на макетке


Припаянный датчик


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


После подачи питания, датчику необходимо время чтобы выйти на рабочий режим, примерно 10-15 секунд. Это время нужно чтобы нагреватель внутри датчика поднял температуру до необходимого значения. Кстати, сам датчик во время работы тоже не слабо нагревается, по ощущениям градусов до 50-и. Так что без паники, это норма:)



Что еще почитать