Найти тему
etrivia

Метеостанция из палочек и верёвочек. Часть 2. Влажность и температура. SHA8C01 конвертер i2c в rs485.

Оглавление

Влажность.

С датчиками ветра разобрались в предыдущей статье https://dzen.ru/a/ZK18CtwU-Tuq_HWd . Теперь о влажности. На мой взгляд все доступные на сегодняшний день датчики влажности можно разбить на две категории. Первая категория это датчики которые сами по себе полная дрянь, но имеют однопроводный интерфейс и их можно вынести на значительное расстояние от измерительного блока. Вторая категория это боле-менее хорошие датчики, но они с интерфейсом i2c и их нельзя подключать длинными проводами, поскольку этот интерфейс предназначен для соединения микросхем в пределах одной платы и большие расстояния сильно не любит. Но недавно я обнаружил, что Китайские товарищи решили эту проблему выпустив для датчиков серии SHT фактически конвертер rs485 modbus в шину i2c. Как обычно за совсем небольшие деньги. Вот это чудо. https://aliexpress.ru/item/1005005437488818.html

Конвертер rs485 i2c. Картинка с сайта продавца.
Конвертер rs485 i2c. Картинка с сайта продавца.

Заказал за 417 рублей. Доставка бесплатно.

У этого же продавца можно приобрести и сами датчики.

Датчик для помещений. Картинка с сайта продавца.
Датчик для помещений. Картинка с сайта продавца.

Цена 593 рубля.

Заказал этот датчик в сугубо научных целях, разломать и посмотреть на потроха. К такой компоновке возникают вопросы. Возможно это и удачный вариант при размещении в отапливаемом помещении, но нам нужен именно уличный датчик. Проблема в том, что в силу специфики измерений сам сенсор нельзя сделать герметичным, а уличные условия влияют на него не самым благоприятным образом. К счастью существуют материалы пропускающие водяной пар но не воду. Именно таким материалом укрыт сенсор в следующем датчике. https://aliexpress.ru/item/1005004718790450.html

Уличный датчик. Картинка с сайта продавца.
Уличный датчик. Картинка с сайта продавца.

Цена 480 рублей. Доставка дороговата, 318 рублей. Отправили CDEKом. Думаю если хорошо поискать то можно найти и дешевле.

И в первом и во втором случае используется один и тот же сенсор SHT30. Только корпуса в которые сенсор упакован разные. Сам сенсор имеет следующие характеристики: напряжение питания от 2.5 до 5.5 вольт, интерфейс i2c, диапазон измеряемых температур от -40 до 125 с разрешением 0.1℃; , диапазон измеряемой влажности от 0 до 100%RH с разрешением 0.1%RH, точность измерения температуры ±0.2℃, точность измерения влажности ±2%RH.

Теперь нужно озаботится тем, чтобы на датчик не попадали прямые солнечные лучи. Иначе может получится так, что на улице лежит снег, а метеостанция показывает +20 градусов тепла. Во "взрослых" конструкциях для этого используется "священный грааль" метеорологов "будка Стивенсона". Нечто подобное можно изготовить самостоятельно, но таким ленивым как я проще купить готовый домик для датчика у отечественного производителя, известного в определённых кругах как Constantin. Заказывать тут https://narodmon.ru/senscase

Домик для датчика. Картинка от продавца.
Домик для датчика. Картинка от продавца.

Цена на момент покупки 800 рублей + доставка. Статья Константина о истории создания этой конструкции. https://dzen.ru/a/X1QEs_dJUSjkZN82

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

Распаковка и проверка.

Наружный датчик.

Наружный датчик.
Наружный датчик.
Разборка.
Разборка.

Рассмотрим подробнее из чего состоит эта конструкция. 1 - колпачок со прорезанными окнами закрытыми синтетическим материалом который пропускает водяной пар, но при этом не пропускает воду (по крайней мере так уверяет производитель). 2 - соединительная втулка. Части 3 и 4 это сальник, защищающий внутреннее пространство от влаги (выглядит достаточно герметично). 5 - сам сенсор SHT30. Плата на которой он распаян, защищена герметиком и затянута в термоусадку. Для подключения к схеме имеются четыре провода. Чёрный - минус питания, красный - плюс питания, белый - sda, жёлтый - scl. Кабель достаточно длинный поэтому при окончательном монтаже желательно лишнее обрезать. В данном случае, чем короче, тем лучше.

Датчик для помещений.

-7

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

Переходник i2c - rs485 modbus.

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

Попробуем понять, что можно получить от этой платы. Соберём тестовый стенд и подключим к плате с одной стороны датчик, с другой стороны источник питания 12 вольт и конвертер usb - rs485. Источник питания с гальванической развязкой, конвертер usb - rs485 и используемые программы описаны в предыдущей статье https://dzen.ru/a/ZK18CtwU-Tuq_HWd .

Стенд :)
Стенд :)
Крупным планом.
Крупным планом.

Подключаем всё это к usb портам компьютера, запускаем программу termite. Настраиваем номер порта, к которому подключен переходник rs485. Скорость обмена с платой по умолчанию 9600. Открываем порт и убеждаемся, что надпись с параметрами порта внизу окна программы стала зелёной.

Программа termite.
Программа termite.

Строка запроса будет выглядеть так 01 03 00 00 00 07. Где 01 адрес платы по умолчанию. 03 команда на чтение 16 битных регистров. 00 00 говорим что будем читать начиная с нулевого регистра. 00 07 количество регистров которое желаем считать. Отправляем эту строку и если до этого всё сделали правильно увидим в окне терминала вот такие строчки.

Запрос - ответ.
Запрос - ответ.

Первая строка это наш запрос, 01 03 00 00 00 07 к которому добавилась контрольная сумма 04 08. Вторая строка 01 03 0E 01 07 01 DD 00 01 00 03 00 00 00 00 00 00 B4 AF ответ датчика. Его разберём подробнее.

  1. 01 ответ пришёл от устройства с адресом 1
  2. 03 ответ состоит из значений 16 разрядных регистров.
  3. 0E тело ответа состоит из следующих 14 байт. 01 07 01 DD 00 01 00 03 00 00 00 00 00 00
  4. 01 07 значение температуры. Чтобы привести её в удобочитаемый вид, переводим шестнадцатеричное число 0x0107 в десятичное 263 и делим его на 10. Получается 26.3 градуса Цельсия. Если значение этого регистра будет равно 80 00 значит датчик неисправен или вернул данные с ошибкой. В случае если такое будет повторяться часто то возможно вы оставили кабель от датчика до платы слишком длинным.
  5. 01 DD значение влажности. Всё тоже самое, что и в предыдущем пункте. Hex 0x01DD -> dec 477 / 10 получаем 47.7 %Rh. Учитывая, что точность датчика влажности 2%, последний разряд можно совсем отбросить. Останется просто 47.
  6. 00 01 адрес устройства.
  7. 00 03 скорость обмена по rs485. Возможны следующие значения 0:1200, 1:2400, 2:4800, 3:9600( по умолчанию), 4:19200, 5: сброс настроек.
  8. 00 00 коэффициент коррекции температуры. Понадобится если не устроит имеющаяся точность датчика и вы его решите откалибровать.
  9. 00 00 тоже самое, что и предыдущее но для влажности.
  10. 00 00 Плата умеет сама посылать отчёты. Возможные варианты значений - 0: ответ только по запросу, 1-255 интервал посылки в секундах.
  11. B4 AF контрольная сумма crc16.

Описание регистров из документации на плату.

Описание регистров.
Описание регистров.

Теперь вспоминаем, что адреса 1 и 2 уже заняты датчиками ветра, поэтому нужно изменить адрес платы на 3. Для этого надо записать в регистр 0x0002 значение 0x0003. Формируем строку с командой 01 06 00 02 00 03. Где 01 адрес устройства, 06 - говорим что будем записывать в 16 разрядные регистры, 02 записывать будем во второй регистр, 03 значение 3. Отправляем и получаем её же в ответ.

Изменяем адрес.
Изменяем адрес.

Значит всё хорошо и адрес устройства изменился. Для проверки снимаем питание с платы и снова включаем. Отправляем запрос на чтение уже по новому адресу 03 03 00 00 00 07.

Проверка нового адреса.
Проверка нового адреса.

Всё работает! Теперь по аналогии нужно установить скорость обмена такую же как у датчиков ветра - 4800. Запрос будет выглядеть так 03 06 00 03 00 02. Оправляем. Получаем.

Изменяем скорость.
Изменяем скорость.

Всё отлично. Снимаем и снова подаём питание. Перенастраиваем в программе termite скорость порта на 4800 и проверяем связь 03 03 00 00 00 07.

Проверка новой скорости.
Проверка новой скорости.

Ок. Теперь датчик готов к совместной работе с остальными устройствами.

Тоже самое с помощью программы mbpoll в linux.

Mbpoll.
Mbpoll.

К сожалению у этой платы есть один недостаток :( В датчиках серии SHT есть встроенный нагреватель, которым можно воспользоваться для сушки чувствительного элемента гигрометра. А плата переходника эту возможность не поддерживает.

Домик для термометра и гигрометра.

Разбираем домик.

Разбираем.
Разбираем.

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

Прикидываем.
Прикидываем.

Центральная стойка явно великовата. Обрезал её ножовкой по металлу. Датчик закрепил термоусадкой. Получилось на удивление крепко.

Крепление.
Крепление.

Всё. Можно окончательно собирать и тащить на крышу. Чем в следующей статье и займёмся. Было бы неплохо успеть до зимы :)

Часть 3. Лезем на крышу.

Всё что описано в статье можно обсудить в комментариях и телеграм канале etrivia.

#SHA8C01 #метеостанция #влажность #температура #i2c #rs485 #sht30 #modbus #Стивенсона