Mq 135 подключение к arduino. Датчик углекислого газа MQ135 — подключение к STM32. Подключение и настройка

ОПИСАНИЕ ТОВАРА: "MQ-135 ДАТЧИК ГАЗА"

"GAS SENSOR MQ135 " датчик, используемый для анализа чистоты окружающего воздуха. Например, в Вашем авто. "Датчик газа MQ-135 " реагирует на содежание таких газов, как NO 2 -оксид азота, CO 2 - оксид углерода, пары бензола и алкоголя, а также - как анализатор дыма. Датчик газа MQ-135 называется анализатором чистоты воздуха, потому что он не работает на какой-то один газ. А определяет общее содержание ВРЕДНЫХ ГАЗОВ в воздухе. Принцип действия простой - изменение сопротивления (а значит и значения выходного напряжения) в зависимости от объемного содержания вредных газов в воздухе. Вывод "DO" - цифровой сигнал позволяет использовать сам "датчик газа " без "Платы контроллера Ардуино " напрямую с "Модулем Реле ". Т.е. высокий уровень 5 вольт - включить Реле и низкий уровень "0 вольт" - выключить Реле. "AO" -аналоговый сигнал на выходе Модуля Датчика газа позволяет анализировать процентное содержание вредных газов и, при необходимости, принимать какие-то определенные действия при помощи различных "Модулей Ардуино ". Калибровать Датчик надо только один раз при первом включении. Скачать Библиотеку для работы с Датчиком газа можете

Более полную информацию Вы можете найти в приложенном PDF-файле.

В нашем магазине существует гибкая система скидок для постоянных и оптовых покупателей. Цену и наличие уточняйте по телефону. Заказать доставку по Москве Вы можете на сайте компании "Dostavista ".

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

Поэтому было решено собрать систему по мониторингу уровня CO и метана в воздухе котельной на основе Arduino или совместимой платы. Помимо простой сигнализации, хотелось бы собирать еще и статистику, например, о том, как связаны концентрации опасных газов с работой газового оборудования. В принципе, задача реализуется на современном уровне культуры и техники, причем за очень небольшие деньги. В качестве источника расхода природного газа я использовал импульсы со встроенного в газовый счетчик датчика, а для анализа воздуха применил два чрезвычайно популярных в среде разработчиков Arduino датчика MQ-4 и MQ-7. MQ4 «нюхает» воздух на предмет содержания метана, а MQ7 проводит измерения в отношении CO.

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

Что такое ppm

Чтобы как следует оперировать со значениями, которые я буду приводить ниже, нужно для себя уяснить единицы измерений. У нас, на территории бывшего Советского Союза, показатели принято измерять в процентах (%) или же непосредственно в массе к объему (мг/м 3). А вот в некоторых зарубежных странах применяет такой показатель как ppm.

Сокращение ppm расшифровывается как parts per million или в вольном переводе «частей на миллион» (хорошо, что тут не используют фунты на галлоны и империалы к саженям). В принципе, от процента показатель не сильно отличается, вернее, отличается только размерность. 1 ppm = 0,0001%, соответственно 3% = 30.000 ppm.

Перевод из процентов или ppm в мг/м 3 уже сложнее, тут нужно учитывать молярную массу газа, давление и температуру. В целом формула для пересчета выглядит следующим образом P x V M =R x T, где P – давление, V M – молярный объем, R – универсальная газовая постоянная, T – абсолютная температура в Кельвинах (не Цельсиях и не Фаренгейтах). Но дабы не мучить читателя школьным курсом химии, сразу приведу несколько значений. А самые опытные бурители интернетов могут найти на просторах великой паутины онлайн-калькуляторы для самостоятельного расчета.

CO: 3% = 30.000 ppm = 34695.52 мг/м 3
CO 2: 3% = 30.000 ppm = 54513.22 мг/м 3

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

Различие СО и CO 2

Для начала стоит разобраться что же такое есть CO и в чем его отличие от CO 2 . Во-первых, CO это монооксид углерода, который также называют угарным газом, окисью углерода или оксидом углерода (II). СО газ весьма коварный. Он чрезвычайно ядовит, но при этом не обладает ни цветом, ни запахом. Попав в помещение с угарным газом, вы только по косвенным симптомам поймете, что подвергаетесь воздействию яда. Сначала головная боль, головокружение, одышка, сердцебиение, потом посинение трупа. Угарный газ соединяется с гемоглобином крови, отчего последний перестает переносить кислород тканям вашего организма, и первым страдает головной мозг и нервная система.

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

