Работа с датчиком газа MQ135

42Mo
Offline
Зарегистрирован: 08.11.2014

Добрый день!
Помогите пожалуйста правильно подключить к arduino датчик газа MQ135. Он распаян вместе с компаратором LM393.

На DX значится как FC-22-1

пример подключения голого MQ135 я нашел

но как управляться с FC-22 я не понял
у него 2 вывода: цифровой и аналоговый. Вроде бы 1го достаточно для работы, 2 вместе включают для большей точности. Так же на FC есть переменный резистор для регулировки. 
По даташиту понятно что чем меньше сопротивление, тем сильнее загрязнен воздух, но как выставить  0, искать чистый воздух? И как MQ работает с ML тоже не понятно.

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

com
Offline
Зарегистрирован: 06.09.2013

дык вроде черным по белому

Analog output voltage: 0~5V, the higher concentration, the higher voltage

Подключить к аналоговому входу, считывать значение analogRead в диапазоне 0....1023 и анализировать, проветривать там или противогазы одевать :)

что конкретно не получается?

art100
Offline
Зарегистрирован: 09.03.2014

мне лень почитать ДадаСхема

почитайте за меня

хам

adrusha
Offline
Зарегистрирован: 02.03.2015

A0 — означает что сигнал можно считать динамично. И применив специльную формулу, вычислить содержание CO2 (пусть и не точно).

D0 — либо 1 либо 0, в зависимости от того превышен ли установленный порог переменным резистром.

Таким образом, датчик можно использовать без Arduino, например совместно с реле, запитывав D0 как выход сигнала 5V или 0V

 

ДимЧик
ДимЧик аватар
Offline
Зарегистрирован: 30.03.2013

Помогите пожалуйста, как мне рассчитать концетрацию углекислого газа (хоть и неточно)? Заранее спасибо!

Cawa
Offline
Зарегистрирован: 04.03.2016

ДимЧик пишет:

Помогите пожалуйста, как мне рассчитать концетрацию углекислого газа (хоть и неточно)? Заранее спасибо!

Библиотека для Arduino MQ135

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

/**************************************************************************/
/*!
@brief  Get the ppm of CO2 sensed (assuming only CO2 in the air)
@return The ppm of CO2 in the air
*/
/**************************************************************************/
float MQ135::getPPM() {
  return PARA * pow((getResistance()/RZERO), -PARB);
}

/**************************************************************************/
/*!
@brief  Get the ppm of CO2 sensed (assuming only CO2 in the air), corrected
        for temp/hum
@param[in] t  The ambient air temperature
@param[in] h  The relative humidity
@return The ppm of CO2 in the air
*/
/**************************************************************************/
float MQ135::getCorrectedPPM(float t, float h) {
  return PARA * pow((getCorrectedResistance(t, h)/RZERO), -PARB);
}

 

ДимЧик
ДимЧик аватар
Offline
Зарегистрирован: 30.03.2013

Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:

/**************************************************************************/
/*!
@brief  Default constructor
@param[in] pin  The analog input pin for the readout of the sensor
*/
/**************************************************************************/

MQ135::MQ135(uint8_t pin) {
  _pin = pin;
}

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

ДимЧик пишет:

Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:

.....

Зачем вам эта библиотека!

Берите данные с аналогового пина через analogRead(); и если данные превысили опасныое значение врубайте сирену или еще что. Данные после включения будет в диапазоне от 0 до 1024.

есть второй вариант мониторить цифровой пин через digitalRead и как только станет HIGH врубайте сирену или еще что,синим резистором на плате регулируется порог срабатывания.

Я к тини13 такие датчики подрубаю без всяких библиотек и все корректно и просто.

 

ДимЧик
ДимЧик аватар
Offline
Зарегистрирован: 30.03.2013

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

Cawa
Offline
Зарегистрирован: 04.03.2016

ДимЧик пишет:

Спасибо, но я что-то не понмаю как использовать эту библиотеку, в ней нет примеров, а так я пока что не понимаю. Если Вам не трудно, не могли бы Вы написать простейшую программу? Мне даже не удаётся прописать пин. Это для меня непонятно:

