ESP-8266: ds2438 + HIH-5030. Температура и влажность для гурманов.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 25 апр 2018.

Метки:
  1. ИгорьК

    ИгорьК Давно здесь

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

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

    Для определения температуры/влажности, у меня в погребе уже работает связка из датчиков DS18b20 и HIH-5030. Датчики HIH от Сладкого Источника показали себя с лучшей стороны - не умирают, не выходят из строя, не деградируют в часто мокром погребе. Однако, при высокой влажности они иногда показывают значение выше 100%. Обусловлено это двумя факторами - ошибкой до 7% в пределе ( когда влажность 90-100%) и неточным указанием опорного напряжения при замере. Как оказалось, второй трабл - решаем. И вот как...

    Железо - оно будет такое:

    upload_2018-4-25_16-46-25.png

    Почему ds2438+HIH5030 ?
    • HIH5030 - это надежно, не деградирует;
    • применение ds2438 решает проблему опорного напряжения - при расчете влажности мы каждый раз будем получать и учитывать его значение;
    • в ds2438 встроен датчик температуры, который ничуть не хуже DS18b20 - проверял лично во многих тестах;
    • все это - 1Wire, с расстоянием линии сами знаете каким. В гараже, например, для вывода датчика на улицу может потребоваться тянуть провода метров на 5-7 (мой случай).

    Естественно, все это Lua, модуль во вложении. Датчик на 4 (можно менять) ноге ESP-8266.
    Запрос - асинхронный, посему применять через callback:
    Код (Lua):
    do
    ds = require('_ds2438_HIH')
    dattb = {}
    call = function()
        print('\nheap '..node.heap())
        table.foreach(dattb, print)
    end
    ds.update(dattb, call)
    tmr.create():alarm(30000, 1, function() ds.update(dattb, call) end)
    end
    На выходе - таблица со значениями типа number, поскольку все это предназначено для дальнейших вычислений.

    Для каждого датчика забираются три значения:
    • температура;
    • относительная влажность;
    • абсолютная влажность.
    Логика работы:
    • первый опрос датчика - получение напряжения питания;
    • второй опрос - получение температуры и напряжения на ноге HIH;
    • считаем относительную влажность с учетом напряжения питания;
    • считаем абсолютную влажность с учетом температуры;
    • вставляем данные в таблицу;
    • если есть еще датчик - повторяем для него;
    • вызываем callback функцию с передачей ей таблицы.
    К осени я планирую сделать устройство, аналогичное этому проекту, но на одной ESP-8266. Раньше не получится да и датчики HIH-5030 только заказаны сами знаете где.

    Возможно, кто-то этим занимается уже сейчас и модуль - вам в помощь.

    UPD. 27.04.2018
    Ура! Один потерянный HIH-5031 обнаружился!!! И сразу нашел ошибочку в вычислении абсолютной влажности. Модуль перезалит.

    upload_2018-4-27_10-13-6.png
     

    Вложения:

    Последнее редактирование: 5 окт 2018
    Airbus нравится это.