Основным источником выделения СО, как ни странно, является сгорание углеродного топлива при недостаточном количестве кислорода. Углерод «не догорает» и вместо углекислого газа CO 2 , в атмосферу выбрасывается угарный газ CO. В бытовом понимании отличным источником СО, при неправильной эксплуатации, могут выступать дровяные печи, газовые конфорки, газовые котлы и прочая отопительная техника, работающая на углеродном топливе. Не стоит забывать и про автомобили, в выхлопе бензинового двигателя СО может быть до 3%, а по гигиеническим нормам его должно быть не более 20 мг/м³ (около 0,0017%).

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

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

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

И тот и другой газы состоят всего из двух видов элементов. Из кислорода (О) и углерода (С), вопрос только в количестве атомов кислорода. Знающий читатель может догадаться, что один газ в другой может превращаться с легкостью необыкновенной. Да, может, но не совсем с легкостью и не совсем обыкновенной. Нужно прилагать усилия. Так, например, в каталитических нейтрализаторах современных бензиновых автомобилей происходит процесс дожигания (превращения) CO в CO 2 . Процесс проходит при высокой температуре и в присутствии катализаторов (например, платины). Возможен и обратный процесс, но опять же непростой.

Кстати, в интернет есть сайт CO2.Earth отображающий динамику и текущую концентрацию углекислого газа в атмосфере Земли. Да, концентрация не такая уж и низкая. Ведь при скоплении углекислого газа в районе 2-4% человек теряет работоспособность, чувствует сонливость и слабость. А при концентрациях около 10% начинает ощущаться удушье.

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

Конструкция электрохимических датчиков

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

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

Вот и состоит электрохимический датчик из некой подложки с чувствительным материалом, нагревателя подложки и собственно выводных контактов. Сверху на датчик натянута металлическая сетка, все же подложка ощутимо греется, да и всяческие газы горючие могут быть вокруг датчика, тот же CO. Для этого сетка и требуется. Безопасность превыше всего. Кстати, натягивать сетку на опасные элементы при применении во взрывоопасных средах придумал некий Гумфри Дэви еще для шахтеров в начале IXX века.

В сети можно насчитать пару десятков производителей плат с электрохимическими датчиками серии MQ. Но производитель у всех датчиков (не плат) один – китайская компания HANWEI . Компания выпускает весомый ассортимент различных устройств для детектирования газов и всего с ними связанного. Но сенсоров серии MQ среди номенклатуры нет, возможно, что продукция слишком уж мелкая, чтобы вывешивать ее на сайт.

Будучи по натуре любопытным персонажем, я покопался в спецификациях HANWEI и свел все доступные датчики серии MQ, материал подложки и тип детектирования в единую таблицу.

Датчик

Газ

Подложка

MQ-2 LPG SnO 2
MQ-3 Alcohol SnO 2
MQ-4 CH 4 SnO 2
MQ-5 LPG, natural gas SnO 2
MQ-6 LPG, propane SnO 2
MQ-7 CO SnO 2
MQ-9 CH 4 , LPG SnO 2
MQ-131 O 3 SnO 2
MQ-135 Air Quality SnO 2
MQ-136 Air Quality SnO 2
MQ-137 Air Quality SnO 2
MQ-138 Multi-purpose SnO 2
MQ-303A Alcohol ???
MQ-306 LPG, LNG ???

За исключением 300-й серии датчиков MQ все они используют один и тот же материал для подложки. Именно для той самой подложки которая и определяет концентрацию газа в атмосфере, именно для той подложки, которая меняет свое сопротивление. Во всех датчиках она используется одна и та же. У 300-й серии информация о чувствительном материале скромно опущена.

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

Прошу заметить, что все датчики имеют определенный и весьма небольшой срок жизни, который составляет порядка 5 лет. Причем 5 лет - это не только непосредственно работа, но и хранение. А если ваш датчик хранится без соответствующей упаковки, то срок его годности еще меньше. Дело в том, что чувствительный химический элемент, без нагрева, будет насыщаться углеродом, который постепенно его весь и разрушит. Именно по этой причине новые датчики рекомендуется «прокаливать» держа в рабочем состоянии на протяжении суток, а еще лучше двух. Тот углерод, что успел въесться в оксид олова (IV) «выгорит» и датчик сможет определять показания с более высокой точностью.

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

Но точность показаний датчиков серии MQ зависит не только от кислорода. Показания хорошо меняются в зависимости от влажности воздуха и от его температуры. Расчетные показатели даны для влажности в 65% и температуры 20 градусов Цельсия. А при влажности выше 95% датчик перестанет адекватно выдавать показания. Жалко, что вот только не указана в спецификации какая влажность используется: относительная или абсолютная. Интуиция подсказывает, что все же относительная.

