Перейти к содержимому

Датчик температуры и влажности SD123-T10 для шины RS485 Modbus RTU

Добрый день, уважаемые читатели!

Представляю вам небольшой обзор очередного чуда электронной промышленности Китая под названием SD123-T10. Небольшая перфорированная коробочка представляет собой датчик температуры и влажности SHT30 с выходом на шину RS482 и протоколом Modbus RTU. 

Корпус довольно небольшой и предназначен для установки на DIN-рейку. Но можно закрепить и обычными саморезами.

Датчик легко вскрыть без использования инструмента, что я сразу же и сделал, внутри коробочки установлена небольшая плата с детальками:

Колодка для подключения кабеля разъемная, что удобно. Несмотря на то, что контактов 5, используется только 4 – А, В, +питания и “земля”. Причем китайцы умудрились перепутать описание разъемов в документации и на всех рисунках, имеющихся в сети. Реальное расположение представлено на фото ниже:

Датчик позиционируется как средство измерения температуры и влажности для: промышленных объектов, базовых станций телекоммуникаций, производственных цехов, складов, сельскохозяйственных теплиц, больниц, лабораторий, отелей, ресторанов, контроля температуры и влажности на складах, строительных площадок и т.д. Но никто не запрещает использовать его и в домашних условиях, разве что цена “кусается” по сравнению с простейшими I2C датчиками.

Если сравнить данное изделие с самым обычным датчиком для шины I2C, то можно сделать такие выводы:

Достоинства:

  • Шина RS485 Modbus RTU позволяет не заботится о длине проводов (длина до 1км при определенных условиях) и напряжении питания (от 5 до 28 в).
  • Шина RS485 позволяет подключить к одной шине одновременно несколько однотипных сенсоров, так как адреса задаются программно пользователем.
  • Готовый вентилируемый корпус

Недостатки:

  • Цена
  • Мы теряем доступ к некоторому функционалу сенсоров, доступный по шине I2C, например встроенному нагревателю для самопросушки.

 


Внутреннее устройство и характеристики

В датчике температуры и влажности SD123-T10 используется цифровой I2C датчик температуры и влажности SHT30, поэтому основные характеристики данного датчика следует смотреть по данным из даташита на SHT30:

Напряжение питания: от 5 до 28 В
Потребляемая мощность:
0.1 Вт
Диапазон измерения температуры
: от -40 до +125 °C
Шаг измерения температуры (разрешение): 0.01°C
Погрешность измерения температуры (точность): ±0.2°C (max ±0.6°C)
Диапазон измерения влажности: от 0 до 100% RH
Шаг измерения влажности (разрешение): 0.01% RH
Погрешность измерения влажности (точность): ±2.0% RH (max ±4.0% RH)

Собственно сам датчик установлен не на основной плате с микроконтроллером, а не промежуточной, что очень хорошо и теоретически должно уменьшить влияние  нагрева микроконтроллера и стабилизатора на измерения.

 

Для обработки данных используется маломощный микроконтроллер с ядром M0 для сбора данных и вычисления температуры точки росы и температуры по влажному термометру в режиме реального времени PHY6222:

PHY6222  — это система на кристалле (SoC) для приложений Bluetooth 5.2/IEEE 802.15.4. Он оснащен 32-битным процессором ARM® Cortex™-M0 с 64 КБ SRAM, флэш-памятью 128–8 МБ, ПЗУ 96 КБ, 256-битной памятью и многорежимным радиомодулем со сверхнизким энергопотреблением. Это объясняет, зачем на плате разведена печатная антенна. Но в прошивке, по всей видимости, она не используется.

Измеренные значения температуры и влажности можно считывать в режиме реального времени через шину RS485, используя протокол Modbus RTU. За это отвечает другая микросхемка:

Но вот никаких защитных элементов (диоды, самовосстанавливающиеся предохранители) на плате не установлено. Так что надежность работы такого сенсора в промышленных условиях с высоким уровнем помех можно поставить под сомнение.

Датчик оснащен внутренним стабилизатором, который преобразует напряжение питания в диапазоне от 5 до 28В в внутреннее напряжение необходимого уровня.

 


Программный интерфейс Modbus RTU

