Всем привет! На амперке появились датчики различных газов, но среди них отсутствует датчик CO2, который мне интересен. В общем-то все эти датчики сделаны на основе серии MQ и общение с ними однотипно, а модули все построены также одинаково, так что аналог я нашёл. Но вот как получить с него данные в ppm? Амперка (огромное спасибо за это!) создала библиотечку, как раз для этого, но там нету MQ-135 (который умеет CO2). Как я понимаю, достаточно указать верные параметры в функции readPpm, но как их получить из даташита я так и не понял. Кто подскажет?
На сколько я понял, то нужно использовать график калибровки. Из него получают калибровочные коэффициенты, которые учитываются при расчете. Вот расчета CO2 в ppm, на примере кода: #define R0 1200 //сопротивление датчика при атмосферном воздухе (оно может отличаться для разных мест и условий. нужно промерять самому) #define PARA 116.6020682 // параметры для вычисления CO2 #define PARB 2.769034857 void MQ135 { int MQ135val = analogRead(MQ135PIN); //чтение порта Serial.println(MQ135val); float Resistance = ((1023. / (float)MQ135val) * 5. - 1.) * RLOAD; //расчет текущего сопротивления CO2 = PARA * pow((Resistance / R0), -PARB); //пересчет в ppm Serial.print("CO2: "); Serial.print(CO2); Serial.println("ppm"); }
Почитайте вот здесь: http://davidegironi.blogspot.ru/2014/01/cheap-co2-meter-using-mq135-sensor-with.html#.Vy8A9PmLTIU
Спасибо! По графику-то нифига не поймёшь, там ещё логарифмическая зависимость, так что точность вообще никакая. Хорошо, что а архиве по ссылке есть таблички - это уже что-то Да и код адекватный. Ещё раз спасибо, буду пробовать теперь
Не за что. Кстати не знаете, как реализовать при помощи кода следующий момент. Датчик MQ135 требует прогрева ~10 мин. для нормальной и стабильной работы. Часто в совокупности с датчиком делают какой-то извещатель о превышении ПДК. Вопрос: как сделать, чтобы, например buzzer (пьезоизлучатель), первые 10 минут при подачи питания на устройство не реагировал ни на какие изменения? Еще к примеру, при включении MQ135 в первый момент выводит 2000 ppm, через 5 минут 900 ppm, а ближе к 10 минутам выходит уже на нормальный уровень в 500 ppm.
Думаю, тут только один вариант - на первых минутах работать в режиме "прогрева" и не обрабатывать данные как актуальные. И выходить из него или по времени или по гистерезису... Видимо, сам буду делать примерно так.