Помимо показателей окружающей среды на точность показаний датчиков MQ не хуже остальных параметров влияет еще и срок службы самих датчиков. Со временем их показания плывут. «Засоряется» продуктами измерения чувствительный слой, изменяются характеристики нагревателя и изменяется сопротивление при эталонных показателях. В какую сторону оно изменяется непонятно, но производитель рекомендует, во-первых, проводить калибровку датчика после покупки и первичного «отжига», а затем проводить регулярные перекалибровки на протяжении всего срока службы датчика. А единственный нормальный способ калибровки - сравнение результатов показания датчика с уже откалиброванным прибором. Понятное дело, что такого прибора нет ни у конечного потребителя-частника (а профи будут использовать несколько другие датчики, подороже), ни у многих производителей плат. Некоторые производители об этом заявляют честно прямо на своем сайте:

«И как же мне узнать, какова концентрация того или иного газа при помощи сенсора MQ?» - вопросит нетерпеливый читатель? Поскольку в большинстве случаев потребитель использует измеритель напряжения, впрочем с сопротивлением все аналогично, но меньше на один шаг, то у потребителя существует потребность в том, как вольты или кванты ЦАПа Arduino перевести в заветные ppm или хотя б проценты. Проделать сию операцию можно исключительно при помощи невнятных графиков из спецификации на датчик.

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

На этом хочется подвести промежуточный итог. Итак, к плюсам датчиков серии MQ можно отнести их крайне и категорически демократичную цену. А вот минусов намного больше:

  • Фактически идентичные датчики использующие один и тот же чувствительный элемент и различающиеся используемым номиналом подстроечных резисторов.
  • Зависимость результатов измерения от множества факторов: температуры, влажности, концентрации кислорода.
  • Отсутствие заявляемой селективности по измеряемым газам, реагирует на все с углеродом (а, вполне возможно, и на другие элементы вступающие в реакцию с подложкой).
  • Высокое энергопотребление (нагреватель).
  • Необходимость в первичном «отжиге» датчика.
  • Нестабильность показаний по времени.
  • Необходимость первичной и повторяющейся калибровки.
  • Практическая невозможность получения осмысленных значений в виде ppm или %.

Цифровой или аналоговый?

Рынок знает свое дело и если на какой-то продукт есть спрос, то этот спрос будет удовлетворен. Рано или поздно, но будет обязательно. А с использованием шустрых китайских товарищей спрос удовлетворяется скорее рано, чем поздно. Так и появилось великое множество производителей с Китаю, производящие готовые платы с электрохимическими датчиками серии MQ. Давайте рассмотрим по возрастающей, какие могут быть вообще варианты поставки.

Чистый датчик

Самый простой и самый дешевый вариант. В поставке присутствует только сам электрохимический датчик и больше ничего. Подключать его к системе с измерением напряжения (например, к аналоговому порту Arduino) нужно через нагрузочный резистор. Резистор лучше всего использовать с возможностью подстройки при калибровке. Номиналы резистора указываются в спецификации (DataSheet) на датчик.

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

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

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

Цифровой датчик

Казалось бы, если датчик цифровой, то он должен выдавать информацию в цифровом виде. Однако, все цифровые датчики с сенсорами MQ, что мне попадались, не имели такой возможности. «Цифровой» в их названии означает только то, что датчик имеет цифровой выход, который переключается в режим HIGH при превышении некоего порога концентрации измеряемого газа. А основной съем значений пользователь осуществляет тем же самым аналоговым способом, как и с обыкновенным аналоговым датчиком.

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

Цифровой датчик с цифровой шиной

Пожалуй, это самый Hi End среди подобных датчиков. Подключение и передача данных осуществляется посредством цифровой шины I 2 C. И к одному устройству съема информации (например, Arduino) можно подключить аж сотню таких датчиков. Только нужно иметь в виду, что датчики потребляют весьма много тока и его необходимо подавать отдельно. Настроечный резистор, само собой, присутствует.

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

Питание

Выше я уже упоминал, что для работы нагревателя датчиков MQ требуется подводить к нему качественное питание и в достаточно объеме. По спецификации датчики потребляют около 150 мА. В реальности потребление может плавать в весьма широком пределе. В принципе, 150 мА не такой уж и большой ток до тех пор, пока устройство (или несколько) с таким потреблением не пытаются скрестить с чем-то вроде Arduino. Подключив даже один такой датчик к питанию на плате, уже рискуешь получит неработоспособное устройство, которому не будет хватать напряжения для нормальной работы. При работе сами сенсоры нагреваются, не существенно, но градусов до сорока вполне могут раскочегариться. Если сравнить эту температуру с 60-70 градусами на стабилизаторе, питающем эти датчики, то температуру сенсоров можно считать сносной.

