Измеряем уровень CO2 с помощью T6703

10/03/2018 12:47:30

Пару лет назад я опубликовал статью про измерение уровня углекислого газа с помощью датчика MH-Z14 и контроллера MegaD-328. Датчик MH-Z14 имеет аналоговый выход и может подключаться к любым портам с функцией АЦП. Решение оказалось вполне рабочим, но с определенными оговорками. Во-первых, не все экземпляры хорошо работают с питанием 3,3В. Для стабильной работы требуется 5В. Во-вторых, в контроллерах MegaD-328/2561 нет высокоточного источника опорного напряжения, отчасти поэтому показания слегка плавают, что заметно при построении графиков. В третьих, аналоговый выход требует программного пересчета Вольт в PPM, а мнения по поводу алгоритма пересчета расходятся. В-четвертых, датчики имеют встроенную функцию автоматической калибровки, которая не всегда работает корректно. Некоторые пользователи отмечали, что с течением времени показания датчика сильно менялись, что затрудняло его использование в системах домашней автоматизации. Но время шло, развивался проект MegaD, появились и стали доступными и другие варианты для измерения концентрации CO2 в воздухе.

С тех пор как контроллер MegaD-2561 стал поддерживать подключение устройств, работающих по цифровой шине I2C, ассортимент совместимой периферии резко расширился. Причем качественным образом, поскольку большинство цифровых датчиков возвращают уже готовый результат в нужных единицах: градусах, миллиметрах ртутного столба, процентах, люксах и т.д. Очень важной и я бы даже сказал ключевой особенностью контроллера MegaD-2561 является то, что I2C-устройства можно подключать ко всем цифровым портам, а не только к каким-то определенным. Разумеется, в природе существуют и датчики углекислого газа (CO2), работающие по шине I2C. Один из таких датчиков, а именно T6703 от (Telair / Amphenol Advanced Sensors), я решил протестировать в паре с контроллером MegaD-2561.

NDIR датчики CO2: T6703 и MH-Z14
Слева T6703 со смонтированными клеммами, справа MH-Z14

T6703 - миниатюрный датчик, который почти в 4 раза меньше, чем MH-Z14 и легко разместится в корпусах от Supertronic. Также как и MH-Z14, сенсор T6703 умеет отдавать данные по UART и PWM, но дополнительно он имеет интерфейс I2C, с которым мы и будем работать. Для питания T6703 также требует 5В, что влечет за собой необходимость подключения дополнительного БП на 5В или конвертора 3.3В->5В, но потребляет в несколько раз меньше: "Avarage 25mA (20mA typical) у T6703" и "Avarage < 85 mA" у MH-Z14. Заявленная точность у китайского MH-Z14 (Winsen Sensor) выше (+-50% или 5%), чем у американского T6703 (+-75% или 10%), но к китайским единицам измерения всегда нужно относиться с настороженностью.


Скрин из документации. Разъем для подключения

Для подключения датчика используется 4 провода (питание, земля, линия SDA, линия SCL) и 2 порта контроллера. Кстати, датчик может работать на одной шине с другими I2C-устройствами, которые поддерживает контроллер.
Повторю, что для нормальной работы датчика требуется питание 5В. При тестировании датчик был подключен к БП DR-15-5 от MeamWell.
Важно! Для того, чтобы T6703 работал по интерфейсу I2C следует пин 6 (CTRL / TEST) соединить с землей!

Для того, чтобы получить данные от T6703, необходимо обычным образом настроить порты для работы с I2C (SCL/SDA). В качестве устройства выбрать "ANY".
Запрос данных производится с помощью команды вида

http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=t67xx

Где "pt" - порт, к которому подключена линия SDA, а "scl" - порт, к которому подключена линия SCL.

Прошивка контроллера MegaD-2561 должна быть не менее 4.26b2. Согласование уровней не требуется. Выдержка из документации: "I2C interface can operate at both 3.3V and 5V logic levels."

T6703 - первое включение
T6703 - первое включение

Здесь самое время написать про логику работы датчика. T6703 оснащен встроенным алгоритмом ABC LOGIC (TM). И вот, как это, по всей видимости, должно работать. В естественных условиях уровень CO2 в чистом атмосферном воздухе составляет порядка 350-450 ppm, не ниже. Сенсор T6703 измеряет концентрацию от 400 ppm до максимальной границы (2000 или 5000 ppm в зависимости от исполнения датчика). ABC LOGIC, насколько я понимаю, в процессе работы фиксирует минимальные показания и приравнивает их к 400 ppm. Возможно, именно этот процесс виден на графике первого включения. Датчик сначала показывал 800-900 ppm, но плавно "откалибровался" под 400 ppm в первые же часы. В дальнейшем в отсутствии людей в помещении он уже не выдавал значения выше 500 ppm.

