В этом уроке мы подключим к 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К платам Arduino c 5 вольтовой логикой датчик можно подключить используя всего один . Для этого установите перемычку на разъём «выбор питания нагревателя».
Выведем в Serial-порт текущее значение вредных газов в ppm , при этом нагреватель всегда включён.
mq2.ino // библиотека для работы с датчиками MQ (Troyka-модуль) #includeДатчик газа MQ-2 позволяет регистрировать концентрацию таких газов как водород, дым и горючие углеводородные газы (метан, пропан, бутан). Датчик относится к распространенному семейству датчиков MQ. Это семейство датчиков, благодаря своей низкой стоимости и простоте использования завоевало популярность. Датчик имеет аналоговый и цифровой выход. На цифровой выход сигнал подается при превышении определенного порога концентрации газа, который настраивается подстроечным резистором. Датчик прост в подключении, имеет высокую чувствительность и малое время отклика.
Датчик представляет из себя небольшую плату, с передней стороны которой расположен чувствительный газоанализатор (детектор), а на обратной стороне располагаются 4 ножки для подключения датчика, индикаторы питания и выходного сигнала, а также потенциометр.
Применяют датчики MQ-2 в системах умного дома, в системах обнаружения газа или дыма на промышленных или частных объектах, в автомобильных вентиляционных фильтрах и т.д.
Принцип работы датчика основан на чувствительном детекторе из смеси оксидов алюминия и олова, в котором за счет нагревания происходит химическая реакция. Именно поэтому в процессе работы газоанализатор существенно нагревается, так что не стоит пугаться. В результате химической реакции изменяется сопротивление элемента и передается сигнал. В зависимости от чувствительности элемента к определенным газам достигается эффект их обнаружения.
Концентрация газа измеряется в ppm. Она расшифровывается, как parts per million (частей на миллион). Таким образом 1ppm соответствует концентрации в 0,0001%. Что бы получить точное значение измеренной концентрации газа ppm, необходимо выполнить сложное нелинейное преобразование напряжения на аналоговом выходе датчика по таблицам преобразования из документации на датчик, с учетом температуры окружающего воздуха.
С помощью потенциометра можно изменять порог чувствительности цифрового выхода датчика. Имейте ввиду что для разных газов порог чувствительности будет не один и тот же.
Индикаторы, расположенные на датчике, уведомляют нас подключенном питании и превышении порога чувствительности цифрового выхода.
Подключить датчик можно к плате Arduino или напрямую к модулю реле. В первом случае используется аналоговый выход А0 датчика, который подключают к аналоговому входу на плате Arduino. В случае с реле используют цифровой выход датчика.
Внимание. Не подавайте на датчик напряжение питания более 5В, избегайте попадания влаги и щелочи на газоанализатор, избегайте обморожения датчика при очень низких температурах.
Схема подключения представлена на картинке ниже:
Пример исходного кода проверки работоспособности датчика для 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-и. Так что без паники, это норма:)
nanbaby.ru - Здоровье и красота. Мода. Дети и родители. Досуг. Быт. Дом