[Из песочницы] Сказ о том как MT8060 c Arduino подружились
Эта статья посвящена монитору качества воздуха MT8060 с датчиком углекислого газа и возможности считывать его показания на PC и Arduino.
Из этой статьи Вы узнаете:
- Как я разбирал данное устройство.
- Как подключить датчик CO2 к arduino, не разбирая его.
- Как считать данные, и как преобразовать к виду, в котором они отображаются на экране (и даже в большем диапазоном значений).
- Скетч и разводка кабеля прилагаются.
Осторожно, трафик!
Суть проблемы
Однажды зайдя на Geektimes я обнаружил несколько статей про датчик углекислого MT8060 от ДАДЖЕТ. В комментариях шло активное обсуждение возможности подключения данного устройства к компьютеру для получения данных. В комментариях своим опытом по этому вопросу я тогда поделиться не мог (ещё не было R&C mode), поэтому решил написать статью, заодно раскрыв вопрос более подробно и с «картинками».
К сожалению, у этой модификации устройства нет возможности передачи данных по USB. Зато есть диагностический порт, по которому можно считывать все данные, а также произвести калибровку устройства (вероятно). В следующем разделе описано, как добраться до этого порта, и как к нему подключиться. Повторять это не обязательно — в конце следующего раздела приведены все данные, чтобы подключиться к порту не разбирая устройство.
Разборка и изучение возможности подключения
Фото сделаны на камеру телефона, временами не очень качественные, я сильно не старался т.к. не думал, что буду писать статью, а делал на всякий случай.
Итак, на задней стороне есть три резиновые заглушки, за которыми расположены три болта. Заглушки можно достать при помощи пинцета, или подцепив иголкой.
Кроме болтов две половинки корпуса держаться ещё и на защёлках, которые расположены по всему периметру корпуса. Чтобы разделить половинки достаточно провести зубочисткой по периметру корпуса, зазора в пол миллиметра хватило, чтобы защёлки разошлись. Далее аккуратно приоткрываем корпус и видим, что от микросхемы к задней крышке идёт резиновый шланг, и можно повредить крепления и микросхемы, к которым он прикреплён при резких движениях.
Теперь видна задняя сторона печатной платы устройства, диагностические выводы и разъем RJ45. Прогуглив обозначения, которые были нанесены на схему, я вышел на статью CO2MeterHacking, в которой рассматривалось похожее устройство. Подключившись, так же как описано в статье, и запустив предлагаемый там, скетч я получил заветные данные, которые частично совпадали с данными, отображаемыми на экране — главная цель была достигнута.
Кроме того, была заметна разводка этих контактов на разъем RJ45. Посмотрев на разводку, и прозвонив, на всякий случай контакты я нарисовал схему подключения.
Обозначение и назначение контактов, следующее:
- C (Clock) — тактирующий сигнал.
- D (Data) — сигнал данных.
- G (Ground) — земля.
- V (VDD) — питание +3V.
Распиновка подошла для стандартного коннектора с четырьмя жилами, и в тестовых целях был собран такой вот arduino-совместимый коннектор.
Устройство можно собирать, но я предварительно убрал заглушку, закрывающую снаружи доступ к порту RJ45. Она закреплена на четырех защелках, которые я аккуратно отогнул изнутри, но думаю её можно достать, просто подцепив снаружи, без необходимости разбирать устройство. На фото ниже изображено как она держится и как выглядят защёлки.
Считывание и декодирование параметров
Дальнейшие исследования проводились на собранном устройстве, с «открытым» портом, и они были чисто программные.
Подключаем оранжевый провод (контакт D) к пину D3 arduino, бело-зелёный (контакт C) к пину D2 arduino-совместимой платы.
Данные передаются по протоколу SPI. Для считывания и декодирования данных был написан метод и простой скетч, который выводит в последовательный порт значения влажности, температуры и концентрации углекислого газа.
После запуска скетча в монитор последовательного порта начинают поступать данные, идентичные показаниям на экране устройства с периодичностью, раз в секунду, или около того.
Несмотря на то, что уровень влажности на устройстве отображается значением Lo, при считывании показаний через порт они вполне себе отображаются как значения меньше 20. Не понятно для чего это было сделано, вероятно, для того, чтобы не делать ещё один «светофор» по влажности, а выводить Lo, если влажность уже критически низкая.
Вот, собственно, и всё: данные поступают каждую секунду, можно строить графики в высоком разрешении, или написать любую другую логику. Я, например, сделал оповещение по Telegram о выходе показателей за пределы нормы, что избавляет от необходимости постоянно следить за показателями. Так же настроил Mi Band на соответствующие уведомления — удобно, если показания превысят предел ночью, и надо выключить увлажнитель или проветрить. Можно пойти дальше, и интегрировать эти показатели с системой автоматического проветривания, или к умной розетке, в которую подключен тот же увлажнитель — далее ограничения только по фантазии.
Мысли вслух о беспроводной передаче данных
В статье на revspace предлагается использовать беспроводную передачу данных, в ней же можно найти пример скетча для пересылки данных с использованием передатчика NRF24L01+. Кроме того, внутри корпуса имеется достаточно свободного места, как мне показалось, которого хватит на небольшой контроллер и модуль беспроводной связи. Кроме того, внутри имеется и питание 3V (контакты G и V), что избавляет от необходимости использования сторонних источников питания, ну и 5V с порта USB можно использовать, если 3V не хватит. Если надумаю реализовать какой-нибудь беспроводной метод передачи данных — сочиню ещё одну статью по этому поводу.
На этом пока всё, спасибо за внимание!
Ссылки и источники
Автор статьи не несёт ответственность за попытки повторить или применить результаты, представленные в данном материале!