Рубрики
Схемы на Arduino

Измерение уровня аммиака в воздухе с помощью датчика газа MQ-137 и Arduino

С связи с ежегодным увеличением уровня загрязнения воздуха с каждым годом все более актуальной становится задача мониторинга качества воздуха. В этой статье мы рассмотрим подключение датчиков газа серии MQ к плате Arduino и измерение с их помощью концентрации газов в воздухе в единицах PPM (parts per million – частиц на миллион). Единицы PPM эквивалентны также такой единице измерений как миллиграммы на литр (mg/L).

Существуют следующие разновидности датчиков газа серии MQ:

  • Carbon Dioxide (CO2) : MG-811 (для измерения углекислого газа);
  • Carbon Monoxide (CO): MQ-9 (для измерения угарного газа);
  • Total Volatile Organic Compounds (TVOCs): CCS811 (для измерения летучих органических соединений);
  • Equivalent Carbon Dioxide (eCO2): CCS811 (для измерения эквивалента углекислого газа);
  • Metal Oxide (MOX): CCS811 (для измерения окислов металла);
  • Ammonia: MQ-137 (для измерения аммиака);
  • Air Quality: MQ-135 (для измерения качества воздуха);
  • LPG, Alcohol, Smoke: MQ2 (для измерения сжиженного нефтяного газа, алкоголя, дыма).

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

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

Подготовка аппаратной части проекта

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

Схема подключения и распиновка датчика газа показаны на следующем рисунке:

Как можно видеть из схемы, вы должны соединить один конец вывода ‘H’ к источнику, а другой конец вывода ‘H’ – к земле. Затем вы должны объединить два вывода A’s и два выхода B’s и соединить один набор этих выводов с источником напряжения, а второй – с аналоговым контактом. Весьма важную роль в работе датчика газа играет показанный на схеме резистор RL – рекомендуется чтобы он имел сопротивление 47 кОм, хотя можно использовать и другие номиналы данного резистора.

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

Как вы можете видеть из представленной схемы, резистор RL (R2) подключен между контактом Aout и землей. Поэтому с помощью мультиметра (в режиме измерения сопротивлений) вы можете измерить сопротивление резистора RL подключив мультиметр к разъемам Vout и Vcc модуля. В нашем датчике газа MQ-137 сопротивление резистора RL оказалось 1 кОм и он расположен на плате в месте, обведенном на следующем рисунке красным эллипсом.

Как отмечалось, лучше всего при работе с подобным датчиком использовать резистор RL сопротивлением 47 кОм. Поэтому мы вручную отпаяли этот резистор с платы нашего датчика и припаяли туда резистор сопротивлением 47 кОм.

Общие принципы измерения концентрации газов с использованием датчиков газа серии MQ

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

Как видно из представленного рисунка, датчик MQ137 может измерять концентрацию таких газов как NH3, C2H6O и даже CO. Но нас в нашем проекте будет интересовать только NH3. Но вы можете использовать наш метод, описанный ниже, для измерения концентрации любого из этих газов. Как видно из графика, найти концентрацию газа мы сможем если будем знать значения сопротивлений Rs и Ro. Значение Rs – это сопротивление датчика при текущей концентрации газа, а Ro – его сопротивление в чистом воздухе.

Расчет сопротивления Ro в чистом воздухе

Из приведенного графика видно, что отношение сопротивлений Rs/Ro является константой для воздуха (жирная синяя линия на графике), поэтому мы можем использовать это и сделать допущение что при работе в свежем воздухе отношение этих сопротивлений равно 3.6 как показано на следующем рисунке.

Rs/Ro = 3.6

Из даташита на датчик нам также известна формула для расчета значения Rs, показанная на рисунке ниже. Если вас интересует откуда взялась данная формула, то вы можете почитать руководство от jay con systems (на английском языке) — весьма подробное руководство, очень полезно изучить если вы детально хотите разобраться в этой теме.

В этой формуле значение Vc – это значение нашего питающего напряжения (+5V), а значение RL, как мы уже определились, в нашем случае будет равно 47 кОм. Если мы напишем небольшую программу для Arduino, мы также сможем найти значение VRL и после этого окончательно рассчитать значение Rs. Далее представлен код этой программы для Arduino, которая считывает аналоговое напряжение VRL с датчика, рассчитывает значение Rs по приведенной формуле и затем отображает его в окне монитора последовательной связи (serial monitor).

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

