Андрей Смирнов
Время чтения: ~12 мин.
Просмотров: 5

Оценка качества воздуха с Arduino

Датчик MQ-135 поможет проверить качество воздуха в вашей квартире или офисе.%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq135:troyka-mq135_scheme_troyka-shiled.png С Troyka Slot Shield можно обойтись без лишних проводов. %D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq135:troyka-mq135_scheme_troyka-slot-shiled.png

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

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

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

К платам Arduino c 5 вольтовой логикой датчик можно подключить используя всего один трёхпроводной шлейф. Для этого установите перемычку на разъём «выбор питания нагревателя». %D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:mq135:troyka-mq135_scheme_troyka-shiled_without_heater.png

Выведем в 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("tCO2: ");   Serial.print(mq135.readCO2());   Serial.println(" ppm");   delay(100);}

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

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

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

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

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

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

Контакты подключения трёхпроводных шлейфов

1 группа

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

2 группа

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

Принципиальная и монтажная схемы

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

  • Аммиак: 10—300 ppm
  • Бензин: 10—1000 ppm
  • Алкоголь: 10—300 ppm

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

  • Напряжение питания нагревателя: 5 В
  • Напряжение питания датчика: 3,3–5 В
  • Потребляемый ток: 150 мА
  • Габариты: 25,4×25,4 мм

Ресурсы

  • Датчик газа MQ135 (Troyka-модуль) в магазине.
  • Библиотека для Arduino
  • Описание библиотеки для Iskra JS
  • Векторное изображение датчика газа MQ135 (Troyka-модуль)
  • Datasheet на датчик MQ135
  • Линейная и логарифмическая аппроксимация датчика MQ135
  • Цена: $1.44

Собственно, нестерпимое желание приобрести именно этот датчик у меня появилось после чтения пламенных комментариев к посту о приборе AirMaster AM7. С одной стороны, прибор, конечно, хорош, но стоит на пару порядков дороже MQ135 — а это, как мы знаем, решающий фактор, когда хочется просто поиграться, а потом поставить игрушечку на полку. К тому же, я решил, что мне вполне достаточно иметь под руками некоторую синтетическую оценку качества воздуха (более-менее соотносящуюся с реальностью), тогда как без абсолютных показателей как-нибудь обойдусь. Датчик присылают в обычном антистатическом пакетике, который до этих дней не сохранился — да и было бы что сохранять, если уж задуматься. А то, что называют датчиком, здесь на самом деле датчик, размещенный на плате со всей необходимой (и не слишком необходимой) обвязкой. По поводу необходимой обвязки документация нам говорит, что достаточно всего одного сопротивления:

На практике же схема выглядит очень похожей на найденную на просторах этого нашего интернета: Разница, как видите, в том, что нагреватель включен через резистор, вместо подстроечника на выходе — постоянное сопротивление, ну и добавлен операционный усилитель, который, насколько я понял, используется в качестве компаратора. Порог срабатывания компаратора изменяется с помощью подстроечного резистора, а срабатывание при превышении порога (допустимой концентрации регистрируемых газов) отображается свечением зеленого светодиода. Питается датчик от 5В, потребляет (по документации) менее 800 мВт. При этом надо понимать, что кушает он прилично, и львиная доля потребляемого тока идет на подогрев чувствительного элемента. Температура которого после нескольких часов работы выше предела регистрации бытовым термометром (т.е. больше 42C), на ощупь датчик теплый, но не обжигающий. Несмотря на невысокую температуру корпуса, датчик прикрыт специальной сеточкой, предназначенной исключать возможность взрыва или возгорания горючих газов. Похожая защита в свое время применялась в шахтерских лампах. Исходя из вышесказанного понятно, что в автономных системах применять датчик нецелесообразно: будучи постоянно включенным вместе с Arduino Mega, MQ135 этой модификации скушал аккумулятор в 10 Ач (ну, плюс-минус китайских Ач) менее чем за сутки. И, конечно, понятно, что если особенно прижмет сделать «автономку», включаться можно эпизодически — так это пожалуйста, я не запрещаю. Но ест он все равно много. Измеренный мультиметром потребляемый ток составляет около 130 мА. Размеры датчика (примерно) (ВхШхГ): 22х20х32 мм. Ноги датчика, как видите, по какой-то причине не обкусаны: Как эта штуковина работает? Вот честно, я не знаю. Наверное, там какая-то магия и радужные единороги, но в документации почему-то говорится о том, что регистрируемые датчиком газы влияют на сопротивление принудительно подогреваемого измерительного элемента. Который подходит для обнаружения (согласно документации): аммиака (NH3), окисей азота (NOx), алкоголя (не указано какого, можно думать о всех спиртах), бензола, CO2, дыма и, как принято — etc. Результат выдается в аналоговом виде на пин A0 и в дискретном (после компаратора) — на пин D0. Отсюда вывод: аналоговый выход датчика подходит для наблюдения динамики качества воздуха, тогда как цифровой (D0) — для оповещения о превышении некоторого порога. Второй вывод: теоретически для использования датчика не нужны вообще никакие библиотеки. Просто подключаем его, например, к Arduino и читаем состояние аналогового и/или цифрового выхода. Ну вот хоть так: Кроме того, прямо на плате есть и светодиод, показывающий работу компаратора, что, опять же чисто теоретически позволяет использовать датчик вообще без каких-либо контроллеров. Если, конечно, удастся подобрать нужный порог срабатывания компаратора. Внимательный читатель может догадаться, что в первую очередь я подключил MQ135 к плате Arduino Mega и посмотрел, что там на аналоговом и цифровом выходах. Там, в общем, никаких особых сюрпризов. Ну, кроме того, что когда светодиод компаратора горит, на цифровом выходе на самом деле 0. Особой роли это не играет, но перфекционистам придется туго. Показания аналогового выхода в нормальной атмосфере, судя по всему, находятся в нижней трети диапазона измерений ЦАП Arduino. Состояние цифрового выхода зависит от положения подстроечного резистора и, конечно, качества воздуха. Вот так выглядит «подышать в трубочку»: А так как аппетит приходит во время еды, то следующим делом я поискал библиотеку, которая позволила получить хотя бы примерную концентрацию CO2 в воздухе. Нашел вот такую. Теория, которая стоит за библиотекой гласит следующее: диоксид углерода, он же CO2 — четвертый по распространенности газ в атмосфере Земли. Остальные регистрируемые датчиком вещества в газообразном состоянии встречаются (на наше счастье) гораздо, гораздо реже. Но при этом чувствительность ко всем этим газам у MQ135 примерно одинаковая, что, в принципе, позволяет использовать его в первую очередь как датчик CO2. В результате пользоваться библиотекой очень просто, но есть нюансы. Первый вытекает из той же документации по датчику, которая настаивает на 24-часовом прогреве датчика перед его реальным использованием. Второй же заключается в том, что по умолчанию библиотека рассчитана на нагрузочное сопротивление в 10 кОм, тогда как мой экземпляр платы укомплектован резистором в 1 кОм. По счастью, второе легко решается редактированием кода библиотеки — спасибо Георгу Крокеру, что он подумал и о такой мелочи. Я же замечу, что калибровать следует только после того, как убедитесь, что в коде библиотеки задано верное значение сопротивления, иначе калибровочные данные вас удивят. Итак, датчик прогрет, сопротивление задано верно. Что дальше? Дальше его нужно откалибровать, для чего пишем небольшой код, который набирает статистику по калибровочным данным и выставляем всю конструкцию на свежий воздух, при предпочтительной температуре около 20С на полчаса или около того. Вот комбинированный код, чтобы посмотреть текущие и/или калибровочные данные: Затем усредняем полученные (калибровочные) показатели, добавляем их в ту же библиотеку (заменив оригинальное значение калибровки) и наслаждаемся показаниями, заявленными близкими ко всеми любимым ppm, но не забываем про магию и радужных единорогов. На всякий случай сообщаю, что «добавляем в библиотеку» означает редактирование приведенных ниже строк в файле MQ135.h библиотеки MQ135: Здесь, например, уже задано актуальное для платы сопротивление и полученный опытным путем индекс калибровки. Индекс настоятельно рекомендую посчитать, поскольку он может быть разным для разных экземпляров датчика. К великому сожалению, узнать, насколько актуальны показания получившейся системы, я не могу: специального прибора у меня нет, а на сайте Мосэкомониторинга данные о концентрации CO2 в моем районе не приводятся. Да и вообще особо не приводятся, поскольку этот газ, похоже, не считается загрязняющим. Но хочу заметить, что датчик выдает довольно стабильные показания, которые также очень неплохо соотносятся с происходящим. К примеру, на приведенной ниже иллюстрации видно, как показания довольно резко пошли наверх, когда в комнате закрыли окно (около 18:00), и как они не менее стремительно стали снижаться, когда окно открыли (около 20:00): Что касается цифрового выхода и компаратора, то его работа мне не очень понравилась, поскольку в обычных условиях он начинает срабатывать уже в самом начале (или конце — как посмотреть) диапазона регулировки подстроечного резистора. Если найти какой-нибудь нормированный генератор CO2, тогда можно еще поиграться с настройкой, но где же такую фиговину найдешь? Другое дело — ненормированный, в качестве которого можно использовать себя любимого: дыхнешь — лампочка загорелась. И хотя может показаться, что именно так я и планирую развлекать себя в ближайшее время, но нет. Пока что строю амбициозные планы на прибор для автоматического проветривания на основе температуры внутри/снаружи и качества воздуха внутри помещения. Если удастся найти подходящий привод окна и справиться с управлением — доложу отдельно. ps. как обычно, в комментариях приветствуются чад кутежа и всяческий угар ссылки на более интересную цену, любопытные аналоги с учетом заявленной цели, ваши изделия, мысли о том, как лучше откалибровать MQ135 и предложения одолжить для этой благородной задачи ваш измерительный прибор. Ну и вообще.

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