А вот, что написано в доке.

ABC Logic™ requires continuous operation of the sensor for periods of at least 24 hours. With ABC Logic™ enabled, the sensor will typically reach its operational accuracy after 24 hours of continuous operation at a condition that it was exposed to ambient reference levels of air at 400 ppm CO2.

В первые 24 часа происходит основная калибровка. И желательно в это время обеспечить датчику свежий воздух, чтобы он смог корректно выставить 400 ppm. Но на этом процесс калибровки не завершается. В течение 7 дней нужно как минимум 3 раза хорошо проветрить помещение, чтобы значения стали еще более точными.

Теперь подключим датчики T6703 и MH-Z14 к контроллеру MegaD-2561 и сравним показания.

T6703 vs MH-Z14

Зеленый график - T6703
Красный график - MH-Z14 (модификация без "A")

Пересчет показаний MH-Z14 производился по формуле, которая приведена здесь. Красный график легким движением можно "подвинуть" вверх, но сути дела это не меняет.
Прежде всего, обратим внимание, что форма графиков идентична. Оба датчика определенно измеряют одно и то же. Но есть пара особенностей. Несмотря на то, что показания MH-Z14 программно слегка усредняются (5 измерений), видно, что график "дрожит". Дело тут главным образом в отсутствии высокоточного ИОН в текущей версии контроллера и 10-битная разрядность АЦП. У T6703 график плавный. Амплитуда показаний выше, он быстрее реагирует на изменение условий, тогда как MH-Z14 как бы "задемпфирован".

На более длинном отрезке времени выгляди это так.

Датчик T6703 более чувствительный. Все его "пички" - это присутствие меня в радиусе метра в течение нескольких секунд. Кстати, T6703 вполне можно пробовать использовать в качестве датчика присутствия людей.
MH-Z14 на кратковременное присутствие человека реагировал не всегда. А вот небольшой пик на его графике примерно в половине второго ночи никак не объясняется. Но это можно списать на помехи в опорном напряжении. Не факт, что в этом виноват именно датчик. Для того, чтобы сделать график с любого аналогового датчика более плавным, необходимо проводить как можно больше измерений и усреднять их. Цифровой T6703 этого не требует.
И еще график, но уже за другой период времени.


Забавно, что T6703 отдавал значения менее 400 ppm...

Картина в целом та же. T6703 более "быстрый", более чувствительный и более адекватный. Специально на датчики не дышал. В комнате велся обычный образ жизни.
Минимальное значение, которое я получил за несколько дней от T6703 - 358 ppm. Это интересно, ведь диапазон измерений от 400 ppm. Думаю, еще откалибруется с течением времени.
Да, если все же активно подышать прямо на T6703 он покажет и 8000 ppm и 9000 ppm и даже больше... А показания MH-Z14 при существующей формуле расчета не превысят 5000 ppm. Говорит ли это о чем-то? Не знаю.

Кое-что еще. Как вы знаете, NDIR датчики моргают в темноте. В это время происходит измерение. MH-Z14 моргает примерно 1,5-2 раза в секунду. А T6703 - раз в 5 секунд.

Меня часто спрашивают: "можно ли размещать CO2 датчики в одном корпусе с датчиками температуры?" И вот вам ответ.


Слева едва теплый T6703, справа "горячий" MH-Z14

Очевидно, что размещать в одном корпусе подобные датчики с температурными не стоит. Кстати, нагревается главным образом не сам корпус датчика, а его электронная обвязка. Вот теплофото обратной стороны.

Нагрев электроники обвязки NDIR CO2 датчиков

41 градус! У MH-Z14 "горячая" практически вся логика, а у T6703 микроконтроллер холодный, а красное пятнышко, по всей видимости, стабилизатор напряжения.

Несколько интересных особенностей T6703: процедуру калибровки можно запустить программно, адрес датчика можно также поменять программно, алгоритм ABC Logic можно выключить (по умолчанию включен).