Для нашего датчика у нас получилось значение Ro приблизительно 30 кОм (когда значение RL равно 47 кОм). Для используемого вами датчика значение Ro может немного отличаться.

Измерение значения Rs

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

Расчет концентрации газа в PPM исходя из отношения Rs/Ro

Теперь, когда мы знаем как рассчитывать Rs и Ro, мы можем определить их отношение, и на основании этого определить концентрацию газа в PPM по известному нам из даташита графику.

Хотя линия аммиака (NH3) на графике (голубого цвета) кажется прямолинейной, на самом деле она не является прямой линией. Это ощущение возникает из-за того, что масштаб графика нелинейный. На самом деле зависимость между Rs/Ro и PPM изменяется по логарифмическому закону и определяется следующей формулой:

log(y) = m*log(x) + b

где
y = отношение (Rs/Ro),
x = PPM,
m = наклон линии,
b = точка пересечения.

Чтобы найти значения m и b мы должны рассмотреть две точки (x1,y1) и (x2,y2) на линии интересующего нас газа. Поскольку в этом проекте мы определяем концентрацию аммиака, то мы взяли точки (40,1) и (100,0.8) как показано на приведенном рисунке (отмечены на рисунке красным цветом).

m = [log(y2) - log(y1)] / [log(x2) - log(x1)]
m = log(0.8/1) / log(100/40)
m = -0.243

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

b = log(y) - m*log(x)
b = log(0.75) - (-0.243)*log(70)
b = 0.323

Теперь, когда мы знаем значения коэффициентов m и b, мы можем по известному значению Rs/Ro, рассчитать PPM газа по следующей формуле:

PPM = 10 ^ {[log(ratio) — b] / m}

Программа для расчета PPM аммиака с использованием датчика серии MQ

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

Перед тем как начинать писать программу мы должны узнать значения сопротивления нагрузки датчика (RL), наклон кривой (m), значение коэффициента b (точка пересечения) и значение сопротивления Ro в чистом воздухе. Все эти вопросы уже были рассмотрены выше в статье, поэтому подробно останавливаться снова на этих вопросах здесь не будем.

Затем мы считываем падение напряжение на датчике (VRL) и конвертируем его в значение напряжения от 0 до 5 В, поскольку на выходе АЦП аналогового входа Arduino возможный диапазон значений составляет от 0 до 1024.

Теперь, когда мы знаем значение VRL, используем выше приведенную формулу для расчета значения Rs, а также отношения (Rs/Ro).

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

Работа схемы

Схема проектируемого нами обнаружителя аммиака в воздухе представлена на следующем рисунке.

Сделайте все соединения, показанные на схеме, после этого можете загружать программу (приведена в конце статьи) в плату Arduino. Не забудьте изменить значение Ro как объяснено выше в статье. Также внесите необходимые изменения в программу если у вас сопротивление резистора RL отлично от 47 кОм.

Подайте питание на схему и оставьте ее в работающем состоянии по меньшей мере на 2 часа (для максимальной точности результатов рекомендуется 48 часов) – это время необходимо для нагрева датчика газа. После этого на экране ЖК дисплея вы можете наблюдать измеренное значение PPM газа (в нашем случае аммиака).

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

Более подробно работа проекта продемонстрирована на видео, приведенном в конце статьи.

Исходный код программы

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

Видео, демонстрирующее работу схемы

2 ответа к “Измерение уровня аммиака в воздухе с помощью датчика газа MQ-137 и Arduino”

Здравствуйте! Благодарю за статью! Изучаю этот сенсор, всё работает, НО, его диапазон до 500 ppm, а когда я ставлю на него крышку от баночки с аммиаком, показания прыгают за 10000 ppm. Почему так? Или в документации диапазон с гарантированной точностью? А как тогда ограничить вывод до 500 ppm? Ардуиновскими функциями? Заранее благодарю!

Добрый вечер. К сожалению почему так сильно у вас показания прыгают, я не знаю. А ограничить диапазон выводимых значений достаточно просто — используя функцию «map», с помощью которой можно конвертировать любой диапазон данных в необходимый вам диапазон данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *