Когда возникает необходимость контролировать микроклимат на объекте, который находится в десятках или даже сотнях метров от системы управления, обычные бытовые сенсоры с их короткими проводами сразу отпадают. Нужно что-то более серьезное, способное работать в жестких условиях и не бояться длинных линий связи. Именно под такие задачи и попалась мне на глаза эта небольшая перфорированная коробочка — промышленный датчик температуры и влажности SD123-T10, о котором хочется рассказать подробнее.
Первое, что бросается в глаза, — это очень компактный корпус, который изначально спроектирован для монтажа на DIN-рейку. Впрочем, никто не мешает зафиксировать его и обычными саморезами, если того требует место установки. Решение универсальное, и это подкупает.
Любопытство взяло верх, и я без какого-либо инструмента вскрыл корпус. Внутри обнаружилась аккуратная плата с минимумом компонентов, но с интересными конструктивными решениями, о которых расскажу чуть позже.
Отдельного внимания заслуживает разъемная колодка для подключения кабеля — это действительно удобно при монтаже и обслуживании. На первый взгляд у разъема пять контактов, но по факту задействованы только четыре: линии A и B для RS485, плюс питания и общая земля. И вот тут начинается самое интересное: в документации и на большинстве схем, гуляющих по интернету, назначение контактов перепутано. Реальная распиновка выглядит иначе, чем заявлено, и это стоит учитывать, чтобы не спалить устройство при первом подключении.
Производитель позиционирует этот прибор как решение для промышленных объектов, телекоммуникационных базовых станций, производственных цехов, складов, теплиц, больниц, лабораторий, отелей и ресторанов. Сфера применения действительно широкая. Однако я не вижу препятствий для того, чтобы использовать такой датчик и в домашней автоматизации. Единственный сдерживающий фактор — цена, которая заметно выше, чем у простейших I2C-сенсоров.
Если проводить параллели с обычными датчиками на шине I2C, то картина вырисовывается довольно четкая. С одной стороны, интерфейс RS485 с протоколом Modbus RTU снимает все ограничения по длине проводов — теоретически можно прокладывать линии до километра при соблюдении определенных условий. Напряжение питания тоже радует гибкостью: от 5 до 28 вольт. К тому же на одну шину можно посадить сразу несколько таких сенсоров, присвоив каждому свой программный адрес. Ну и, конечно, готовый вентилируемый корпус избавляет от необходимости что-то конструировать самостоятельно.
Но есть и обратная сторона. Помимо более высокой стоимости, мы теряем доступ к некоторым функциям, которые доступны при работе с сенсором напрямую по I2C. Например, к встроенному нагревателю для самопросушки, который может быть полезен в условиях повышенной влажности.
Что внутри и какие характеристики
Сердцем устройства служит цифровой датчик SHT30, который изначально работает по шине I2C. Поэтому основные параметры измерения стоит смотреть именно в даташите на этот чип. Если говорить о ключевых цифрах, то диапазон измерения температуры составляет от -40 до +125 градусов Цельсия с разрешением 0,01 градуса и заявленной точностью ±0,2°C. По влажности картина такая: диапазон от 0 до 100% RH, шаг 0,01% и погрешность ±2,0% RH. Питается все это от источника постоянного тока напряжением 5–28 вольт, а потребляемая мощность не превышает 0,1 Вт.
Инженеры поступили грамотно, разместив сам сенсор не на основной плате с микроконтроллером, а на отдельной промежуточной платке. Теоретически это должно снижать влияние нагрева от микросхем и стабилизатора на точность измерений. Такое решение встречается нечасто и вызывает уважение к разработчикам.
Обработкой данных занимается маломощный микроконтроллер PHY6222 с ядром ARM Cortex-M0. Он собирает показания и в реальном времени вычисляет температуру точки росы и температуру по влажному термометру.
PHY6222 — это система на кристалле, изначально предназначенная для приложений Bluetooth 5.2 и IEEE 802.15.4. Она оснащена 32-битным процессором ARM Cortex-M0, 64 КБ SRAM, флэш-памятью объемом от 128 КБ до 8 МБ и 96 КБ ПЗУ. Этим объясняется наличие печатной антенны на плате, хотя в текущей прошивке радиомодуль, судя по всему, не задействован.
За передачу данных по шине RS485 с протоколом Modbus RTU отвечает отдельная микросхема. Но вот чего на плате нет, так это защитных элементов — ни диодов, ни самовосстанавливающихся предохранителей. Для промышленного применения с высоким уровнем электромагнитных помех это серьезный минус, который ставит под сомнение надежность устройства в жестких условиях.
Встроенный стабилизатор преобразует входное напряжение из диапазона 5–28 вольт в нужный внутренний уровень, что позволяет питать датчик от самых разных источников.
Программная часть: неожиданные особенности Modbus RTU
С программной точки зрения датчик оказался на удивление интересным. Во-первых, номера регистров здесь отличаются от подавляющего большинства китайских аналогов, где традиционно используются адреса 0x0001 и 0x0002. Во-вторых, это первый RS485-датчик в моей практике, который умеет отдавать данные в формате FLOAT. Это позволяет получать значения ровно в том виде, в котором они считываются с шины I2C, без потери точности. При этом используется порядок байт «Float32 — Little endian byte swap». В-третьих, помимо непосредственно измеряемых величин, устройство выдает и расчетные параметры: точку росы и температуру по влажному термометру.
Для настройки и тестирования производитель предлагает собственную программу, но пользоваться ею решительно невозможно — интерфейс полностью на китайском, без каких-либо признаков английского перевода. Сплошные иероглифы, в которых без специальной подготовки не разобраться.
Поэтому я пошел проверенным путем и использовал общеизвестную утилиту Modbus Poll. По умолчанию адрес устройства — 1, скорость обмена — 9600 бод. В моем случае адрес уже был изменен на 3, поскольку датчик планировалось задействовать в одном проекте, о котором обязательно расскажу отдельно.
Чтение регистров данных показало, что документация в этом плане почти не врет. Почти — потому что ниже откликаются и недокументированные регистры, значения в которых немного отличаются от основных. Что именно в них отображается, пока не совсем ясно.
Если честно, точность, которую дает FLOAT32, в большинстве бытовых и даже промышленных сценариев избыточна. Поэтому я пока ограничился своим универсальным драйвером для RS485-сенсоров. Если возникнет реальная потребность в повышенной точности, написать новый драйвер не составит труда. Сравнение показаний этого датчика с другими сенсорами планирую провести в ближайшее время и оформить результаты в отдельном материале.
С настройками регистров ситуация такая: задание адреса устройства и скорости передачи работает ровно так, как описано в документации. Никаких сюрпризов здесь нет.
А вот с корректировками температуры и влажности вышла настоящая засада. По документации, значения должны задаваться в формате INT16, причем перед записью корректировку нужно умножить на 10. То есть, чтобы сместить температуру на -2,5 градуса, в регистр 259 следует записать значение -25. Но сколько бы я ни пытался записывать туда данные, на выходные показания это не влияло вообще. Даже после перезагрузки устройства. Впрочем, с похожим поведением я уже сталкивался на другом китайском изделии, так что это, видимо, системная особенность.
Остается открытым вопрос о том, есть ли в адресном пространстве регистры для управления встроенным нагревателем сенсора. Пока обнаружить их не удалось, но это не значит, что их нет вовсе. Возможно, они просто не описаны в доступной документации.
В целом же SD123-T10 оставляет двойственное впечатление: с одной стороны, это интересное и функциональное устройство с рядом нестандартных решений, с другой — небрежная документация и отсутствие защиты по питанию заставляют относиться к нему с осторожностью. Для ответственных промышленных применений я бы рекомендовал дополнительно озаботиться внешними защитными элементами, а для домашних экспериментов — это вполне рабочий вариант.