Прошу Вас изучите хоть немного си и среду разработки. В библиотеке примеров быть и не должно, зачем там этот лишний код (можете поискать примеры в интернете). В самой библиотеке кода очень мало, там всего лишь несколько функций для конвертации аналогового сигнала в более подходящие значения по CO2, такие как концентрация частиц на миллион (ppm). Для того чтобы воспользоваться билбиотекой её нужно установить в вашу среду разработки. Предполагаю, что у Вас это Arduino IDE, и если мне память не изменяет, то там есть пункт меню "add zip librarry" при помощи которого и добавляете себе эту библиотеку (все файлы в сылке, что я давал перед этим скачиваете себе упаковываете в зип архив, а после добавляете). В своем коде подключаете библиотеку, создаете экземпляр класса MQ135, где в конструктор передаете номер входного пина датчика (не забываем перед этим пин установить в режим на чтение, обычно это делают в методе Setup), но а после для созданного экземпляра MQ135 вызываете методы, что я выше в сообщениях привел. Правда не понятно в каком виде нужно передать температуру (цельсий или кельвин) и влажность. Но можно либо спросить у разработчика, либо найти внятное описание, либо попробовать поработать методом тыка.

Cawa
Offline
Зарегистрирован: 04.03.2016

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

Logik
Offline
Зарегистрирован: 05.08.2014

Вот и я стал счастлиым владельцем этого чуда.  Подключил, залил.

void setup() {
  // put your setup code here, to run once:
  Serial.begin(57600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(analogRead(A3));
  delay(200);

}

Он выдал.

Дрейф нуля жуть.. Это у всех так? Это каждое включение так?

ПС. пики - это я на него дыхнул ;)

Пока набрал пост - упал до 200. Он в минус уходит? ;)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Дык свежий надо прокаливать сутки где-то, емнип.

Logik
Offline
Зарегистрирован: 05.08.2014

Просто дать поработать или режим какой особый? 

ПС. Уже показывает 160 :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

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

Logik
Offline
Зарегистрирован: 05.08.2014

Стоял включенным все время. Упал до 100, скорость падения все время снижается.

При приближении меня унюхивает на пару единиц, дыхнеш - на пару десятков.

Решил я с утра полочку лакировать....

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

Вот такой нюхачь. ))) 

Cawa
Offline
Зарегистрирован: 04.03.2016

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

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Logik пишет:

что за график ? как сделали? и кстати какие показания датчик долже выдавать в хорошо проветренном помещение? (чтобы подстроечным резистором настроить)

Logik
Offline
Зарегистрирован: 05.08.2014

График выходного напряжения, через 0,2сек. Скетч выше, построен в екселе. Скоко должен - сам хочу узнать. Потому и играюсь с ним. 

Cawa
Offline
Зарегистрирован: 04.03.2016

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

/// Calibration resistance at atmospheric CO2 level
#define RZERO 76.63

так же не так давно нашел хороший обзор по данному датчику http://mysku.ru/blog/aliexpress/41409.html там все описано подробно и про сопротивление.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Почти сутки ганяю сабж. Непрерывно включен. Вроде как дрейф нуля прекратился, Общие впечатления.

Штука годная, чувствительная, чувствительней моего носа. Инерционная при очищении воздуха, после газовой атаки, показания по експоненте спадают и могут устаканиватся минут 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В питания известным способом на АЦП контроллера и коррекцией показаний с учетом этого. Вести расчет в абсолютных единицах безсмысленно, т.к. результат всеравно в "попугаях".   

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

Cawa
Offline
Зарегистрирован: 04.03.2016

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

Logik
Offline
Зарегистрирован: 05.08.2014

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

1. Слишком много СО2.

2. Растения зацвели и пахнут сильно.

3. Чтото уже гниет.

Понятно что низкая цена окупает многое но и усложняет применение.

Это не датчик СО2, ненадо так его называть, это датчик ... дурного воздуха шоле )))

///выдавать все нормально или все же лучше проветрить

да да. именно шотодетотак. Вот я на вытяжку сегодня и поглядывать стал.

DaeWoo
Offline
Зарегистрирован: 04.12.2016

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

Какие вообще необходимы датчики, программаторы для реализации такого устройства?

Araris
Offline
Зарегистрирован: 09.11.2012

Если цель - просто избавиться от запахов, то поставьте обратный клапан на канал вытяжки.

Logik
Offline
Зарегистрирован: 05.08.2014

Пользуясь случаем провел эксперимент. Сунул датчик чашку и туда же трубку с емкости с активыным брожением. По идее чашка должеа быть полна СО2 с небольшими примесями набродившего. Показания датчика выросли с 45мВ до 300мВ. Делаем вывод по чувствительности к СО2.

TAHK_B_KyBeTe
Offline
Зарегистрирован: 01.02.2017

У меня вообще не понятно что происходит, включаю раз пятый поиграться , но на короткое время, сейчас стоит уже 4 часа, показания 7!!!! Почему так мало? Засунул в пакет подышал, 17... поднес зажигалку, 900....

Logik
Offline
Зарегистрирован: 05.08.2014

7 попугаев? Без единиц измерения можна только про соотношения при подішал и газонул говорить. Соотношения похожи на правду.

TAHK_B_KyBeTe
Offline
Зарегистрирован: 01.02.2017

Logik пишет:

7 попугаев? Без единиц измерения можна только про соотношения при подішал и газонул говорить. Соотношения похожи на правду.

это понятно, просто у некоторых 70 и более а у меня только 7.....

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

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

Logik
Offline
Зарегистрирован: 05.08.2014

///это понятно, просто у некоторых 70 и более а у меня только 7..... 

Чего 70? Чего 7? Еденицы какие ))) Может у Вас 7 тон, а вы жалутесь что меньше чем 70кг. ))

//реле все время то включается то выключается, прибор такой частоты не выдержит, сгорит обязательно

Тут 100 способов. Например после очередного переключения реле делаем паузу, пару минут ничего не проверяем и не переключаем.

Кроме того, у него "отходняк" долгий, я сегодня решил его тоже газом от зажигалки угостить. Вот

Шкала между прочим логарифмическая, скачек от 45мВ до 300мВ. По горизонтали часы. Он теперь пару дней отходить будет ))

kost82
Offline
Зарегистрирован: 30.11.2015

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

Почему-то во всех библиотеках как-то странно вычисляется сопротивление датчика:

float Resistance = ((1023. / (float)MQ135val) * 5. - 1.) * RLOAD;

В чстности непонятен множитель 5 и почему 1023, а не 1024.

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

I = Uпит/(Rд+Rн).

Напряжение, которое мы замеряем на нагрузочном резисторе можно вычислить так: Uн = I * Rн, если подставить сюда ток из первой формулы - получаем

Uн = Uпит * Rн / (Rд + Rн) => Uн*Rд + Uн*Rн = Uпит*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?

Logik
Offline
Зарегистрирован: 05.08.2014

kost82 пишет:

Откуда взялась пятерка в формуле из библиотеки? 

Взялась из Vcc.

kost82 пишет:

 Может это я где-то затупил? 

Да. Пошти везде.

 

kost82 пишет:

 Ну и все-таки 1024 или 1023?

отличаются менее 0,1%. На фоне погрешности датчика обсуждать это даже не смешно.

ПС. Перфекционизм - болезнь с некоторой вероятностю летального исхода.

kost82
Offline
Зарегистрирован: 30.11.2015

Logik пишет:

Взялась из Vcc.

Из какого Vcc? Если из того, которое я назвал Uпит= 5В, то оно сокращается в ходе вычислений.

Logik пишет:

Да. Пошти везде.

Так где конкретно во всей цепочке рассуждений? Можете носом ткнуть?

Logik пишет:

отличаются менее 0,1%. На фоне погрешности датчика обсуждать это даже не смешно.

ПС. Перфекционизм - болезнь с некоторой вероятностю летального исхода.

Причем здесь погрешность? Я хочу знать как правильней. ПС: Мы все когда-то умрем.

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

В библиотеке формула концентрации CO2 такая:

float CO2ppm = PARA * pow((Resistance / RZERO), -PARB);

Причем RZERO, судя по всему во время калибровки берется по той же формуле, поэтому соотношение Resistance / RZERO не сильно отличается от правды.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Вы вобще тему читали (там мои картинки чета поисчезали, жаль)? Похоже нет, краткое содержание предыдущих серий: датчик меряет чертешо фигзнает как, имеет бешеную погрешность, никакую селективность (ему что СО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.

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

 

Cawa
Offline
Зарегистрирован: 04.03.2016

Согласен с Logik точных значений ppm на этом датчике Вам не получить. Знаю человека, который калибруют его программно без каких либо библиотек, имея два проверочных значения для получения трех состояний. Выносит на свежий воздух, держит там какое-то время и фиксирует показания датчика, потом надышав в полиэтиленновый пакет делает замеры в нем и так же фиксирует второй показатель. После все, что меньше первого показателя плюс некий процент - это состояние "хорошо", все что больше первого плюс некий процент, но меньше второго показателя минус некий процент - это состояние "нормально", все что больше второго показателя минус некий процент - это состояние "плохо".

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

b707
Онлайн
Зарегистрирован: 26.05.2017

kost82 пишет:

Напряжение мы измеряем при помощи АЦП, который выдает нам 0 при 0В и 1023 при Uпит = 5В

Uн = (Uпит * X) / 1024

Чтобы убедится в своей ошибке - просто подставьте в свою же формулу максимальное значение АЦП из своей же цитаты. Если формула правильная - должно получиться напряжение питания

Logik
Offline
Зарегистрирован: 05.08.2014

А на улице, как на эталоне чистоты, тоже все не однозначно. У меня датчик висит к серверу подключеный и из дня в день меряет и сохраняет данные. Так вот чистый воздух на улице отличается по напряжению день ото дня сильно. Например, по ссылке я уже писал )))) Желтая кривая - температура открыл проветрить, а там такое http://arduino.ru/forum/apparatnye-voprosy/pomogite-razobratsya-s-datchikami-gaza-mq#comment-272024

kost82
Offline
Зарегистрирован: 30.11.2015

Logik пишет:

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

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

Я задал два конкретных вопроса: откуда пятерка в формуле подсчета сопротивления и как правильней считать напряжение (1023 или 1024). На один из вопросов я получил ответ от b707 - четкий, конкретный и по делу. С ним не поспоришь и вопрос с 1023 для меня теперь закрыт, за что ему огромное спасибо и плюс в карму.

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

b707
Онлайн
Зарегистрирован: 26.05.2017

kost82 пишет:

float Resistance = ((1023. / (float)MQ135val) * 5. - 1.) * RLOAD;

В чстности непонятен множитель 5

....

Если подставить это в формулу вычисления сопротивления датчика, то получим: Rд = ((1024*Uпит)/(Uпит * X) - 1) * Rн, или, сократив Uпит получим формулу

Rд = (1024/X - 1)* Rн

kost82, что касается пятерки в процитированной формуле - я склонен с вами согласится. Не знаю, какие соображения были у автора библиотеки, но прочитав все описания. я так и не нашел, откуда там множитель 5. С точки зрения абстрактной математики ваша формула логичнее (за исключением 1024 вместо 1023 :)

Logik
Offline
Зарегистрирован: 05.08.2014

b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.

b707
Онлайн
Зарегистрирован: 26.05.2017

Logik пишет:

b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.

Logik, датчик включен по схме делителя напряжения, значение имеет только соотношение сопротивлений, опорное напряжение в формуле не используется ВООБЩЕ -так что мимо

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

5 там точно лишняя.

Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.

Если продраться через мат и взаимное макание в говно, то вот она, дискуссия.

Еще раз, прошу прощения за поднятие этого дерьма. мне реально стыдно, Но дискуссия полезна и результат тоже.

Там есть мой код для модели на Питоне и С, кому что нравится.

Logik
Offline
Зарегистрирован: 05.08.2014

b707 пишет:

Logik пишет:

b707, да АЦП с разными опроными напряжениями используется, потому может быть множитель на 5, а может не быть. Тоже мне загадка.

Logik, датчик включен по схме делителя напряжения, значение имеет только соотношение сопротивлений, опорное напряжение в формуле не используется ВООБЩЕ -так что мимо

