Опрос


Что для Вас Умный Дом?


Результаты

Измеряем уровень углекислого газа (СО2) с помощью MH-Z14

03/04/2016 12:39:48

Эта статья родилась благодаря подсказкам пользователя нашего форума d.v.ermakov, который поделился со мной своим опытом и полезной информацией.

Углекислый газ (оксид углерода IV) - важная составляющая нашей жизни. Как и любой другой химический элемент или химическое соединение, углекислый газ участвует в большом количестве процессов, происходящих в природе. Углекислый газ занимает весьма важную роль в работе человеческого организма, его внутренних органов. Человек потребляет кислород и выделяет углекислый газ. В сутки среднестатистический человек генерирует около 1 кг CO2. В нормальных условиях, при низкой концентрации углекислый газ абсолютно безвреден. Но даже незначительное увеличение концентрации CO2 (до 0,2%-0,5%) уже вызывает негативные реакции в организме человека (слабость, сонливость, ощущение несвежести воздуха), а при повышении концентрации до 5-7% уже появляются более выраженные симптомы: головная боль, головокружение и даже потеря сознания. Концентрации свыше 10% опасны для жизни. К счастью в отличие от других опасных газов, таких как угарный (CO), углекислый газ не приводит к долговременным нарушениям работы организма и при нормализации уровня концентрации все симптомы быстро проходят.

Уровень углекислого газа (СО2) в помещении можно измерить. Для этого существуют специальные датчики. К сожалению, измерение уровня углекислого газа в воздухе достаточно сложная задача и до не давнего времени подобные датчики стоили неприлично дорого, что затрудняло их применение в бытовых условиях. Но научно-технический прогресс не стоит на месте. И сегодня появился целый ряд относительно недорогих и простых в применении датчиков углекислого газа. Один из таких вариантов - датчик MH-Z14

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

Как говорится "не баран чхал"... Датчик выпускается в двух разновидностях: 0-5000ppm и 0-2000ppm. Что такое "ppm" - это parts per million, то есть количество частиц CO2 на миллион частиц воздуха. 1000 ppm - это 0,1% содержания CO2 в воздухе. В чистом атмосферном воздухе концентрация CO2 составляет порядка 350-450 ppm. (0,03%-0,04%). В жилых помещениях концентрация углекислого газа в силу естественных причин значительно выше и может достигать 0,06%-0,1% (1000-1500 ppm), что является в целом допустимым уровнем, но некоторые чувствительные люди уже могут ощущать "нехватку чистого воздуха". Концентрации свыше 0,1% (1000 ppm) в жилых помещениях являются нежелательными, так как уже при таком уровне могут проявиться симптомы слабости. Долговременная концентрация CO2 выше 0,25% (2500 ppm) является недопустимой.

Вот, почему наличие датчика CO2 в Умном Доме весьма желательно. Если дом оборудован принудительной приточной вентиляции, то система может автоматически, без ведома человека проветрить его. А если вентиляции нет, то хотя бы сообщить о нежелательном повышении уровня углекислого газа и порекомендовать открыть окно...

При наличии устройства MegaD-328 интеграция датчика MH-Z14 в общую систему Умного Дома не составит труда. Датчик имеет PWM-выход, цифровой UART выход, но нас интересует самый простой аналоговый выход. Их в датчике два. DAC1 (пин 5, уровень 0-2,5В), DAC2 (пин 4, уровень 0,4-2В). DAC1 - самое то. Аналоговый выход датчика мы подключим к АЦП порту MegaD-328.
Таким образом мы используем пины 1, 3, 5
1 - питание (по паспорту 4-6В, но датчик хорошо работает и со стандартным питанием 3,3В)
3 - земля
5 - аналоговый выход 0-2,5В

Для наглядности подключения датчика я использовал исполнительный модуль MegaD-14-IN (АЦП доступно на портах P0-P5, положение джамперов нижнее), хотя датчик также подключается к любому из двух дополнительных портов, выведенных в модуле контроллера. То есть датчик можно подключить абсолютно к любому комплекту (релейному, симисторному) к разъемам XP3 или XP4 в контроллере.

Пользователь Dmitry V. Ermakov, который сравнивал показания датчика MH-Z14 с эталонным прибором приводит следующие данные, которые позволяют интерпретировать значения.
124 - 0 ppm, далее каждое следующее значение примерно 10 ppm. 620 - 5000 ppm.

Я не совсем понимаю, что такое 0 PPM, так как фоновое значение для атмосферного воздуха составляет ориентировочно 350 ppm, но это не столь важно. Каждый человек по-своему переносит повышенные концентрации CO2 и можно настроить работу системы на то значение, которое будет комфортным.