Словом, с точки зрения использования в системах домашней автоматизации, как видно из данного мини-исследования, подходят оба датчика. Но, кажется, T6703 более интересный вариант. Он имеет меньшие размеры, может висеть на одной шине с другими I2C-устройствами, однозначно более быстрый и возможно более точный, не требует дополнительных расчетов, меньше потребляет электроэнергии, подключается к любым цифровым портам. Один небольшой минус - T6703 дороже, чем MH-Z14. Почти в два раза.

Еще раз напомню, что для работы с T6703 прошивка контроллера должна быть 4.26b2 или выше.

 

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



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



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

2018-04-09 11:51:28 | Константин
Не хочу питание от блока питание на рейке. Есть желание запитать от ИПБ для охранных систем, что нибудь из ассортимента /www.sbsar.ru/ups-12.htm

Камеры, роутеры, модемы и малина работают как раз от 12 и 5 вольт.

PS было клево, если бы был контроллер в каком нибудь пыле-влаго защитном корпусе (не на дин рейку) с питанием POE с 2-3-4 разъемами для дачиков например для размещения в подвале или на чердаке дома.


2018-04-09 11:04:44 | Andrey_B
Константин, можно взять нормальный БП типа DR-15-5. Не так, чтобы сильно дороже в абсолютном выражении.
Что касается DC-DC конвертера, то поищите на Али по запросу "Cpt-ul-1". Думаю, должно подойти.
У меня работает MAX44009 на расстоянии порядка 15-20 метров от контроллера. Сбоев нет вообще. То есть I2C на таких длинах в принципе работает. Но в конкретной ситуации с конкретными датчиками нужно тестировать.


2018-04-09 10:52:54 | Константин
Посоветуй DC-DC конвертер 12V -> 5V так что бы запитать датчики от существующего блока питания. Можно из ассортимента aliexpress.

На какую максимальную длину можно вынести датчики по I2C, хочется расстояние ~10-15 метров.


2018-03-18 10:45:46 | Andrey_B
Артем, выполнение сценария средствами контроллера возможно для АЦП-портов (MH-Z14), но в данный момент невозможно для цифровых I2C-датчиков.


2018-03-18 06:43:51 | Артем
Здравствуйте. Подскажите пожалуйста как сделать сценарий чтобы при превышении концентрации включался порт (out) для включения допустим реле, чтобы включилась вентиляция


2018-03-12 21:54:33 | minimax
Ну, я ж пошутил про защиту :)
Я просто знаю о применениях MH-Z14 через АЦП и да - там он не точен. Меньшее потребление - это прям существенный аргумент и повод заменить датчики. Андрей, а можете померить ток в импульсе? Может просто импульсы реже идут? Я смотрю даташит на T6703 и там пик даже выше - 200ма. MH-Z14 дает импульс каждые 2 секунды.


2018-03-12 12:35:42 | Andrey_B
В статье я не критикую MH-Z14. Я пытаюсь объективно рассказать об опыте использования двух датчиков совместно с контроллером MegaD-2561. Я вполне допускаю, что MH-Z14 по UART отдает более плавные значения. Но через 10-битный АЦП получается именно такая картина. Зато портов с функцией АЦП много и для подключения датчика используется всего лишь один порт.
Что касается потребления, то я его не замерял. Но вот картинка с тепловизора довольно красноречива. Плата MH-Z14 даже на ощупь теплая. Косвенно это указывает на то, что _среднее_ потребление этого датчика скорее всего больше.


2018-03-11 22:18:23 | minimax
Рад, что появился T6703, но должен сказать несколько слов в защиту MH-Z14.
Я использую MH-Z14 давно, и должен сказать что датчик очень точный и стабильный. Возможно приведенные здесь результаты - следствие использования АЦП. У меня он работает через uart и никаких скачков в показаниях не наблюдается. Действительно очень важна стабилизация питания - датчик подключен витой парой метров 20 и прямо рядом с ним стоит стабилизатор на 5 вольт. Читает его показания arduino и далее передает на сервер. Показания меняются предсказуемо и плавно.
Немного удивлен коментарием Андрея относительно тока. MH-Z14 потребляет порядка 100ма в импульсах, когда включаются диоды - это результат измерения и именно поэтому понадобился стабилизатор, иначе у меня питание просаживалось до 4.5В и показания искажались. у T6703 указано пиковое потребление 200мА по паспорту. Кто-то мерил потребление в рабочем режиме? Если пик - это момент включения диодов, то датчик с моей точки зрения проигрывает MH-Z14, хотя I2c для меги конечно круто :)