Работа с датчиком газа MQ135
- Войдите на сайт для отправки комментариев
Вс, 09/11/2014 - 00:14
Добрый день!
Помогите пожалуйста правильно подключить к arduino датчик газа MQ135. Он распаян вместе с компаратором LM393.
На DX значится как FC-22-1
пример подключения голого MQ135 я нашел
но как управляться с FC-22 я не понял
у него 2 вывода: цифровой и аналоговый. Вроде бы 1го достаточно для работы, 2 вместе включают для большей точности. Так же на FC есть переменный резистор для регулировки.
По даташиту понятно что чем меньше сопротивление, тем сильнее загрязнен воздух, но как выставить 0, искать чистый воздух? И как MQ работает с ML тоже не понятно.
от двух никакой большей точности нет. просто один выход аналоговый, измеряй и сам решай что делать
другой цифровой. настроил уровень срабатывания и отслеживай. можешь к рэле например подключить и будет включаться вытяжка
дык вроде черным по белому
Analog output voltage: 0~5V, the higher concentration, the higher voltage
Подключить к аналоговому входу, считывать значение analogRead в диапазоне 0....1023 и анализировать, проветривать там или противогазы одевать :)
что конкретно не получается?
мне лень почитать ДадаСхема
почитайте за меня
хам
A0 — означает что сигнал можно считать динамично. И применив специльную формулу, вычислить содержание CO2 (пусть и не точно).
D0 — либо 1 либо 0, в зависимости от того превышен ли установленный порог переменным резистром.
Таким образом, датчик можно использовать без Arduino, например совместно с реле, запитывав D0 как выход сигнала 5V или 0V
Помогите пожалуйста, как мне рассчитать концетрацию углекислого газа (хоть и неточно)? Заранее спасибо!
Помогите пожалуйста, как мне рассчитать концетрацию углекислого газа (хоть и неточно)? Заранее спасибо!
Библиотека для Arduino MQ135
Ниже фрагмент кода из библиотеки с функциями, что Вам нужны, сам не пробывал датчика нет.
Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:
Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:
Зачем вам эта библиотека!
Берите данные с аналогового пина через analogRead(); и если данные превысили опасныое значение врубайте сирену или еще что. Данные после включения будет в диапазоне от 0 до 1024.
есть второй вариант мониторить цифровой пин через digitalRead и как только станет HIGH врубайте сирену или еще что,синим резистором на плате регулируется порог срабатывания.
Я к тини13 такие датчики подрубаю без всяких библиотек и все корректно и просто.
Это-то я осилил, но для общего развития хочется получить более точный резулттат. Тем более что в библиотеке присутсвует функция коррекции показаний с учётом влажности и температуры
Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:
Прошу Вас изучите хоть немного си и среду разработки. В библиотеке примеров быть и не должно, зачем там этот лишний код (можете поискать примеры в интернете). В самой библиотеке кода очень мало, там всего лишь несколько функций для конвертации аналогового сигнала в более подходящие значения по CO2, такие как концентрация частиц на миллион (ppm). Для того чтобы воспользоваться билбиотекой её нужно установить в вашу среду разработки. Предполагаю, что у Вас это Arduino IDE, и если мне память не изменяет, то там есть пункт меню "add zip librarry" при помощи которого и добавляете себе эту библиотеку (все файлы в сылке, что я давал перед этим скачиваете себе упаковываете в зип архив, а после добавляете). В своем коде подключаете библиотеку, создаете экземпляр класса MQ135, где в конструктор передаете номер входного пина датчика (не забываем перед этим пин установить в режим на чтение, обычно это делают в методе Setup), но а после для созданного экземпляра MQ135 вызываете методы, что я выше в сообщениях привел. Правда не понятно в каком виде нужно передать температуру (цельсий или кельвин) и влажность. Но можно либо спросить у разработчика, либо найти внятное описание, либо попробовать поработать методом тыка.
Вбив в поисковой строке яндекса "github GeorgK MQ135", то в конце первой страницы поиска нашел Вам описание с примерами кода, вот ссылка, вот тут на том же ресурсе более подробно описан процесс подключения и расчета с совместным использованием датчика DTH11. Надо же хотя бы чуть чуть самому пытаться, что то сделать, а то опыта долго будете набираться.
Вот и я стал счастлиым владельцем этого чуда. Подключил, залил.
Он выдал.
Дрейф нуля жуть.. Это у всех так? Это каждое включение так?
ПС. пики - это я на него дыхнул ;)
Пока набрал пост - упал до 200. Он в минус уходит? ;)
Дык свежий надо прокаливать сутки где-то, емнип.
Просто дать поработать или режим какой особый?
ПС. Уже показывает 160 :)
Просто дать ему поработать сутки, не выключая - в даташите сказано об этом, опять же, емнип.
Стоял включенным все время. Упал до 100, скорость падения все время снижается.
При приближении меня унюхивает на пару единиц, дыхнеш - на пару десятков.
Решил я с утра полочку лакировать....
Плавный рост - это на балконе лак с растворителем мешаю и в соседней комнате полку лакирую, острый пик - подошел с банкой и кисточкой к испытуемому. Потом унес раздражители, и проветривается, ну и сохнет лак. Дальше скорост роста замедлилась, но доросло медлено до 230 и начало снижатся.
Вот такой нюхачь. )))
Задачей данного датчика как раз и является определение качества воздуха, вполне хороший результат его работы. Верной дорогой идете товарищ.
что за график ? как сделали? и кстати какие показания датчик долже выдавать в хорошо проветренном помещение? (чтобы подстроечным резистором настроить)
График выходного напряжения, через 0,2сек. Скетч выше, построен в екселе. Скоко должен - сам хочу узнать. Потому и играюсь с ним.
Посдстроечником калибруют датчик под уже известные значения. А вот для того чтобы он выдавал более менее верные значения в коде нужно знать, какое сопротивление стоит на датчике, и прописать его в коде "mq135.h" библиотеки (см ссылку давал выше).
так же не так давно нашел хороший обзор по данному датчику http://mysku.ru/blog/aliexpress/41409.html там все описано подробно и про сопротивление.
Почти сутки ганяю сабж. Непрерывно включен. Вроде как дрейф нуля прекратился, Общие впечатления.
Штука годная, чувствительная, чувствительней моего носа. Инерционная при очищении воздуха, после газовой атаки, показания по експоненте спадают и могут устаканиватся минут 10. Минимальный сигнал полученый с него был 83 - перед грозой, дул чистый ветер. Обычные показания 100 плюс минус 10. Грубо: улице 90 в квартире 100. Если рядом человек плюс 5-10 единиц. При 120 и выше уже я начинаю ощущать запах. Алкоголь и органические растворители чует очень хороше, срабатывает моментально, но попускает долго.
Говорить о нем как о измерителе безсмысленно прежде всего из-за никакой селективности, каждый кто захочет получить с него ppm пусть сразу ответит себе какого газа этот ppm. Потому соответственно либы и формулы - в топку. Заглянул к стати на страничку автора либы http://davidegironi.blogspot.ru/2014/01/cheap-co2-meter-using-mq135-sensor-with.html#.V1rOIdZnX6N . Чувак отжигает, расчет с 8 знаками после запятой, калибрует по СО2 с сайта гавайской обсерватории... :) В общем с либой все ясно.
Самое неприятное впечатление - питание измерительного делителя от общей с нагревателем цепи 5В. Это создает проблему - для повышения стабильности стабилизировать питание делителя можно только с довеском потребляющим много. Пока вероятно ограничусь измерением этих самых 5В питания известным способом на АЦП контроллера и коррекцией показаний с учетом этого. Вести расчет в абсолютных единицах безсмысленно, т.к. результат всеравно в "попугаях".
Про подстроечник на плате. Он не калибровочный. Он просто задает уровень компаратора на выходе, на аналоговый выход он не влияет.
Вот уж мне открыли Америку ). СО2 датчики нормальные стоят гораздо дороже, а хорошие
и того более, но если к примеру собираетесь в теплице ставить генератор углекислого газа, то данного датчика вполне может хватить для того чтобы понимать насколько там опасно находится и какой там приблизительно ppm CO2 и как он влияет на растения. А в целом данный датчик предназначен анализировать воздух, и выдавать все нормально или все же лучше проветрить помещение или убраться от сюда по дальше.
Не открывал я ниче. Но про теплицу - нужно понимать что большая цифра с датчика в теплице может означать:
1. Слишком много СО2.
2. Растения зацвели и пахнут сильно.
3. Чтото уже гниет.
Понятно что низкая цена окупает многое но и усложняет применение.
Это не датчик СО2, ненадо так его называть, это датчик ... дурного воздуха шоле )))
///выдавать все нормально или все же лучше проветрить
да да. именно шотодетотак. Вот я на вытяжку сегодня и поглядывать стал.
Добрый день, помогите решить проблему.
У нас в квартире совместный сан. узел и периодически вытяжка работает совсем не так как задумывалась. То есть все неприятные запахи прям дуют к нам через вытяжку. Я так полагаю у кого то из соседей стоит принудительная вытяжка. Так вот, я тоже хочу поставить принудительную но что бы она молотила не постоянно, а как только датчик учуял что то неладное то запускаем принудительную.
Какие вообще необходимы датчики, программаторы для реализации такого устройства?
Если цель - просто избавиться от запахов, то поставьте обратный клапан на канал вытяжки.
Пользуясь случаем провел эксперимент. Сунул датчик чашку и туда же трубку с емкости с активыным брожением. По идее чашка должеа быть полна СО2 с небольшими примесями набродившего. Показания датчика выросли с 45мВ до 300мВ. Делаем вывод по чувствительности к СО2.
У меня вообще не понятно что происходит, включаю раз пятый поиграться , но на короткое время, сейчас стоит уже 4 часа, показания 7!!!! Почему так мало? Засунул в пакет подышал, 17... поднес зажигалку, 900....
7 попугаев? Без единиц измерения можна только про соотношения при подішал и газонул говорить. Соотношения похожи на правду.
7 попугаев? Без единиц измерения можна только про соотношения при подішал и газонул говорить. Соотношения похожи на правду.
это понятно, просто у некоторых 70 и более а у меня только 7.....
и кстате, если эта тема еще жива, то предлагаю обсудить пользование таким датчиком не в теории а в деле.
На самом деле, как показал мой опыт сегодня, просто указать в коде условие, если показания больше или равно 7 попугаев, то включить релее..., наступает такой момент, что 7 попугаев это пограничная величина, тоесть идет каждую минуту опрос и он то 6 то 7 то 8, и реле все время то включается то выключается, прибор такой частоты не выдержит, сгорит обязательно, нужно придумать какое то усреднение, что б все таки не было такого , что б вкл и выкл подряд зацыклен
///это понятно, просто у некоторых 70 и более а у меня только 7.....
Чего 70? Чего 7? Еденицы какие ))) Может у Вас 7 тон, а вы жалутесь что меньше чем 70кг. ))
//реле все время то включается то выключается, прибор такой частоты не выдержит, сгорит обязательно
Тут 100 способов. Например после очередного переключения реле делаем паузу, пару минут ничего не проверяем и не переключаем.
Кроме того, у него "отходняк" долгий, я сегодня решил его тоже газом от зажигалки угостить. Вот
Шкала между прочим логарифмическая, скачек от 45мВ до 300мВ. По горизонтали часы. Он теперь пару дней отходить будет ))
Немного апну тему. Но, как мне кажется, мой вопрос как раз в нее должен писаться.
Почему-то во всех библиотеках как-то странно вычисляется сопротивление датчика:
В чстности непонятен множитель 5 и почему 1023, а не 1024.
Приведу пример своих рссуждений. может кто меня поправит:
Датчик с сопротивлением Rд включен последовательно с резистором нагрузки Rн. Значит ток в цепи вычисляется по формуле:
I = Uпит/(Rд+Rн).
Напряжение, которое мы замеряем на нагрузочном резисторе можно вычислить так: Uн = I * Rн, если подставить сюда ток из первой формулы - получаем
Uн = Uпит * Rн / (Rд + Rн) => Uн*Rд + Uн*Rн = Uпит*Rн
И значит сопротивление датчика:
Rд = (Uпит*Rн - Uн*Rн)/Uн = (Uпит/Uн - 1)*Rн
Напряжение мы измеряем при помощи АЦП, который выдает нам 0 при 0В и 1023 при Uпит = 5В (итого 1024 значения). Чтобы вычислить напряжение из этих показаний нужно узнать "цену" каждой единицы и затем умножить на количество единиц, которое выдаст АЦП (пумть будет X). То есть
Uн = (Uпит * X) / 1024
Если подставить это в формулу вычисления сопротивления датчика, то получим: Rд = ((1024*Uпит)/(Uпит * X) - 1) * Rн, или, сократив Uпит получим формулу
Rд = (1024/X - 1)* Rн
Откуда взялась пятерка в формуле из библиотеки? Может это я где-то затупил? Ну и все-таки 1024 или 1023?
Откуда взялась пятерка в формуле из библиотеки?
Взялась из Vcc.
Может это я где-то затупил?
Да. Пошти везде.
Ну и все-таки 1024 или 1023?
отличаются менее 0,1%. На фоне погрешности датчика обсуждать это даже не смешно.
ПС. Перфекционизм - болезнь с некоторой вероятностю летального исхода.
Взялась из Vcc.
Из какого Vcc? Если из того, которое я назвал Uпит= 5В, то оно сокращается в ходе вычислений.
Да. Пошти везде.
Так где конкретно во всей цепочке рассуждений? Можете носом ткнуть?
отличаются менее 0,1%. На фоне погрешности датчика обсуждать это даже не смешно.
ПС. Перфекционизм - болезнь с некоторой вероятностю летального исхода.
Причем здесь погрешность? Я хочу знать как правильней. ПС: Мы все когда-то умрем.
Проблема в отм, что эта формула из библиотеки, которую все друг у друга "передирают". Я захотел узнать откуда она взялась, нарисовал на бумажке схемку, вспомнил школьнй курс физики с математикой и у меня получилась другая формула.
В библиотеке формула концентрации CO2 такая:
Причем RZERO, судя по всему во время калибровки берется по той же формуле, поэтому соотношение Resistance / RZERO не сильно отличается от правды.
Вы вобще тему читали (там мои картинки чета поисчезали, жаль)? Похоже нет, краткое содержание предыдущих серий: датчик меряет чертешо фигзнает как, имеет бешеную погрешность, никакую селективность (ему что СО2, что спирт что амиак.. да пофиг чего воняет, он чтото покажет) и офигенную инерционность (даже несколькими сутками не всегда обходится его релакс). И рассуждать о ррм и 1024vs1023 - всеравно что спорить о том,как правильно измерять время прибытия поезда, опоздавшего на трое суток и пришедшего не на тот вокзал: с точностью до мсек или нсек; по пересечению входного светофора или у перона; пересечением первого колеса локомотива или очка машиниста. Все даст одинаково верный результат - опоздал на 3 суток )))
https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BD%D0%BA%D0%B0%D1%81%D1%82%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8
Ананка́стное расстройство личности .... — расстройство личности, характеризующееся чрезмерной склонностью к сомнениям, поглощённостью деталями, излишним перфекционизмом, упрямством, а также периодически возникающими обсессиями и/или компульсиями. Включено в МКБ-10 и DSM-5.
ПС. Все сумшедшие уверены что они нормальные... Т.к. в симптомах указано упрямство, то я пожалуй заканчиваю наш диалог ;)
Согласен с Logik точных значений ppm на этом датчике Вам не получить. Знаю человека, который калибруют его программно без каких либо библиотек, имея два проверочных значения для получения трех состояний. Выносит на свежий воздух, держит там какое-то время и фиксирует показания датчика, потом надышав в полиэтиленновый пакет делает замеры в нем и так же фиксирует второй показатель. После все, что меньше первого показателя плюс некий процент - это состояние "хорошо", все что больше первого плюс некий процент, но меньше второго показателя минус некий процент - это состояние "нормально", все что больше второго показателя минус некий процент - это состояние "плохо".
Повторюсь еще раз расчитывать на значение ppm на данном датчике нет смысла, если у Вас нет специализированной искусттвенной среды куда бы не попадали различные газы, которые так же влияют на показания датчика.
Напряжение мы измеряем при помощи АЦП, который выдает нам 0 при 0В и 1023 при Uпит = 5В
Uн = (Uпит * X) / 1024
Чтобы убедится в своей ошибке - просто подставьте в свою же формулу максимальное значение АЦП из своей же цитаты. Если формула правильная - должно получиться напряжение питания
А на улице, как на эталоне чистоты, тоже все не однозначно. У меня датчик висит к серверу подключеный и из дня в день меряет и сохраняет данные. Так вот чистый воздух на улице отличается по напряжению день ото дня сильно. Например, по ссылке я уже писал )))) Желтая кривая - температура открыл проветрить, а там такое http://arduino.ru/forum/apparatnye-voprosy/pomogite-razobratsya-s-datchikami-gaza-mq#comment-272024
Вы вобще тему читали (там мои картинки чета поисчезали, жаль)? Похоже нет, краткое содержание предыдущих серий: датчик меряет чертешо фигзнает как, имеет бешеную погрешность, никакую селективность (ему что СО2, что спирт что амиак.. да пофиг чего воняет, он чтото покажет) и офигенную инерционность (даже несколькими сутками не всегда обходится его релакс).
Не пойму я зачем Вы отвечаете на вопросы, которых я не задавал? Разве я спросил в каких единицах и каким датчиком измерть? Мне совершенно параллельно какая там погрешность. У меня есть задача с помощью этого датчика получить значения, похожие на ppm. Мне не нужна лабораторная точность и датчика другого у меня нет и не будет в ближайшее время.
Я задал два конкретных вопроса: откуда пятерка в формуле подсчета сопротивления и как правильней считать напряжение (1023 или 1024). На один из вопросов я получил ответ от b707 - четкий, конкретный и по делу. С ним не поспоришь и вопрос с 1023 для меня теперь закрыт, за что ему огромное спасибо и плюс в карму.
Если Вы не можете указать конкретную ошибку в моих рассуждениях - идите мимо. Я не просил Вас по моему посту на форуме ставить мне диагнозы, это еще хуже, чем вычислять ppm углекислого газа, используя этот датчик. Тем более, что медицинского образования у Вас скорей всего нет.
В чстности непонятен множитель 5
....
Если подставить это в формулу вычисления сопротивления датчика, то получим: Rд = ((1024*Uпит)/(Uпит * X) - 1) * Rн, или, сократив Uпит получим формулу
Rд = (1024/X - 1)* Rн
kost82, что касается пятерки в процитированной формуле - я склонен с вами согласится. Не знаю, какие соображения были у автора библиотеки, но прочитав все описания. я так и не нашел, откуда там множитель 5. С точки зрения абстрактной математики ваша формула логичнее (за исключением 1024 вместо 1023 :)
b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.
b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.
Logik, датчик включен по схме делителя напряжения, значение имеет только соотношение сопротивлений, опорное напряжение в формуле не используется ВООБЩЕ -так что мимо
5 там точно лишняя.
Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.
Если продраться через мат и взаимное макание в говно, то вот она, дискуссия.
Еще раз, прошу прощения за поднятие этого дерьма. мне реально стыдно, Но дискуссия полезна и результат тоже.
Там есть мой код для модели на Питоне и С, кому что нравится.
b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.
Logik, датчик включен по схме делителя напряжения, значение имеет только соотношение сопротивлений, опорное напряжение в формуле не используется ВООБЩЕ -так что мимо
Сегодня день тупости был? С датчика, который "включен по схме делителя напряжения" пришел на вход АЦП 0,1В. Если АЦП работает с опорным 5В получаем значение 0,1*1023/5=20ед, а с опорным 1В - 0,1*1023/1=102. Очевидно в одном из случаев для получения правильного значения входного напряжения, а соответственно и соотношения сопротивлений, необходим множитель 5. Если этого не учитывать то просто переключая опорное напряжение между 5 и 1В можна получать сильно разное значение ррм. Но это врядли помешает гордится результатом человеку пытающемуся получить ррм с этого датчика ;)
да. дошло. я понял. Путаница между Uпитания и Uопорное. Это не одно и то же. Но 5 в формуле все равно не на месте ;).
Но 5 в формуле все равно не на месте ;).
А вот это ХЗ. Я спецом избегаю утверждать в каком из случаев там надо 5 а когда нет. И множить или делить. Там от значений остальных коэффициентов оно зависит. Но в любом случае применение этой формулы безсмыслено и утверждение про полученый ррм глупо. Выше писал почему. А соответственно и копать когда и где нужна 5 безсмыслено.
Сегодня день тупости был? С датчика, который "включен по схме делителя напряжения" пришел на вход АЦП 0,1В.
Да ерунда это - по датащиту питтание датчика строго 5в. Если вы утрверждаете, что пятерка в формуле - верная, значит схема рассчитана на опрное напряжение 1.0в. Откуда эта цифра? Внешнее опорное в ардуине = напряжение питания, внутреннее - 1.1в. Если бы библиотека была рассчитана на такой экзотический случай, как опорное напряжение 1в - об этом было бы прямо написано.
Начет дня тупости - не в курсе, но вот что сегодня день взаимных открытий - это точно. Logik, уже не первый раз замечаю, что вы готовы утверждать что угодно, только б не признать, что вы могли в чем-то ошибаться
К обсуждению 1024vs1023 добавляем обсуждение Vref=1,1vs1,0 Оч. интересная тема. Еще перфекционист обнаружился.
Я значения опорного округлил до целого. Для датчика с такими безобразными параметрами это целиком оправдано.
возможно ваш шанс для просветления - этот код
взятый здесь https://github.com/GeorgK/MQ135/pull/3/files?diff=unified&short_path=04c...
Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.
Если продраться через мат и взаимное макание в говно, то вот она, дискуссия.
Интересная дискуссия, спасибо за ссылку. От комментариев, пожалуй, воздержусь... Результаты сравнения в сообщении #618? говорят сами за себя
К обсуждению 1024vs1023 добавляем обсуждение Vref=1,1vs1,0 Оч. интересная тема. Еще перфекционист обнаружился.
Я значения опорного округлил до целого. Для датчика с такими безобразными параметрами это целиком оправдано.
Да не, я совсем не перфекционист. Гори оно огнем 1.0 или 1.1.
Однако свои ошибки признавать умею.
UPD - увидел, что вы выложили код. Этого кода в основной ветке библиотеки нет. Он действительно все обьясняет. Вы были правы насчет того, откуда взялась пятерка - это Vref/
Но то, что в новой формуле Vref уже нет, а пятерка осталась - ошибка автора библиотеки,, кстати, обратите внимание на заголовк страницы...
Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.
А суть дискуссии-то в чем? Выход АЦП может принимать 1024 значений: от 0 до 1023. Максимальное значение на выходе АЦП есть 1023. Вот его в формулу и ставим.
Я вот погонял в одном месте mq135 и mh-z19, получился такой вот график. Может, кому-то будет полезен для пересчета попугаев в ppm.