Мой датчик на свежем воздухе показал значение 100. Я предположил, что это и есть фоновое значение 350 ppm. А если исходить из того, что каждое следующее значение это 10 ppm, значит 1000 ppm достигается при значении в Web-интерфейсе 165 (по данным Дмитрия 223). Естественный разброс значений примерно 10 пунктов, поэтому желательно считывать значение раз 5, отбрасывать крайние и усреднять.

<?
require_once("ab-cms/class/main_class.php");
$ab = new cms_lib();

while (true)
{
    $result = array();
    for ( $i = 0; $i < 5; $i++ )
    $result[] = file_get_contents("http://192.168.0.14/sec/?pt=0&cmd=get");

    sort($result);
    $fresult = (round(($result[1] + $result[2] + $result[3]) / 3) - 100 ) * 10 + 350;
    $ab->mod_write(110, "SYSDATE(), '$fresult'");
    sleep(10);
}

?>

Я провел простой эксперимент. Площадь моего кабинета примерно 17 м2, в котором кроме меня больше никого не было. Я установил датчик на столе. Датчик показал (если исходить из моей трактовки значений) ориентировочно 400-420 ppm, что вполне похоже на правду. Дальше я загнал в кабинет несколько человек и попросил их перемещаться по кабинету, выполнять всяческие физические упражнения и глубоко дышать. Датчик моментально отреагировал на эту активность. В течение пары минут концентрация углекислого газа выросла в два раза.

Далее концентрация CO2 превысила 1000 ppm, что уже является не очень желательным (хотя и допустимым) для жилых помещений. Датчик MH-Z14 очень чувствительный. Когда кто-либо подходил к столу, датчик моментально реагировал повышением значения концентрации углекислого газа. После 5 минут физических упражнений я отправил людей отдыхать, а сам немного приоткрыл окно. Всего лишь за несколько минут концентрация углекислого газа пришла в норму.

Датчик MH-Z14 работает. Согласно сведениям пользователя Dmitry V. Ermakov, который сравнивал значения, полученный от MH-Z14 с профессиональным прибором, датчик отображает вполне адекватные показания, заслуживающие доверия. Датчик достаточно быстро отвечает на изменения в составе воздуха. Таким образом, MH-Z14 вполне применим в системах домашней автоматизации для управления системами вентиляции, да и просто для информирования жильцов о концентрации углекислого газа в помещениях дома.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



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



Сортировка комментариев: Последние сверху | Первые сверху

2016-12-06 12:05:18 | Andrey_B
Vitaliy, затрудняюсь ответить. У себя подобной ситуации не замечал. Может быть, коллеги подскажут?


2016-12-06 00:35:18 | Vitaliy
У датчика плавают значение в пределах 40-50 единиц (пример 82, 84, 127, 97 и тд). Какой-то стабильности в изменениях значений не выявлено. Калибровку кратковременно замкнув контакт HD на V- (как подсказано ниже) проводил. Замыкал на 7 секунд, Не помогло. Что может быть?


2016-09-17 10:30:41 | Александр
Два дня проводил замеры и сопоставлял с TGS 2600 а та же с MH-Z19 и остальными имеющимися MH-Z14 и MH-Z14A. Сопоставлял по аналоговым значениям и после калибровки через UART.
Значения похожи на представленные Igor78 ниже. Правда у меня на свежем воздухе на аналоговом выходе ровно и стабильно 0.200 VDC на всех испытуемых образцах. Так что должен заметить - устройство точное - но правда после калибровки. Подключив к Mega328 - просто считываю и умножаю на 6.4 как приведено Igor78, ниже.

Вот тут представлен способ общения с MH-Z14 c Raspberry Pi через PWM и UART:
https:/www.youtube.com/watch?v=Vk4oQpy98sc


2016-09-16 20:15:08 | Кирилл
Igor78,

Читаю Ваш коммент и душа радуется. "...чтобы перевести значение на входе Меги в ppm нужно умножить его на 6.4" - А я как раз внизу высчитал 6.84 ppm на одно значение Меги.


2016-09-15 21:37:58 | Александр
Вот полезная ссылка о калибровке подобных датчиков
www.permapure.com/wp-content/uploads/2013/01/calibration.pdf


2016-09-14 20:44:29 | Александр
Igor78,

Огромное спасибо за то что делитесь полезным опытом. Я тоже пытался проводить калибровку, но у меня другая дилема была. Оба датчика, что я купил показывали постоянно скачущие значения. К примеру на свежем воздухе, выдавали 0.33В и сразу же через секунду 0.45В, и так по кругу. Температура, влажность, питане в норме. Воспользовался Вашим советом (замкнув HD на V-) - потом выключил и дал остынуть датчикам. Потом дал питание, подождал пару минут и теперь показывает стабильно, и похоже на правду. Сверил с имеющимся MH-Z14A.


2016-08-24 13:38:10 | Igor78
Калибровку 0 можно сделать без UART подключения кратковременно замкнув контакт HD на V- после чего датчик будет считать текущую концентрацию СО2 как 400 ppm (проверено опытным путем).


2016-08-24 09:36:32 | Andrey_B
Igor78, спасибо за полезную информацию. Наверное, по большому счету для домашней автоматизации (не для лабораторных исследований) не важно какое значение является стартовым. Ведь зависимость линейная. Важно определить порог, который можно использовать для управления вентиляцией или сигнализирования о предельно допустимой концентрации.


2016-08-23 18:01:10 | Igor78
Добавлю свои 5 копеек. Приобрел здесь пару таких датчиков. Подключил их к Меге и получил абсолютно разные значения: один показывал на свежем воздухе 62, другой 140. Подключил их к Raspberry через UART, получил значения 400ppm у одного и 820ppm у другого. После чтения даташитов понял, что как минимум у одного датчика нужно делать калибровку 0, причем один китайский производитель рекомендует делать калибровку раз в 6 мес, другой рекомендует делать это поместив датчик на 5 минут в азот. Я просто подержал его 15 минут на свежем воздухе и отправил команду калибровки через UART, после чего он показал мне 400 – 404 ppm вместо 800 с лишним. Кстати, меньше 400 ppm ни один из датчиков не выдавал, даже когда я их обдувал пропан-бутановой смесью для продувки техники из баллончика. После такой калибровки одного датчика его показания приблизились к показаниям второго (видимо откалиброванного на заводе) с разницей 3-5%. Подключив датчик одновременно через UART к Raspberry и через АЦП вход к Меге, снял показания ppm, напряжения на входе и значения входа Меги. Замеры подтвердили линейную зависимость (есть график в одном из даташитов) напряжения на аналоговом выходе и значения в ppm получаемых через UART: 400ppm=0,204В=61; 904ppm=0,457В=141; 5000ppm=2,506В=782. Таким образом чтобы перевести значение на входе Меги в ppm нужно умножить его на 6.4. По хорошему нужно бы еще сравнить показания датчика с показаниями профессионального прибора, но у меня его нет (пока).


2016-07-04 21:28:43 | Кирилл
Кстати, должен заметить, что после полевых испытаний на своем экземпляре, показания рознятся, в зависимости от источника питания. При 5В (как по паспорту) - значения более точны. Таки 3.5 В не достаточно


2016-07-04 20:42:39 | Кирилл
Вот моя арифметика:

2.5В - линейный аналоговый максимум датчика(согласно даташиту) для 5000ppm. Значит на 0.1В приходиться 200ppm.
Со стороны АЦП Меги: 1024 - это 3.5В (измерено мультиметром). Значит на 0.1В приходится 29.25 значений АЦП.
Т.е. 200 / 29.25 = 6.84ppm - число ppm на одно значение Меги. А не 10.

Далее, 350ppm / 6.84ppm = 51.19 - значение Меги кол-ва СО2 для чистого воздуха.
Вопрос, от куда 124? 100 - понятное дело, личный замер автора, но значит, воздух тогда не совсем чистый, даже для 450ppm - должно быть 65.

Пожалуйста, поправьте, если я не прав.


2016-07-04 08:45:21 | Кирилл
Что-то с математикой в программе не совсем понятно - автор говорит, что 350 - фоновое значение; потом в формуле отнимает 100 - предположенное фоновое значение. Затем множим на 10 ( зачем?) и прибавляем отнятое до этого фоновое значение.
Поясните, пожалуйста.


2016-05-17 11:24:14 | Andrey_B
Влад, может.


2016-05-16 17:54:42 | Влад
Контроллер Мега-Д самостоятельно может принимать решение о включении и отключении вентилятора по достижению значений углекислого газа, то есть без участия сервера?


2016-04-16 14:12:33 | Dmitry V. Ermakov
Для управления вентиляцией предпочтительно использовать датчик 0-2000. У него меньше дрейф и он точнее получается в нужном диапазоне. У меня при 1100 ppm вентиляция включается, при 600 ppm выключается.


2016-04-16 13:30:26 | Dmitry V. Ermakov
После долгих экспериментов я просто умножаю значение ADC от датчика 0-2000 на 3,2, от датчика 0-5000 на 8 и получается значение в ppm. Точность примерно 5%, меня устраивает.
0 ppm конечно, не бывает. В моей таблице это для калибровки указано. Однако, значения ниже атмосферных 400 ppm бывают, если вокруг датчика есть движение воздуха. И это нормально.