Для обеспечения нормальной работоспособности нагревателя и как следствие самого датчика необходимо подавать питание отдельно для этих датчиков. Например, использовать независимый источник питания на 1 или 2 А и 5V для питания датчиков (не все датчики потребляют 5V). Либо использовать специальную плату, преобразующую напряжение 9-12V в требуемое для питания датчиков.

В любом случае с источником тока, обладающим нужной мощностью, придется повозиться. Хотя возможен вариант, когда датчик подключается напрямую к плате (например, Arduino). Но в этом случае ничего большего к ней подключать не рекомендуется.

Вариант калибровки датчика и преобразования показаний в ppm

Блуждая по сети в поисках решения по калибровке и получения достоверных результатов с датчика, я наткнулся на весьма любопытный пост от некоего Davide Gironi, который столкнулся с точно такой же проблемой, как и я. Davide попытался разобраться, каким образом можно получить с его датчика MQ-135 (Air Quality) показания в виде ppm.

Согласно исследованиям, проведенным блоггером для калибровки, достаточно иметь представление о концентрации какого-то газа в атмосфере и опираясь на эти данные попробовать подобрать резистор для попадания в нужный сектор по графику. Davide использовал датчик MQ-135 который предназначен для определения качества воздуха, среди контролируемых газов которого есть и CO 2 . И именно углекислый газ больше всего интересовал блоггера. Используя информацию с сайта co2now.org , он смог вычислить требуемый номинал резистора. Согласитесь, что метод весьма далек от идеала, но все равно лучше, чем ничего.

Затем, после калибровки он набросал небольшой код, позволяющий получить искомые ppm исходя из полученных в результате калибровки данных. Я не буду приводить здесь код, желающие могут ознакомиться с ним самостоятельно, но сводится он примерно к этому:

float ppm = ((10000.0 / 4096.0) * raw_adc) + 200;

Приведенный выше код, между прочим, из примера для датчика MQ-4 с цифровым интерфейсом I 2 C. Заметьте, что это лучше, чем ничего. Ведь многие просто не в состоянии дойти и до такого преобразования и ограничиваются лишь просто некими пороговыми значениями. Например, при значении 750 (единица измерений отсутствует, это квант), нужно врубать красный светодиод, в диапазоне 350-750 достаточно желтого, а когда ниже 350 пускай горит зеленый светодиод.

Альтернативы?

Если датчики MQ так уж плохи, то есть ли какая альтернатива для использования в домашних проектах? На самом деле есть. Даже много. Методов измерения концентрации газов не один и не два. Только вот датчики, обладающие высокой точностью, стоят приличных денег. И порой от такой стоимости наступает амфибиотропная асфиксия. Разница в стоимости может достигать тысячи и десятки тысяч раз. Тут невольно призадумаешься.

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

Если же требуется детектирование других газов, но с применением недорогих устройств, то доступных вариантов на текущий момент (лето 2016 года) не так много, если не сказать прямо, что их совсем мало. Альтернативой можно считать использование серии MQ, правда обходиться придется только порогами значений (о точности перевода в ppm я уже высказался выше).

Многие сразу же возразят, дескать, я лично использовал такой датчик, и он работает. В качестве примеров приводят опыты сродни «подышать на датчик», подержать вокруг него руку, пустить облачко сигаретного дыма. Да, показания датчика сразу же изменятся, значения поползут вверх. Да, датчик отразит то, что он нагрелся, то что увеличилась влажность, то, что в атмосфере стало больше углерода и меньше кислорода. Но насколько больше, какое количество исследуемого газа сейчас в атмосфере и самое важное какого именно газа? Вот на этот вопрос ответ при помощи датчиков серии MQ дать уже нельзя. Лучше уж приобрести обыкновенный бытовой сигнализатор опасных газов, того же СО. За вполне сопоставимые деньги вы получите устройство заводского исполнения, с громкой сигнализацией и низким потреблением энергии.

Датчики близнецы

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

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

А ведь все началось с того, что я подключил два датчика (MQ-4 и MQ-7) к одному устройству и начал заливать результаты их работы на ThingSpeak . Один из датчиков должен измерять уровень ядовитого СО, а второй показывать сколько есть в воздухе метана. Меня очень заинтересовали графики, которые повторяли друг друга больше чем почти полностью. Да, один датчик выдавал показания на уровне 100-150 единиц, а второй на уровне 350-400. Пики и плато совпадали по времени от разных датчиков, а всплески лишь оттеняли неминуемую закономерность.