Сегодня день тупости был? С датчика, который "включен по схме делителя напряжения" пришел на вход АЦП 0,1В. Если АЦП работает с опорным 5В получаем значение 0,1*1023/5=20ед, а с опорным 1В - 0,1*1023/1=102. Очевидно в одном из случаев для получения правильного значения входного напряжения, а соответственно и соотношения сопротивлений, необходим множитель 5. Если этого не учитывать то просто переключая опорное напряжение между 5 и 1В можна получать сильно разное значение ррм. Но это врядли помешает гордится результатом человеку пытающемуся получить ррм с этого датчика ;) 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

да. дошло. я понял. Путаница между Uпитания и Uопорное. Это не одно и то же. Но 5 в формуле все равно не на месте ;).

Logik
Offline
Зарегистрирован: 05.08.2014

wdrakula пишет:

 Но 5 в формуле все равно не на месте ;).

А вот это ХЗ. Я спецом избегаю утверждать в каком из случаев там надо 5 а когда нет. И множить или делить. Там от значений остальных коэффициентов оно зависит. Но в любом случае применение этой формулы безсмыслено и утверждение про полученый ррм глупо. Выше писал почему. А соответственно и копать когда и где нужна 5 безсмыслено.

b707
Онлайн
Зарегистрирован: 26.05.2017

Logik пишет:

Сегодня день тупости был? С датчика, который "включен по схме делителя напряжения" пришел на вход АЦП 0,1В.

Да ерунда это - по датащиту питтание датчика строго 5в. Если вы утрверждаете, что пятерка в формуле - верная, значит схема рассчитана на опрное напряжение 1.0в. Откуда эта цифра? Внешнее опорное в ардуине = напряжение питания, внутреннее - 1.1в. Если бы библиотека была рассчитана на такой экзотический случай, как опорное напряжение 1в - об этом было бы прямо написано.

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

Logik
Offline
Зарегистрирован: 05.08.2014

К обсуждению 1024vs1023 добавляем обсуждение Vref=1,1vs1,0 Оч. интересная тема. Еще перфекционист обнаружился. 

Я значения опорного округлил до целого. Для датчика с такими безобразными параметрами это целиком оправдано.

возможно ваш шанс для просветления  - этот код

 float MQ135::getResistance() {
   int val = analogRead(_pin);
-  return ((1023./(float)val) * 5. - 1.)*RLOAD;
+  float r;
+
+  //r = ((1023./(float)val) - 1.)*_rload;
+  // or taking Vref and Vc into account:
+  r = ((1023. * _rload * _vc) / ((float)val * _vref)) - _rload;
+
+  return r;
 }

взятый здесь https://github.com/GeorgK/MQ135/pull/3/files?diff=unified&short_path=04c...

b707
Онлайн
Зарегистрирован: 26.05.2017

wdrakula пишет:

Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.

Если продраться через мат и взаимное макание в говно, то вот она, дискуссия.

Интересная дискуссия, спасибо за ссылку. От комментариев, пожалуй, воздержусь... Результаты сравнения в сообщении #618? говорят сами за себя

b707
Онлайн
Зарегистрирован: 26.05.2017

Logik пишет:

К обсуждению 1024vs1023 добавляем обсуждение Vref=1,1vs1,0 Оч. интересная тема. Еще перфекционист обнаружился. 

Я значения опорного округлил до целого. Для датчика с такими безобразными параметрами это целиком оправдано.

Да не, я совсем не перфекционист. Гори оно огнем 1.0 или 1.1.

Однако свои ошибки признавать умею.

UPD - увидел, что вы выложили код. Этого кода в основной ветке библиотеки нет. Он действительно все обьясняет. Вы были правы насчет того, откуда взялась пятерка - это Vref/

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

Machaeon
Offline
Зарегистрирован: 04.01.2018

wdrakula пишет:

Дискуссия про 1023 и 1024 - 3.14дец как в зубах навязла, но есть точный ответ. Я даже модель построил.

А суть дискуссии-то в чем? Выход АЦП может принимать 1024 значений: от 0 до 1023. Максимальное значение на выходе АЦП есть 1023. Вот его в формулу и ставим.

Я вот погонял в одном месте mq135 и mh-z19, получился такой вот график. Может, кому-то будет полезен для пересчета попугаев в ppm.