Датчик довольно интересен в программном плане.

  • Во-первых, номера регистров отличаются от подавляющего большинства китайских датчиков температуры и влажности (как правило это 0x0001 и 0x0002).
  • Во-вторых, это единственный датчик для RS485, с которым мне лично удалось пообщаться, который имеет регистры для выдачи данных в FLOAT-формате. Это позволяет получать данные ровно в том виде, в каком они были получены непосредственно с шины I2C, без потери точности. При этом используется порядок байт “Float32 – Little endian byte swap”. 
  • В-третьих, этот датчик кроме собственно измеряемых данных, выдает и вычисляемые: температуру точки росы и температуру по влажному термометру.

Список регистров приведен в таблице:

Адрес hex Адрес dec Тип данных Длина Описание
Команды 0x03 или 0x04 – чтение данных
0x01ff 511 INT16 2 Температура по влажному термометру (10-кратное значение)
0x0200 512 INT16 2 Температура по сухому термометру (10-кратное значение)
0x0201 513 INT16 2 Влажность (10-кратное значение)
0x0202 514 INT16 2 Температура точки росы (10-кратное значение)
0x0203 515 FLOAT 4 Температура с плавающей запятой
0x0205 517 FLOAT 4 Влажность с плавающей запятой
0x0207 519 FLOAT 4 Температура точки росы с плавающей запятой
0x0209 521 FLOAT 4 Температура по влажному термометру с плавающей запятой
Команды 0x03 – чтение данных, 0x06 или 0x10 – запись данных
0x0100 256 INT16 2 Адрес устройства на шине Modbus, по умолчанию 1
0x0101 257 INT16 2 Cкорость передачи данных: 0-1200,1-2400,2-4800,3-9600,4-57600,5-115200, по умолчанию 3
0x0102 258 INT16 2 Корректировка влажности (смещение) (10-кратное значение)
0x0103 259 INT16 2 Корректировка температуры (смещение) (10-кратное значение)

 

Проведем небольшое тестирование. Китайцы написали программу для настройки и тестирования датчика, но пользоваться ей невозможно – только каракули, только хардкор. Нет даже корявого английского перевода:

Поэтому проще использовать общеизвестную программу Modbus Poll. По умолчанию адрес датчика 1 при скорости передачи данных 9600. Но я уже изменил адрес датчика на 3, так как он будет использоваться в одном проекте (о котором я обязательно расскажу).

Чтение регистров данных:

Как видите, здесь документация почти не врёт. Но ниже “отзываются” и недокументированные регистры, данные в которых немного отличаются от основных. Что в них отображается – не совсем понятно. 

Точность, которую дает FLOAT32, в общем-то и не нужна в большинстве бытовых (и даже промышленных) применениях, поэтому я пока что ограничился своим универсальным драйвером для RS485-сенсоров. Понадобится большая точность – несложно написать новый.

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

 

Теперь убедимся в правильности документации насчет регистров настроек:

С заданием адреса устройства на шине и скорости передачи никаких сложностей не возникло – всё работает ровно так, как и ожидалось.

Корректировки влажности и температуры должны быть заданы в формате INT16 , при этом значение корректировки перед передачей необходимо умножить на 10. То есть для смещения температуры на -2,5 градуса мы должны записать в регистр 259 значение -25.

Но вот с корректировками – “засада”. Сколько бы я не записывал туда данные, на выходные результаты это никак не влияло. И после перезагрузки так же. Впрочем, я уже сталкивался с подобным поведением на другом похожем китайском изделии.

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

 


Ссылки

Документацию и софт (всё на китайском) вы можете найти по этой ссылке.

 

На этом разрешите откланяться, до новых встреч!

💠 Полный архив статей вы найдете здесь


Пожалуйста, оцените статью:
[ 5 из 5, всего 3 оценок ]

-= Каталог статей (по разделам) =-   -= Архив статей (подряд) =-

1 комментарий для “Датчик температуры и влажности SD123-T10 для шины RS485 Modbus RTU”

  1. Заказал такой 2 года назад и всё это время валялся без дела, не мог найти его карту регистров. После вашей статьи пациент ожил. Спасибо.

Добавить комментарий для Андрей Отменить ответ

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