Я свел показания обоих датчиков в единый график корреляции и понял, что они показывают одни и те же результаты, правда в разных диапазонах. И задался вопросом – зачем мне датчик метана, который реагирует на все? Начиная от угарного газа и заканчивая алкоголем. Зачем мне датчик СО, который помимо самого СО еще больше реагирует на LPG и водород? Вот именно – незачем.

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

Внутренности датчика MQ-4

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

Внутренности датчика MQ-7

Несмотря на другой внешний вид, внутренности MQ-7 идентичны внутренностям MQ-4. А нагреваемая бобышка сероватого цвета, есть ни что иное, как искомый оксид олова , который при нагревании и присутствии углерода или водорода (как раз те самые газы) частично восстанавливается, стремясь стать металлическим оловом, и соответственно изменяет свое сопротивление.

Познакомимся с простым датчиком MQ-135, который поможет определить уровень вредных веществ в воздухе. Подключим анализатор газов MQ-135 к Raspberry Pi используя АЦП PCF8591, напишем простую тестовую программу для наблюдения за сигналом из датчика, а также для выполнения определенного действия при достижении установленного критического уровня.

Анализатор газов MQ-135

MQ-135 - достаточно компактный и недорогой датчик, который умеет анализировать уровень вредных веществ в воздухе. Он поможет определить в воздухе наличие следующих веществ:

  • Углекислый газ (в нормальных условиях это бесцветный газ, без запаха, двуоксид углерода - CO 2);
  • Угарный газ (бесцветный ядовитый газ без вкуса и запаха, монооксид углерода - CO);
  • Аммиак (в нормальных условиях это бесцветный газ с резким характерным запахом, нитрид водорода - NH 3);
  • Бензол (жидкость без цвета со специфическим сладковатым запахом, органическое соединение - C 6 H 6);
  • Оксид азота (бесцветный газ который незначительно растворим в воде, монооксид азота - NO);
  • Пары спирта (органические соединения, существует целый класс спиртов, спирт содержат алкогольные напитки);
  • Дым (газ выдкляющийся при сгорании различных веществ, прохождения химических реакций);
  • и другие...

Рис. 1. Внешний вид датчика MQ-135.

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

Основные технические характеристики и плюсы датчика:

  • Высокая чувствительность;
  • Высокая скорость реакции;
  • Стабильность и долговечность;
  • Питание нагревательного элемента от 5В;
  • Сопротивление нагревательного элемента - 33 Ом;
  • Ток потребляемый нагревателем от источника питания 5В - 150мА (мощность 800 мВт);
  • Небольшие размеры (18мм в диаметре, 17мм в высоту + 6мм высота пинов).

Датчик содержит 6 ножек - две из них используются для питания нагревателя, а остальные 4 для снятия сигнала с сенсора.

Рис. 2. Структура и принцип работы датчика газов MQ-135, на рисунке обозначены:

  • 1 - чувствительный к газам слой (SnO 2);
  • 2 - электрод (Au);
  • 3 - токопроводящие линии для соединения с электродом (Pt);
  • 4 - катушка нагревателя (Ni-Cr);
  • 5 - керамическая трубка (Al 2 O 3);
  • 6 - сетка из стальных проводников для защиты в случае взрыва внутри датчика;
  • 7 - сжимающее кольцо (никелированная медь);
  • 8 - резиновая основа;
  • 9 - пины для подключения датчика (никелированная медь).

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

Этот электрический потенциал мы снимаем с электродов и анализируем его уровень при помощи дополнительных электронных схем.

Подключаем датчик MQ-135

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

Рис. 3. Внешний вид модуля с датчиком MQ-135 и схемой сравнения.

Модуль содержит 4 вывода:

  • VCC - питание 5В;
  • GND - земля (минус);
  • AO - аналоговый выход датчика (Analog Output);
  • DO - цифровой выход датчика (Digital Output).

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

Аналоговый выход датчика предназначен для подключения к самодельным компараторам и анализаторам, а также к АЦП (Аналого-Цифровым Преобразователям).

В эксперименте я буду использовать аналоговый выход датчика MQ-135, подключенный к АЦП на основе PCF8591, работу с которым я описывал в прошлой статье. Анализировать данные работы АЦП будет мини-компьютер Raspberry Pi .

Модуль MQ-135 должен питаться от напряжения +5В, соответственно на его цифровом и аналоговом выходах уровень напряжения может достигать +5В.

Аналоговый выход MQ-135 можно было бы подключить напрямую к аналоговому входу PCF8591 если питать последний также от напряжения +5В, но в таком случае понадобится собирать двунаправленный конвертер уровней напряжения для шины I 2 C.