deaf3c9379dec4b25e32ed43dc26dcf3.jpg

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

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

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

Для того чтобы стало понятно, чем вы дышите, нам понадобится специальный датчик газа под названием

Купить его можно в нашем магазине: Датчик MQ-135.

0144c617301e40d21e5774bfb6a3cdbe.jpg

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

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

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

19eaaeaf32bf3356b32cd34d0589149a.jpg

Измеряет содержание тех или иных газов в воздухе (метан, водород, пропан и др.) в величинах ppm – (миллионная доля) единица концентрации.

Также есть определенный диапазон измерений.

Например, для аммиака это 10ppm-300ppm; для бензина 10ppm-1000ppm; для спирта 10ppm-300ppm.

Полный даташит на датчик есть здесь

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

Вот табличка предельно допустимой концентрации газов в воздухе:

1a2fbef67b09a48f0be724d3a6083eb2.jpg

Давайте разберемся с аммиаком. Во-первых, смотрим на единицы измерения. В таблице это мг/м3. Значение ppm измеряется в мг/л или в мг/дм3 Значит 0,2 мг/м3 это 200 мг/дм3 или 200 ppm. Значит содержание аммиака в воздухе более 200 ppm опасно для человека, а наш датчик сможет это смело зафиксировать и измерить. Теперь загрузим следующий программный код в плату:

В примере демонстрируется подключение датчика и вывод полученных данных в монитор Serial — порта

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

Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.

Поделиться: Используемые источники:

  • http://wiki.amperka.ru/продукты:mq135
  • https://mysku.ru/blog/aliexpress/41409.html
  • https://amperkot.ru/blog/mq135/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации