Повесть о датчиках углекислого газа (MH-Z19 & DS-CO2)

Еще в прошлом году я увидел на канале Дмитрия Коржевского, как он создавал монитор содержания углекислого газа в воздухе. И эта тема меня заинтересовала. Поскольку здесь, в Вильнюсе, я работаю из дома, плюс у меня комната-студия, и вентиляция в моем новом доме ну о-о-очень странная задуматься о содержании углекислого газа в помещении это хорошая идея.

Опять же, у вас бывало, когда вы сидите и работаете, а мозг ну вообще не варит, и хочется дремать? Думаете это лень? Нет! Проверьте уровень углекислого газа в помещении, ибо отравление углекислым газом дает именно такие симптомы: вялость, плохая работа мозга, сонливость. Ключ к эффективной интеллектуальной работе дома — хорошая вентиляция. И я заказал датчик.

Осень прошлого года, когда я тут в Литве обустроился, была странной. Странной в том смысле, что до меня постоянно не доходили посылки с Ebay. Заказываю трансивер — его куда-то привозят, и куда-то бросают (после 3 попытки доставки получил возврат, и решил купить CW трансивер, с которым мучился), заказал датчик — он вообще не пришел. Плохой год 2022. 🙂

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

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

Накидываю тривиальную схему на AVR Atmega8

Ничего необычного: модуль MH-Z19, семисегментник, 2 микросхемы HC595 в качестве драйвера, три светодиода для отображения уровня загазованности, и модуль зарядки LiPol для возможности автономной работы (вдруг я захочу унести модуль в лес, для калибровки на свежем воздухе?)

С небольшими страданиями ( моя лазерно-выжигательная технология почему-то стала сбоить) изготовил плату индикации, запаял. Подключил все к моей AVR девборде, и начал писать прошивку.

Набросал, подключаю. Не работает. Точнее показания не изменяются значительно, если на датчик подышать. Ну что же, достаем Salelae Logic, и смотрим что там происходит.

WTF?! Почему датчик шлет какие-то данные? И он не откликается на запрос микроконтроллера. Что за дичь?

Начинаю внимательно изучать данные. Ответ выглядит как

0x42, 0x4D, 0x08, 0x65, 0x08, 0x7B, 0x04, 0xB6, 0x01, 0x2B, 0x00, 0x00, 0xE2, 0x00, 0x06, 0x4D

Это явно не ответ MH-Z19! Но модуль выглядит внешне как MH-Z19, и на пине PWM меняется скважность, если я дышу на датчик. Следовательно датчик работает, но это не НЕ MH-Z19!

Первые два байта ( 0x42, 0x4D ) выглядят явно как преамбула. Может быть кто-то уже писал код для обнаружения этого датчика? Начинаю искать.

https://saturn.ffzg.hr/rot13/index.cgi?action=weblog_display;category=air%20quality

https://sites.google.com/site/wenyumaker/03-mh-z19%E4%BA%8C%E6%B0%A7%E5%8C%96%E7%A2%B3%E5%82%B3%E6%84%9F%E5%99%A8/02-g3-mh-z19-dht11-lcd-arduino

Хм, глядя на код, я понимаю что пакеты данных очень похожи на сенсор твердых частиц PMS5003. Но! У нас явно датчик углекислого газа. Но протокол очень похож. Возможно данный производитель делает и датчики углекислого газа? Ищем, и находиим вот это

https://www.plantower.com/en/products_35/81.html

И даже есть даташит!

Взглянем на протокол

Странно, здесь 12 байт, а у нас в ответе 16… Загадка. Но мы можем попробовать поиграть с данными.

0123456789101112131415
0x420x4D0x080x650x080x7B0x040xB60x010x2B0x000x000xE20x000x060x4D
0x420x4D0x070xE80x080x600x0C0xFE0x010x2D0x000x000xE20x000x060x06
0x420x4D0x070xB60x080x440x0D0x7E0x010x2C0x000x000xE20x000x060x38

Если мы предположим что байт 4 и 5 наши данные, то значения ppm датчика будут таким:

0x087B = 2171, 0x0860 = 2144, 0x0844 = 2116.

Странно… И не выглядит правильным. Попробуем байты 6 и 7

0x04B6 = 1206, 0x0CFE = 3326, 0x0D7E = 3454

Выглядит правдоподобно! Логично предположить, что в этой версии датчика, байты были немного сдвинуты, и правильный код получения показаний выглядит вот так:

Дальнейшее тестирование показало, что значения изменяются логично. Открываю лоджию и окно, вентилирую. Показания падают до 550 ppm. Поработал часа 3 с закрытой лоджией, и без включенной вытяжки — значения постепенно поднялись до 930 ppm. Буду продолжать вести наблюдение, и изготавливать корпус. ( и ожидать, когда ко мне придет паяльная станция с феном, ибо я неверно запаял Атмегу на плату, а дешевым китайским паяльником микруху уже не снять)

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *