Подключение mq 135 к pic. Датчики газа серия MQ (Trema-модуль v2.0). Самая неприятная проблема

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

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

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

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

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

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

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

По поводу необходимой обвязки нам говорит, что достаточно всего одного сопротивления:

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

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

Питается датчик от 5В, потребляет (по документации) менее 800 мВт. При этом надо понимать, что кушает он прилично, и львиная доля потребляемого тока идет на подогрев чувствительного элемента. Температура которого после нескольких часов работы выше предела регистрации бытовым термометром (т.е. больше 42C), на ощупь датчик теплый, но не обжигающий.

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

Исходя из вышесказанного понятно, что в автономных системах применять датчик нецелесообразно: будучи постоянно включенным вместе с Arduino Mega, MQ135 этой модификации скушал аккумулятор в 10 Ач (ну, плюс-минус китайских Ач) менее чем за сутки. И, конечно, понятно, что если особенно прижмет сделать «автономку», включаться можно эпизодически - так это пожалуйста, я не запрещаю.

Но ест он все равно много. Измеренный мультиметром потребляемый ток составляет около 130 мА.

Размеры датчика (примерно) (ВхШхГ): 22х20х32 мм. Ноги датчика, как видите, по какой-то причине не обкусаны:

Как эта штуковина работает? Вот честно, я не знаю. Наверное, там какая-то магия и радужные единороги, но в документации почему-то говорится о том, что регистрируемые датчиком газы влияют на сопротивление принудительно подогреваемого измерительного элемента. Который подходит для обнаружения (согласно документации): аммиака (NH3), окисей азота (NOx), алкоголя (не указано какого, можно думать о всех спиртах), бензола, CO2, дыма и, как принято - etc.

Результат выдается в аналоговом виде на пин A0 и в дискретном (после компаратора) - на пин D0.

Отсюда вывод: аналоговый выход датчика подходит для наблюдения динамики качества воздуха, тогда как цифровой (D0) - для оповещения о превышении некоторого порога.

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

Ну вот хоть так:

#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino #define digitalPin 3 // цифровой выход подключен к пину 3 float analogValue; // для аналогового значения byte digitalValue; // для цифрового значения, можно, кстати и boolean, но не суть void setup() { Serial.begin(9600); // инициализация последовательного порта pinMode(analogPin, INPUT); // режим работы аналогового пина pinMode(digitalPin, INPUT); // режим работы цифрового пина delay(1000); // устаканимся } void loop() { analogValue = analogRead(analogPin); // чтение аналогового значения digitalValue = digitalRead(3); // чтение цифрового значения Serial.print("Current value: "); // вывод аналогового значения в последовательный порт Serial.println(analogValue); Serial.print("Threshold: "); // вывод цифрового значения в аналоговый порт Serial.println(digitalValue); delay(5000); // задержка, чтобы не мельтешило перед глазами }

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

Внимательный читатель может догадаться, что в первую очередь я подключил MQ135 к плате Arduino Mega и посмотрел, что там на аналоговом и цифровом выходах. Там, в общем, никаких особых сюрпризов. Ну, кроме того, что когда светодиод компаратора горит, на цифровом выходе на самом деле 0. Особой роли это не играет, но перфекционистам придется туго.

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

Вот так выглядит «подышать в трубочку»:

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

Теория, которая стоит за библиотекой гласит следующее: диоксид углерода, он же CO2 - четвертый по распространенности газ в атмосфере Земли. Остальные регистрируемые датчиком вещества в газообразном состоянии встречаются (на наше счастье) гораздо, гораздо реже. Но при этом чувствительность ко всем этим газам у MQ135 примерно одинаковая, что, в принципе, позволяет использовать его в первую очередь как датчик CO2.

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

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

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

Вот комбинированный код, чтобы посмотреть текущие и/или калибровочные данные:

#include // подключение библиотеки #define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino MQ135 gasSensor = MQ135(analogPin); // инициализация объекта датчика void setup() { Serial.begin(9600); // последовательный порт для отображения данных delay(1000); // устаканимся } void loop() { float ppm = gasSensor.getPPM(); // чтение данных концентрации CO2 Serial.println(ppm); // выдача в последовательный порт float rzero = gasSensor.getRZero(); // чтение калибровочных данных Serial.println(rzero); // выдача в последовательный порт delay(5000); // просто задержка, чтобы не мельтешило перед глазами }

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

На всякий случай сообщаю, что «добавляем в библиотеку» означает редактирование приведенных ниже строк в файле MQ135.h библиотеки MQ135:

/// The load resistance on the board #define RLOAD 1.0 /// Calibration resistance at atmospheric CO2 level #define RZERO 396.57

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

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

Но хочу заметить, что датчик выдает довольно стабильные показания, которые также очень неплохо соотносятся с происходящим. К примеру, на приведенной ниже иллюстрации видно, как показания довольно резко пошли наверх, когда в комнате закрыли окно (около 18:00), и как они не менее стремительно стали снижаться, когда окно открыли (около 20:00):

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

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

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

Если удастся найти подходящий привод окна и справиться с управлением - доложу отдельно.

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

Планирую купить +50 Добавить в избранное Обзор понравился +44 +76

В бытность появления у меня набора 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 подключается к управляющей электронике по 5 проводам. Для подключения используются два . Для быстрого подключения модуля к Iskra JS или Arduino используйте . С можно обойтись без лишних проводов.

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

Для обладателей платформ Arduino выведем в Serial-порт текущее значение вредных газов в ppm , управляя нагревателем. Для запуска примера скачайте и установите библиотеку TroykaMQ .

mq135Heater.ino #include #define PIN_MQ135 A0 // имя для пина, к которому подключен нагреватель датчика #define PIN_MQ135_HEATER 11 // создаём объект для работы с датчиком // и передаём ему номер пина выходного сигнала и нагревателя Serial.begin (9600 ) ; // включаем нагреватель mq135.heaterPwrHigh () ; Serial.println ("Heated sensor" ) ; } void loop() { // если прошёл интервал нагрева датчика // и калибровка не была совершена if (! mq135.isCalibrated () && mq135.heatingCompleted () ) { mq135.calibrate () ; // если известно сопротивление датчика на чистом воздухе // mq135.calibrate(160); Serial.print ("Ro = " ) ; Serial.println (mq135.getRo () ) ; } // если прошёл интевал нагрева датчика // и калибровка была совершена if (mq135.isCalibrated () && mq135.heatingCompleted () ) { Serial.print ("\t CO2: " ) ; Serial.print (mq135.readCO2 () ) ; Serial.println (" ppm" ) ; delay(100 ) ; } }

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

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

mq135.ino // библиотека для работы с датчиками MQ (Troyka-модуль) #include // имя для пина, к которому подключен датчик #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 ("\t CO2: " ) ; Serial.print (mq135.readCO2 () ) ; Serial.println (" ppm" ) ; delay(100 ) ; }

Познакомимся с простым датчиком 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 (старый не безопасный вариант, без делителя напряжения на резисторах).

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

gastroguru © 2017