Конвертация уровней напряжения здесь нужна, поскольку:

  1. Пины GPIO в Raspberry Pi (используемые нами здесь для интерфейса I 2 C) рассчитаны на максимальное входное/выходное напряжение +3,3В;
  2. При питании PCF8591 от +5В, напряжения +3,3В на выводах шины I 2 C может быть не достаточно чтобы получить высокий уровень (логическая 1). Обмен данными по шине станет невозможным;
  3. На модуле PCF8591 установлены подтягивающие (pull-up) резисторы, которые пытаются выставить при логической единице на каждом из выводов шины I 2 C напряжение +5В (питание PCF8591). Это не безопасно для входов GPIO в Raspberry Pi, расчитанных на +3,3В.

Чтобы не собирать конвертер уровней напряжения здесь все же можно выкрутиться следующим образом: питать модуль PCF8591 от напряжения +3,3В (в даташите указан диапазон питающих напряжений 2,6В-6В), а чтобы не спалить его аналоговый вход (теперь туда можно подавать максимум +3,3В) напряжением с аналогового выхода MQ-135 (достигающее +5В), соединяем эти модули через резистивный делитель напряжения : 5В - в 3В.

Вот такая получилась схема подключения модулей:

Рис. 4. Принципиальная схема подключения модулей MQ-135 и PCF8591 к Raspberry Pi.

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

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

Ток потребления модуля MQ-135 (по большей части нагревателя в нем) составляет примерно 150мА (I=U/R=5В/33Ом=0,151А), поэтому питание можно взять с пина 2 (+5В) на разъеме GPIO.

Важно помнить что линию питания 5В в Raspberry Pi нельзя перегружать, если нужно питать какой-то модуль от 5В и с потребляемым током более 0,3А-0,5А то лучше не пожалеть пару центов и собрать отдельный стабилизатор напряжения, например на микросхеме L7805 (розничная стоимость менее 0,5$).

ВНИМАНИЕ! На показанном ниже фото, ранее в качестве эксперимента, я подключил все модули к питанию +5В, выход датчика соединил с входом АЦП напрямую и не использовал резистивного делителя напряжения. Старайтесь так не делать, а собирать безопасную схему, как на рисунке 4.

Рис. 5. Внешний вид подключенных модулей MQ-135 и PCF8591 к Raspberry Pi.

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

Такое подключение работает, но все же есть риск нанесения вреда контроллеру GPIO в Raspberry Pi. Это может случиться если на какой-то из пинов попадет напряжение +5В (явно превышающее +3,3В) и с током достаточным чтобы пожечь внутренние ключи на пинах GPIO.

Дело в том, что на модуле PCF8591 между каждой из двух линий (SCL, SDA) шины I 2 C и шиной питания стоят подтягивающие резисторы с сопротивлением 4,7кОм (это подключение можно увидеть на схеме модуля).

Генерация сигналов в шине I 2 C базируется на "прижимании" (подключении через внутренние транзисторы в устройстве) линий данных к земле (логический 0) и их "отпускании" (логическая 1). В последнем случае за установку высокого уровня отвечают как раз те самые подтягивающие резисторы.

Получается, что при логической единице на одной из линий, напряжение питания модуля (+5В) через резистор 4,7кОм идет на вывод GPIO, а знаем что позволенный максимум на нем - 3,3В. Порт не выгорает здесь только потому, что ток через эту цепочку достаточно мал, он гасится на этом же резисторе и порт остается цел.

Что же там за ток может быть, давайте попробуем посчитать:

  1. При логическом "0" (через внутренний транзистор порт подключил вывод GPIO к земле): I = U/R = 5V/4700R = 0,00106A = 1mA
  2. При логической "1" (через внутренний транзистор порт подключил вывод GPIO к +3,3В): I = U/R = (5V-3,3V)/4700R = 0,00036A = 0,36mA.

Принцип работы шины I 2 C таков, что при генерации высокого уровня пин порта не подключается к линии питания ("висит в воздухе"), поэтому пункт 2 в расчетах можно и не учитывать.

В итоге, в самом крайнем случае, мы имеем напряжение +5В при токе 1мА на пине GPIO, чего явно не достаточно чтобы спалить порт на гребенке Raspberry Pi.

А что будет если подтягивающие резисторы в модуле PCF8591 отпаять от +5В и припаять к +3,3В? - скорее всего, передача данных по шине I2C перестанет осуществляться, напряжения +3,3В будет не достаточно для интерпретации модулем PCF8591 (питающимся от +5В) сигнала напряжением +3,3В как высокого уровня (логической "1").

А теперь давайте подумаем что получится если подключить 3-5 разных модулей с питанием +5В к шине I2C Raspberry Pi. В зависимости от сопротивлений подтягивающих резисторов на модулях (если эти резисторы впаяны, их сопротивления просуммируются как при параллельном включении резисторов) ток может достичь 5-10мА при напряжении +5В, что уже может нести более значительную опасность для портов GPIO.

Поэтому, нужно всегда придерживаться правил:

  1. На пины GPIO в Raspberry Pi нельзя допускать попадания напряжений, превышающих 3,3В!
  2. При подключении к шине I2C устройств с разными напряжениями питания (2,5В, 3В, 5В...) нужно использовать схему конвертера уровней напряжения !

Программа для анализа состояния датчика MQ-135

Программа написана на языке программирования Python и является модифицированной версией той, которую я приводил в статье где разбирали работу с модулем PCF8591, там же описано как активировать шину I 2 C .

Суть работы новой версии программы заключается вот в чем:

  • Постоянно выводим в консоль текущее значение с датчика газов (числа от 0 до 255, от меньшей концентрации до большой);
  • При достижении некоторого установленного значения концентрации газов - зажигаем светодиод D1.

Создадим новый файл для программы на Питоне и откроем его в редакторе nano:

Nano /tmp/mq-135-pcf8591-test.py

Скопируем приведенный ниже код в файл:

#!/usr/bin/env python # Program for gas sensor MQ135 + ADC-DAC PCF8591P # 2016 http://сайт import os import time from smbus import SMBus DEV_ADDR = 0x48 adc_channel = 0b1000010 # 0x42 (input AIN2 for ADC + use DAC) dac_channel = 0b1000000 # 0x40 bus = SMBus(1) # 1 - I2C bus address for RPi rev.2 while(1): os.system("clear") print("Press Ctrl C to stop...\n") # read sensor value from ADC bus.write_byte(DEV_ADDR, adc_channel) bus.read_byte(DEV_ADDR) bus.read_byte(DEV_ADDR) value = bus.read_byte(DEV_ADDR) print "AIN value = " + str(value) # compare value from ADC and set value in DAC if value > 120: bus.write_byte_data(DEV_ADDR, dac_channel, 220) else: bus.write_byte_data(DEV_ADDR, dac_channel, 0) # pause 100 milliseconds time.sleep(0.1)

Для выхода из редактора (возможно кто-то еще не знает этого): жмем CTRL+X, для подтверждения сохранения файла жмем Y и ЕНТЕР.

Запускаем программу командой в консоли:

Python /tmp/mq-135-pcf8591-test.py

Рис. 6. Вывод выполняющейся программы в окне консоли.

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

Чтобы изменить числовой порог свечения светодиода, к примеру для значения 70, нужно изменить строчку кода "if value > 120:" на "if value > 70:" - теперь программа будет реагировать на превышение значения 70 на входе AIN2 АЦП свечением светодиода.

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

Засветить светодиод - это очень просто, что можно еще придумать? - например, настроить отправку электронного письма (или электронных писем) в случае достижения заданного порога вредных газов в воздухе, включить воспроизведение какого-то MP3-файла на Raspberry Pi и много других вещей.

Заключение

Ниже приведено видео работы модуля с MQ-135, подключенного к малинке и АЦП PCF8591 (старый не безопасный вариант, без делителя напряжения на резисторах).

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

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

  • Аналоговый выход модуля «S» (Signal) - подключается к любому аналоговому входу Arduino и предназначен для снятия показаний модуля.
  • Цифровой вход модуля «EN» (Enable) - подключается к любому выходу Arduino и предназначен для управления режимами работы модуля («1» - активный режим, «0» - режим энергосбережения).
  • Если вход «EN» оставить неподключённым, то модуль будет находиться в активном режиме пока есть питание.

Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1: Используя проводной шлейф и Piranha UNO

Используя провода «Папа - Мама », подключаем напрямую к контроллеру Piranha UNO.


Способ - 2: Используя Trema Set Shield

Модуль можно подключить к любому из аналоговых входов Trema Set Shield.



Способ - 3: Используя проводной шлейф и Shield

Используя 3-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.



Питание:

Входное напряжение питания 5 В постоянного тока, подаётся на выводы «V» (Vcc) и «G» (GND) модуля.

Подробнее о модуле:

Уровень напряжения на аналоговом выходе «S» (Signal) прямо пропорционален концентрации детектируемых газов. Цифровой вход «EN» (Enable) можно не использовать - тогда модуль будет работать постоянно.

Если подключить вход модуля «EN» к любому выходу Arduino, то модулем можно управлять: логическая «1» подключит нагревательный элемент датчика к шине питания и модуль будет регистрировать концентрацию газов, логический «0» отключит нагревательный элемент и модуль перейдёт в режим энергосбережения.

Примеры:

Пример для Типа подключения 1:

int8_t gasPin = A0; // Определяем номер вывода, к которому подключен модуль void setup() { Serial.begin(9600); // Инициируем передачу данных на скорости 9600 бит/сек pinMode(gasPin, INPUT); // назначаем вывод, к которому подключен датчик, работать в режиме входа } void loop() { Serial.print("Gas volume: "); // выводим текст в монитор порта Serial.println(analogRead(gasPin)); // выводим значение с датчика delay(1000); // ждём секунду }

Пример для Типа подключения 2:

int8_t gasPin = A0; // Определяем номер вывода, к которому подключен модуль int8_t gasPwr = 8; // Определяем номер вывода, к которому подключено управление нагревателя модуля void setup() { Serial.begin(9600); // Инициируем передачу данных на скорости 9600 бит/сек pinMode(gasPin, INPUT); // назначаем вывод, к которому подключен датчик, работать в режиме входа } void loop() { if (analogRead(gasPin) < 550) { // если значение с датчика ниже порога, то digitalWrite(gasPwr, LOW); // выключаем питание с нагревателя и Serial.println("GasPwr OFF"); // выводим текст в монитор порта } else { // если значение с датчика выше порога, то digitalWrite(gasPwr, HIGH); // включаем питание нагревателя, Serial.print("Gas volume: "); // выводим текст в монитор порта Serial.println(analogRead(gasPin)); // выводим значение с датчика } delay(1000); // ждём секунду }

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

Пару слов о том, зачем мне это понадобилось. Я всегда с тоской вспоминаю походы с палаткой - потому что только там я мог нормально, полноценно спать благодаря совершенно свежему воздуху. Несмотря на то что в Москве я живу в своеобразном зелёном острове, всё равно духота часто мучает меня по ночам. Вообще, эта моя история очень похожа на историю BarsMonster`а с Хабра, который в поисках причин быстрого утомления ставил кислородный концентратор, вешал мощнейшую люстру на 10 тысяч люмен, и делал прочие хаотичные штуки. Я пошёл по его пути, тоже поставил такую люстру, но особой разницы не заметил. В итоге мы оба дошли до идеи измерить концентрацию углекислого газа в воздухе - его избыток вызывает мгновенное закисление крови и нарушение процессов обмена.

Именно для этих измерений я купил в Китае датчик MQ-135.

В нём чувствительный слой из диоксида олова (с золотыми контактными площадками) нанесён на сапфировую подложку с нихромовым нагревателем, и электроды грелки (H-H) вместе с платиновыми электродами от чувствительного слоя (A/B-B/A) выведены наружу. Измерять сопротивление можно на любых двух из них, A-B или B-A.

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

Кстати, одна из его модификаций, с обострённой чувствительностью к спирту, стоит в полицейских датчиках спирта, которым «дышат в трубку».

Попробуем подключить его к STM32!

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

Для начала давайте рассмотрим схему включения.

Всё просто: нагреватель питается от 5 вольт, а чтобы измерить сопротивление сенсора - он включается в состав резистивного делителя, и измеряется напряжение на выходе этого резистора. При известном сопротивлении резистора и напряжении питания сопротивление сенсора рассчитывается как r1 = r2*(u/uout-1).

Конкретно у меня датчик распаян на плате, которая содержит этот дополнительный резистор - она выдаёт наружу сразу нужное напряжение. Чтобы измерить это напряжение с помощью STM32, нам потребуется модуль АЦП. Программа практически повторяет код из той статьи.

Void adc_init() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //ADC settings ADC_InitTypeDef ADC_InitStructure; ADC_StructInit(&ADC_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); //Channel settings ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); } uint16_t getCO2Level() { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); return ADC_GetConversionValue(ADC1); } int main() { adc_init(); uint16_t co2; while(1) { co2 = getCO2Level(); delay(10000000); } }

Особенности

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

Датчик очень медленно выходит на режим. В первый раз его обязательно нужно прогреть не менее 24 часов. При следующих включениях требуется хотя бы 10-минутный прогрев.

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

На моей плате дополнительно размещён ОУ с переменным резистором - к ним подключен светодиод и вывод «DOUT». Это простой настраиваемый пороговый индикатор, светодиод загорится когда концентрация углекислого газа превысит заданное значение.

Post Views: 609

gastroguru © 2017