[Из песочницы] Сказ о том как MT8060 c Arduino подружились

07336f89382c4fb1b44b640d220079ee.pngЭта статья посвящена монитору качества воздуха MT8060 с датчиком углекислого газа и возможности считывать его показания на PC и Arduino.

Из этой статьи Вы узнаете:

  • Как я разбирал данное устройство.
  • Как подключить датчик CO2 к arduino, не разбирая его.
  • Как считать данные, и как преобразовать к виду, в котором они отображаются на экране (и даже в большем диапазоном значений).
  • Скетч и разводка кабеля прилагаются.


Осторожно, трафик!

Суть проблемы


Однажды зайдя на Geektimes я обнаружил несколько статей про датчик углекислого MT8060 от ДАДЖЕТ. В комментариях шло активное обсуждение возможности подключения данного устройства к компьютеру для получения данных. В комментариях своим опытом по этому вопросу я тогда поделиться не мог (ещё не было R&C mode), поэтому решил написать статью, заодно раскрыв вопрос более подробно и с «картинками».

К сожалению, у этой модификации устройства нет возможности передачи данных по USB. Зато есть диагностический порт, по которому можно считывать все данные, а также произвести калибровку устройства (вероятно). В следующем разделе описано, как добраться до этого порта, и как к нему подключиться. Повторять это не обязательно — в конце следующего раздела приведены все данные, чтобы подключиться к порту не разбирая устройство.

Разборка и изучение возможности подключения


Фото сделаны на камеру телефона, временами не очень качественные, я сильно не старался т.к. не думал, что буду писать статью, а делал на всякий случай.

Итак, на задней стороне есть три резиновые заглушки, за которыми расположены три болта. Заглушки можно достать при помощи пинцета, или подцепив иголкой.

4ec6e36352964f3eaa39bd161bc5875e.jpg

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

a7001842fbd1466e9b5fba57e26b8065.jpg

Теперь видна задняя сторона печатной платы устройства, диагностические выводы и разъем RJ45. Прогуглив обозначения, которые были нанесены на схему, я вышел на статью CO2MeterHacking, в которой рассматривалось похожее устройство. Подключившись, так же как описано в статье, и запустив предлагаемый там, скетч я получил заветные данные, которые частично совпадали с данными, отображаемыми на экране — главная цель была достигнута.

Кроме того, была заметна разводка этих контактов на разъем RJ45. Посмотрев на разводку, и прозвонив, на всякий случай контакты я нарисовал схему подключения.

7144a82d74574cc89b25b48829c2dbb7.jpg

Обозначение и назначение контактов, следующее:

  • C (Clock) — тактирующий сигнал.
  • D (Data) — сигнал данных.
  • G (Ground) — земля.
  • V (VDD) — питание +3V.


Распиновка подошла для стандартного коннектора с четырьмя жилами, и в тестовых целях был собран такой вот arduino-совместимый коннектор.

88c9506fca2441d3ba876c4e1909d0a4.jpg

Устройство можно собирать, но я предварительно убрал заглушку, закрывающую снаружи доступ к порту RJ45. Она закреплена на четырех защелках, которые я аккуратно отогнул изнутри, но думаю её можно достать, просто подцепив снаружи, без необходимости разбирать устройство. На фото ниже изображено как она держится и как выглядят защёлки.

b8d02adde284460e91ec775c517390d6.jpg

Считывание и декодирование параметров


Дальнейшие исследования проводились на собранном устройстве, с «открытым» портом, и они были чисто программные.
Подключаем оранжевый провод (контакт D) к пину D3 arduino, бело-зелёный (контакт C) к пину D2 arduino-совместимой платы.

78f3f3b106594960a0b552330c7bb35d.jpg

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

После запуска скетча в монитор последовательного порта начинают поступать данные, идентичные показаниям на экране устройства с периодичностью, раз в секунду, или около того.

1120ccb4d13b4a678f513c7f0300b81e.jpg

Несмотря на то, что уровень влажности на устройстве отображается значением Lo, при считывании показаний через порт они вполне себе отображаются как значения меньше 20. Не понятно для чего это было сделано, вероятно, для того, чтобы не делать ещё один «светофор» по влажности, а выводить Lo, если влажность уже критически низкая.

Вот, собственно, и всё: данные поступают каждую секунду, можно строить графики в высоком разрешении, или написать любую другую логику. Я, например, сделал оповещение по Telegram о выходе показателей за пределы нормы, что избавляет от необходимости постоянно следить за показателями. Так же настроил Mi Band на соответствующие уведомления — удобно, если показания превысят предел ночью, и надо выключить увлажнитель или проветрить. Можно пойти дальше, и интегрировать эти показатели с системой автоматического проветривания, или к умной розетке, в которую подключен тот же увлажнитель — далее ограничения только по фантазии.

Мысли вслух о беспроводной передаче данных


В статье на revspace предлагается использовать беспроводную передачу данных, в ней же можно найти пример скетча для пересылки данных с использованием передатчика NRF24L01+. Кроме того, внутри корпуса имеется достаточно свободного места, как мне показалось, которого хватит на небольшой контроллер и модуль беспроводной связи. Кроме того, внутри имеется и питание 3V (контакты G и V), что избавляет от необходимости использования сторонних источников питания, ну и 5V с порта USB можно использовать, если 3V не хватит. Если надумаю реализовать какой-нибудь беспроводной метод передачи данных — сочиню ещё одну статью по этому поводу.
На этом пока всё, спасибо за внимание!

Ссылки и источники


Автор статьи не несёт ответственность за попытки повторить или применить результаты, представленные в данном материале!

© Geektimes