Подробности и измерения под катом.
Сам датчик MH-Z19 уже описывался здесь на сайте. За основу была взята статья "Обзор инфракрасного датчика CO2", а данный материал является его логическим продолжением. Про измерение концентрации CO2 на улице было написано здесь, однако данных о концентрации в квартире там не приводилось. Восполним этот пробел.
Железо
Первым делом на eBay были заказаны следующие компоненты:
— Arduino Micro ATmega32U4 3.3V (цена вопроса 5$). Т.к. датчик имеет 3-вольтовую логику, обычные Arduino лучше не использовать.
— OLED LCD-дисплей I2C 0.91«128x32 (цена вопроса 7$). Дисплей подключается к стандартным i2c-пинам Arduino.
— Собственно датчик MH-Z19 (цена вопроса 28$).
— Набор проводов с разъемами для штыревых контактов (цена вопроса 1-2$)
Таким образом, общая стоимость составила ~40$, или 2600р. Фирменный прибор от известной компании стоит примерно вдвое дороже, хотя здесь скорее вопрос не экономии, а технического интереса.
Код для Arduino был позаимствован из вышеприведенной статьи, в него был добавлен вывод данных на дисплей, а для более удобного анализа данных вывод был переделан в формат простой строки с разделителем. Также были добавлены метки времени, каждая соответствует 10 секундам.
#include <SoftwareSerial.h>
#include <Wire.h>
// I2C OLED
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
// CO2 sensor:
SoftwareSerial mySerial(8,9); // RX,TX
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
void setup() {
// Serial
Serial.begin(9600);
mySerial.begin(9600);
// OLED
Wire.begin();
oled.begin(&Adafruit128x32, I2C_ADDRESS);
oled.set400kHz();
oled.setFont(ZevvPeep8x16);
oled.clear();
oled.println("setup::init()");
}
long t = 0;
void loop()
{
mySerial.write(cmd, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response[i];
crc = 255 - crc;
crc++;
oled.clear();
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
oled.println("Sensor CRC error");
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
unsigned int ppm = (256*responseHigh) + responseLow;
Serial.print(String(t)); Serial.print(","); Serial.print(ppm); Serial.println(";");
if (ppm <= 400 || ppm > 4900) {
oled.println("CO2: no data");
} else {
oled.println("CO2: " + String(ppm) + " ppm");
if (ppm < 450) {
oled.println("Very good");
}
else if (ppm < 600) {
oled.println("Good");
}
else if (ppm < 1000) {
oled.println("Acceptable");
}
else if (ppm < 2500) {
oled.println("Bad");
}
else {
oled.println("Health risk");
}
}
}
delay(10000);
t += 10;
}
Все это было собрано вместе, скетч залит в ардуину, результат выглядит примерно так:
Конечно это не верх промышленного дизайна (в планах подыскать какой-то корпус), но для задачи показометра, способного работать как автономно, так и передавать данные по USB, устройство вполне справляется. Для получения данных по USB достаточно открыть в Arduino IDE монитор порта, в нем будут выводиться данные. Текст оттуда можно скопировать и открыть в любой программе, например в Excel.
Измерения
Следующий вопрос: что мы собственно измеряем? Устройство выдает данные в ppm (parts per million, частей на миллион). 1000 ppm = 0,1% содержания СО2. В интернете можно найти следующую таблицу допустимых концентраций:
— 350 — 450 ppm: Нормальный уровень на открытом воздухе.
— < 600 ppm: Приемлемые уровни. Уровень. рекомендованный для спален, детских садов и школ.
— 600 — 1000 ppm: Жалобы на несвежий воздух, возможно снижение концентрации внимания.
— 1000 ppm: Максимальный уровень стандартов ASHRAE (American Society of Heating, Refrigerating and Air-Conditioning Engineers) и OSHA (Occupational Safety & Health Administration).
— 1000 — 2500 ppm: Общая вялость, снижение концентрации внимания, возможна головная боль.
— 2500 — 5000 ppm: Возможны нежелательные эффекты на здоровье.
И наконец, результаты. Датчик был поставлен на кухне, окна металлопластиковые, время измерения около 8 часов.
Результаты оказались довольно-таки интересными. По горизонтали время в секундах, 3600 секунд соответствуют 1 часу.
Кривые на графике расшифровываются так:
0ч: показания около 420ppm (соответствуют уличным), дома никого не было, я пришел с работы и заодно включил датчик.
0-2 часа: я нахожусь на кухне, видно как в присутствии человека концентрация co2 медленно растет где-то до 900ppm.
2-4 часа: я ушел из помещения, видно как концентрация медленно спадает.
4-6 часов: я вернулся обратно, концентрация снова стала расти.
6й час: на плиту поставлена кастрюля с пельменями. Интересно видеть, как концентрация практически моментально увеличилась до 1700ppm, затем стала медленно спадать. Хотя газ горел недолго (минут 10-15) высокие уровни >1000 ppm держатся не менее часа.
Конец графика: было открыто окно, и уровень co2 упал практически сразу же.
Выводы
Устройство оказалось довольно-таки интересным, и особенно актуальным для работающих дома за компьютером. Так например, за время написания этой статьи уровень co2 вырос в помещении с 500 до 770ppm. Поглядывание на экран заставляет либо чаще открывать окно, либо наконец-таки задуматься об устройстве в доме нормальной вентиляции (наверное режим микропроветривания в окне был бы не лишним, а лучше какая-то вытяжка). Если бы я сейчас покупал новые окна, наверно задумался бы о более-менее качественной модели с нормальным проветриванием.
Также важно отметить актуальность хорошей вентиляции на кухне: как показывает график, даже за 10 минут одна газовая горелка может „выжечь“ весь запас кислорода, доведя концентрацию CO2 до весьма высокой. Измерения в спальне показали, что в плане вентиляции тоже все не очень хорошо: к утру концентрация co2 составляет более 1000ppm, а для умственного труда хороший сон это весьма актуально.
В общем, это нехитрое и недорогое устройство позволяет весьма эффективно проверить качество воздуха в квартире или офисе.
Автор желает всем хорошего здоровья и хорошего настроения. Ну и хорошего воздуха разумеется, тоже.
Комментарии (45)
anatoly314
08.07.2016 00:27Не подскажете насколько изменяются показания датчика с течением времени, нужно ли его калибровать?
DmitrySpb79
08.07.2016 00:58Возможность калибровки в datasheet описана: http://eleparts.co.kr/data/design/product_file/SENSOR/gas/MH-Z19_CO2%20Manual%20V2.pdf
Но ни разу не читал, чтобы кто-то реально ее делал (да и не очень понятно как).evgeny_boger
08.07.2016 02:34+2Калибровка там по 400 ppm свежего атмосферного воздуха.
А вот 4 новых датчика MH-Z19 из упаковки без калибровки:
SHadDim
08.07.2016 10:25Я правильно понимаю что калибруется по принципу «принимаем что норма это 400 ppm»? По моим измерениям на улице датчик показывал 350 ppm
Azya
08.07.2016 10:33Правильно. На сколько я читал, известный Green Eye при автоматической калибровке берет минимальный показатель CO2 за неделю и сравнивая с эталонными 400 соответственно вводит поправку. У вас получаются показатели на 50 ppm занижены.
DmitrySpb79
08.07.2016 10:36А в чем смысл такой калибровки? У нас нет никакой гарантии, что уличный воздух == 400ppm, т.е. легко ту же ошибку в 50ppm опять получить.
Да и в общем-то пофиг, ведь в реале интереснее динамика изменения показаний, а не абсолютные значения.Azya
08.07.2016 10:56Опять же на сколько я знаю, концентрация CO2 довольно постоянна и разницу в 50ppm на открытом пространстве никак не получить. Вот например цитата из вики — «Углекислый газ в атмосфере Земли, по состоянию на 2013 год, колебался в пределах от 393 ppm (0,0393 %) до 397 ppm (0,0397 %).».
А вот на счет того, что интересней, это наверно субъективно. Мне интересней текущие показания. Динамика интересна была только в начале, потом и так становится понятно, что включение газа на кухне влечет быстрый рост концентрации CO2 по всей квартире.DmitrySpb79
08.07.2016 10:58Так ведь станции, измеряющие CO2 в атмосфере земли, располагают чуть ли не в горах. А в городе показания будут меняться от тучи факторов — количества машин за окном, силы и направления ветра который все это разгоняет, и пр. Какая тут точность…
Azya
08.07.2016 11:10Не буду спорить, не удалось найти информации по мониторингу CO2 в городах, но по-моему логично, что показатели в городе могут только ухудшиться, но никак не стать лучше чем в горах
DmitrySpb79
08.07.2016 11:23Вот здесь написано, как измеряли co2 в атмосфере: https://ru.wikipedia.org/wiki/График_Килинга
В городе суть в том, что значения явно будут меняться ежедневно, и использовать их для калибровки не очень точно имхо.
Aclz
09.07.2016 01:24Как количество машин за окном и ветер могут повлиять на количество СО2 в воздухе?
Rusheff
09.07.2016 10:22Нет ветра — выхлопные газы не перемешиваются — увеличивается концентрация углекислого газа. На 1 г сожженного бензина больше 3 г углекислого газа. Если 4 млн авто в Москве сожгут за день по 12 л бензина (примерно 1 кг), то на каждый кубометр воздуха в трехметровом приземном слое придется около 60 г углекислого газа — а это 60 ppm. Если взять площадь дорог в Москве (около 9%) — то в пределах дорожной сети концентрация углекислого газа вырастет примерно на 600 ppm, т.е. будет порядка 1000 в лучшем случае, а это уже много.
Azya
08.07.2016 11:00Но конечно ошибка в 50ppm это мелочи, тем более что у MH-Z19 точность ±50+5%. Но со временем она будет расти.
Norno
08.07.2016 12:17Это решения для домашних устройств. Выбор из 2-х зол меньшего: или ничего не делать и смириться с дрейфом параметров (потому что массовый пользователь не имеет доступа к калиброванным смесям газов на которых можно калибровать, да и даже если это можно сделать где-то, не будет этого делать с требуемой частотой), или принять что на улице у нас 400ppm, и мерить не абсолютные значения, а значение относительно того что за окном. От перекалибровки защищаются тем что минимальное значение берется за как-то продолжительный промежуток времени, например неделя, и вводят максимальную допустимую разовую поправку, например 50ppm, если не ошибаюсь так сделано в Green Eye. Для домашнего применения этого достаточно. Ну а где требуется абсолютные значения и точность приборы калибруют на смесях, они проходят поверку, и все остальные прелести серьезных измерительных приборов.
zip_zero
08.07.2016 02:09Злободневно. Мы, разработчики, обычно любим заботиться о концентрации внимания — было бы интересно отмониторить типичное офисное помещение, например, openspace.
/* Предлагаю поменять по тексту «цена вопроса» и «стоимость» на «цена» — с точки зрения стилистики статья будет сиять. */Rusheff
08.07.2016 09:05+1В течение года мониторю (!!! медведевский термин — так себе, лучше слежу, наболюдаю, контролирую) ) офисное пространство на работе. Правда обычным даджетовским USB-датчиком. За это время датчик стал просто незаменим при войне за открытое окно. Планктон смирился, что при горящем желтом диоде надо проветриваться, а при красном — радикально проветриваться. А до этого крики про сквозняки были огого…
DmitrySpb79
08.07.2016 09:21В офисе где я работаю, проверял, все ок, 450ppm в течении всего дня (современный бизнес-центр с нормально работающей вентиляцией, окна кстати не открываются вообще, даже ручек нет).
Rusheff
08.07.2016 10:54Везет. У нас промпредприятие с еврическим ремонтом. Исходно присутствовавшую вентиляцию замуровали и закрыли подвесными потолками. пластиковые окна воздух почти не подтравливают. Зимой в некоторых помещениях вообще зашкаливает за 2500 ppm. Зато теперь у меня редко больше 600 бывает.
dcoder_mm
08.07.2016 02:19А почему концентрация после включения плиты с таким резким пиком и спадом? Не ошибка-ли это датчика?
RoustR
08.07.2016 09:05+1Вероятно, потому, что когда варят пельменьки, то газ обычно сначала включают на максимум, чтобы вода быстрее закипела, затем убавляют, лишь слегка поддерживая кипение.
DmitrySpb79
08.07.2016 09:19На графике просто масштаб времени мал, в реале разумеется вертикальных линий там нет, «мгновенно» концентрация не повышается.
Фрагмент графика"eldarmusin
08.07.2016 09:38+1Пик очевидно приходится на момент опускания пельменей в воду и в результате электролиза...
CyberKot
08.07.2016 08:51+1даже за 10 минут одна газовая горелка может „выжечь“ весь запас кислорода
Не соглашусь. Никуда не выжигается ничего. СО2 повышается — это бесспорно.
Вы измеряли концентрацию кислорода? Измерьте. Удивитесь, но она останется той же, тот же самый 21% (плюс-минус копейки).
В вашем случае, чисто математически, уровень СО2 вырос на 0.13% (с 400 до 1700 ppm).
Azya
08.07.2016 10:48Поглядывание на экран заставляет либо чаще открывать окно, либо наконец-таки задуматься об устройстве в доме нормальной вентиляции (наверное режим микропроветривания в окне был бы не лишним, а лучше какая-то вытяжка).
Прощай спокойная жизнь. Помню до того как купил анализатор CO2 мне было в квартире только или жарко или холодно, зимой практически никогда не заморачивался открытием окон и чувствовал себя вполне комфортно, а прошлая зима превратилась в сплошную борьбу холод-сквозняк-CO2 с бесконечным открытием-закрытием окон при переходе из одной комнаты в другую а летом все это усугубила еще плохо работающая вытяжка в жару и шум. В итоге я не выдержал и установил приточку (которая в первом комментарии упоминается), пока еще не совсем ясно решила ли она все проблемы, но в квартире теперь при закрытых окнах CO2 держится в районе 900-1100 ppm (раньше даже при микропроветривании во всех комнатах этот показатель мог запросто уйти за 2000).Norno
08.07.2016 12:22Знакомая проблема. Решил установкой зимой обогревателя на пути холодного воздуха от окна. Решило проблему только частично, да и расходы на электроэнергию возросли. Но 900-1100 дома все же много. Стараюсь держать не больше 700, но получается не всегда.
SHadDim
08.07.2016 16:01Понаблюдав несколько недель за CO2 пришёл к выводу что без приточных систем сложно обеспечить низкий уровень СО2. Только если окно постоянно открыто. Да и не ощущаю я разницы между разными уровням CO2, кроме особо высоких (больше 2000), поэтому решил поставить уровни предупреждения жёлтый — 1000, красный — 1500.
После приобритения датчика сильно удивился как быстро комната в 60 м3 «надыхивается» всего двумя людьми :)wmtoolsnet
08.07.2016 20:15Вы может не ощущаете, а вот кровеносная система — запросто. Это как температура света к комнате. Вроде теплый ничем не отличается от холодного, видно и так и так, а вот через пару часов от теплого света, в сон клонит.
Есть многие недомогания, которые лет 10 назад, я бы никогда не проассоциировал бы с СО2, а теперь запросто. Например утомляемость, сексуальное либидо, уровень мигрени — вполне себе зависят от свежести воздуха (не только, разумеется).
michigun
Где-то здесь же пишет «Тион» – производитель «проветривателей».
Я лично поставил такой в каждую комнату, и мне довольно сильно нравится результат.
Окна, открытые или с микропроветриванием, решая или частично решая вопрос с CO2, создают другие проблемы. Это холод, грязь\запахи в воздухе, шум (автосигнализация, песни под окнами и т.п.).
Проветриватель снимает часть этих проблем.
Danov
ТИОНу бы еще увлажнитель с ионизатором встроить.
michigun
Из моего опыта использования увлажнителей — необходимость доливать воды рано или поздно сводит их использование к нулю.
ну, или приостанавливает, до следующего острого периода желания поувлажнять.
а проветриватель работает, внимания не требует, и свою задачу решает.
я бы «комбайн», скорее всего, и брать бы не стал — вряд ли удалось бы два полноценных устройства так объединить.
ну а про ионизатор мнения не имею.
igolikov
я использую увлажнитель в зимний период уже 7 лет, и желание доливать воду не пропадает. Разница сухой/влажный воздух ощущается весьма сильно
Barmaglot
Просто заведите аквариум. И никакого увлажнителя не надо.
Xandrus
А в аквариум воды не надо доливать?
Barmaglot
Надо, но не доливать, а подменять. А это так или иначе приходится делать. В идеале — раз в неделю. Реально — лень мешает, но приходится. Рыбки — они живые.
daggert
Подменять? Мне биологи говорили что только доливка.
Barmaglot
Сливается примерно четверть, заливается свежая.
Если только доливать, то начинает увеличиваться концентрация всего и прежде всего ненужных соединений азота. Испаряется только вода, а добавляете растворы всего на свете, плюс рыбий метаболизм. В общем, со временем аквариум превратится в соленую клоаку. :)
Обязательно сливать и только потом доливать. Надо удалять продукты жизнедеятельности рыб.
webkumo
С этим (частично) могут справляться фильтры и прочие очистители. Если качественную систему поставить — можно будет воду обновлять гораздо реже (не аквариумист, точно не скажу, но что-то около раза в полгода-год). Остальное время только доливая.
Barmaglot
Рыбу постоянно кормят, а согласно закону сохранения вещества, всё это остаётся в банке. Важно удалять продукты жизнедеятельности. Как это сделать неважно. Можно и фильтрами. В морских аквариумах так и делают. Но подменить воду проще и гораздо дешевле, что характерно.
Barmaglot
.
Xandrus
Если вы увлажняете воздух с помощью аквариума, то вода в нём испаряется, тогда требуется в общем смысле долив. Если долива требуется мало, то и процесс увлажнения воздуха идёт медленно.
Barmaglot
Я не увлажняю. Меня и так всё устраивает. У меня рыбки для эстетики.
Norno
И какая у его производительность? У меня зимой (~ -25), при вентиляции достаточной для поддержания концентрации CO2 <800ppm при 2-х людях в квартире, увлажнитель с производительностью 400г/ч кое как держал влажность на уровне 20% и то не всегда…
Barmaglot
Думаю, поллитра в час не будет. Но в квартире с аквариумом однозначно гораздо лучше обстоят дела чем без оного. Мой совет был больше из области «как побороть свою лень».
Teemon
СКОЛЬКО-СКОЛЬКО ОН СТОИТ?!?!