ARDUINO Проблемы с датчиком DHT22

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
Ну смотрите, упрощенная задача для 2-х датчиков.
Один висит во влажном гараже.
Второй висит на улице.
-кусь-
А зачем Вам вообще датчики в такой задаче? Просто проветривайте иногда и все.
Влажность — это доля водяного пара, содержащегося в воздухе.
Данный показатель зависит от температуры воздуха, так теплый воздух способен удержать большее количество влаги, чем холодный.
table_temper.jpg
Зимой в гараже как минимум плюсовая температура, на улице минусовая. При любом раскладе, влаги в воздухе на улице будет меньше без всяких измерений по приборам. Холодный воздух с улицы попав в гараж и нагреваясь, будет суше воздуха находящегося в помещении и однозначно будет сушить воздух гаража.
Летом выгонять влагу либо кондиционером, либо по кем то предложенной схеме. Перед дождем по любому влажность на улице максимально высокая и показатели (улица vs гараж) будут значительно отличаться, а если дождя нет, то там где холоднее, там и воды в воздухе будет меньше. Имхо зря Вы затеяли сравнение этих датчиков для такой задачи. Просто сделайте, будет иногда жужжать и радовать. В такой задаче, точность которую Вы хотите от датчиков, вообще не нужна.

PS. Имхо, правильная система пассивной вентиляции, много лучше автоматизации.
 

noindex

✩✩✩✩✩✩✩
24 Сен 2022
18
0
@poty, гараж железобетонный, неотапливаемый и можно сказать неутепленный.
Основная его проблема - высокая влажность.
Высокая влажность это усиленное ржавение инструментов / станков, плесень.
Зимой температура внутри гаража на 2-5 градусов выше чем на улице.
Честно говоря, не вижу проблемы если за счет охлаждения гаража понизится влажность.
В любом случае алгоритм будет додумываться в процессе.


Если есть погрешность в 5%, то ловить миллиметраж по точности поддержания влажности в любом случае - ерунда полная.
А что по вашему не ерунда?
Тупо выбрать любой из вариантов, которые я описал по работе с датчиками. показания которых расходятся?

@ТехнарьКто, зимой в гараже минусовая температура.
Пассивная - пройденный этап, правильной пассивной не получится в силу конструкционных ограничений гск.
Во время дождя на улице более высокая влажность, она мне в гараже не нужна.

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

poty

★★★★★★✩
19 Фев 2020
2,990
895
Основная его проблема - высокая влажность.
каков источник этой влажности?
По-моему, Вы не уяснили главного. Благодарен @ТехнарьКто, что привёл теорию. Берём понижение температуры, относительно резкое (допустим, осенью на закате). Температура понизится, "лишняя" вода выпадет в виде росы. Измерение абсолютной влажности будет совершенно нормальным (низким), но от ржавения Ваших ценных вещей это не спасёт. (здесь как раз относительная влажность будет более адекватной)
Проветривание будет эффективно только если гарантированно будут заменяться большие объёмы воздуха, и это явно не связано с показателями влажности.
Тупо выбрать любой из вариантов, которые я описал по работе с датчиками. показания которых расходятся?
Ещё в школе нас учили, что точность измерений зависит от прибора. Если у Вас точность 5%, то ориентироваться на разность в 5% (и, я бы сказал, даже на 10%) - это просто тешить себя иллюзиями.
Я бы посоветовал почитать, например, нормативные документы по строительству ЦОДов или серверных. Разброс допустимых значений по влажности ой как велик (а там ценностей гораздо больше, чем у Вас в гараже). Кроме того, обязательно присутствует параметр "без конденсации" - это должно выполняться независимо от относительной или абсолютной влажности.
 
  • Лойс +1
Реакции: noindex

noindex

✩✩✩✩✩✩✩
24 Сен 2022
18
0
каков источник этой влажности?
Дожди, тающий снег.
Только давайте не будем углубляться в устранение причин, поверьте на слово, устранить причины дороже чем купить новый гараж, с учетом расположения текущего и отсутствия лишних финансов это невозможно.

Берём понижение температуры, относительно резкое (допустим, осенью на закате). Температура понизится, "лишняя" вода выпадет в виде росы. Измерение абсолютной влажности будет совершенно нормальным (низким), но от ржавения Ваших ценных вещей это не спасёт. (здесь как раз относительная влажность будет более адекватной)
Я н пардон в этих вопросах чайник, я искал решение, наткнулся на способ, результаты работы которого мне интересны.
Единственное что я могу попытаться возразить, я неоднократно натыкался на утверждения что нужно как раз всегда использовать абсолютную влажность т.к. она уже учитывает температурный фактор и воздух с меньшей абсолютной всегда лучше.
В частности об этом упоминается и в статье на хабре.

Я бы посоветовал почитать, например, нормативные документы по строительству ЦОДов или серверных. Разброс допустимых значений по влажности ой как велик (а там ценностей гораздо больше, чем у Вас в гараже).
Я немного знаком с цодами, как обыватель.
Там немного другие задачи и для их решения задействованы гораздо более серьезные средства, которые позволяют иметь внутри помещения заданную температуру +- 2 градуса, с фиксированной влажностью, независимо от того что вообще происходит на улице.
Мне такого не нужно.

Кроме того, обязательно присутствует параметр "без конденсации" - это должно выполняться независимо от относительной или абсолютной влажности.
Опять же, на сколько я понял, при поступлении в помещение более сухого воздуха (по абсолютной влажности), конденсата не будет.
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
@noindex, ОК, нет проблем. В указанной статье задаётся куча вопросов, решаемых "эмпирическим методом". Судя по инею - не всегда эффективно. То, что воздух с меньшей абсолютной влажностью всегда лучше, там постулируется, но на уровне предположений.
ЦОДы я привёл не для того, чтобы их повторять в гараже, а чтобы продемонстрировать допустимые величины влажности.
при поступлении в помещение более сухого воздуха (по абсолютной влажности), конденсата не будет
Посмотрите на графики, приведённые @ТехнарьКто. Если наружный воздух будет значительно теплее внутреннего, то при его охлаждении при смешивании с внутренним воздухом может выпадать роса (охлаждённый воздух может удержать меньше влаги). Если наружный воздух будет холоднее внутреннего и успеет его охладить, то также выпадет роса.
Ну, в любом случае, никто Вам не запретит это реализовать и попробовать. С моей точки зрения - просто проветривание будет гораздо эффективнее и без всяких датчиков.
 

rkit

★★★✩✩✩✩
5 Фев 2021
479
114
Конденсат выпадает в ситуации, когда температура на улице уже поднялась, а в гараже всё еще холодно из-за огромной теплоемкости стен бетона, и в гараж идет теплый воздух с улицы, остывает, выпадает в конденсат.
Простой эффективный способ — это держать температуру в гараже градусов на 5 выше температуры на улице. Для этого надо заделать дыры и поставить нагреватель на 50Вт или даже поменьше.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,281
947
58
Марий-Эл
по любому из этих 3-х пинов не может привести к искажению результатов датчика?
Это так. Разрядка.
А здесь вы правы. Если контакт по всем проводам есть, показания будут сниматься. Никакие изломы или что либо другое не помешает.
 

Vyacheslav1982

✩✩✩✩✩✩✩
30 Мар 2022
17
2
Добрый день, вечер! Уважаемые форумчане! Столкнулся с проблемой которая заключается в том, что датчик DHT 22, вместо отрицательной температуры показывает значение -3277 , начиная ниже 0 градусов. Положительные значения выдаются нормально. Перепробовал много библиотек с гитхаба, ничего не меняется. Выше ноля, все нормально. Ниже ноля отрицательные значения в районе -3000 чего то. Может кто-то сталкивался с подобным?
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,722
481
@Vyacheslav1982, такая картина на одном экземпляре или на нескольких? Я к тому, что очень много брака.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
240
42
Мне кажется что он при минусе совсем не работает. А какой тип данных вы используете для вывода температуры? Может переполнение по типу?
 

Vyacheslav1982

✩✩✩✩✩✩✩
30 Мар 2022
17
2
@Boroda22, по даташит, он должен работать до -40. При отрицательной температуре dht22, работает, это точно. А можно подробнее про типы данных? Не знаю про них ничего. Вывожу в сериал и еще на блунк.

@PiratFox, на одном. Завтра проверю еще на одном. В инете накопал что какая то ошибка, в библиотеках.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
240
42
@Vyacheslav1982, ну хз, у датчика такой вид, что я даже не пытался использовать на улице при морозе. Про переполнение типа можно, в инете почитать, но в двух словах-если значение "не умещается" в его типе, то будут глюки. Например к 255(byte) прибавть 10,то будет переполнение, т. к. 265 уже не "умещается"(ну или использовать беззнаковый byte)
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,834
589
44
Скорее всего данные тупо в Int16 перегоняют для упрощения, а там немного другой формат отрицательных значений.

Из даташита:
1677955640082.png
 
  • Лойс +1
Реакции: Boroda22

Геннадий П

★★★★★★✩
14 Апр 2021
1,834
589
44
@Vyacheslav1982, Самое простое - найти либо исправленную библиотеку, либо которая отдает "сырые" данные с датчика температуры. Если есть сырые данные, то функция довольно легко пишется.

Как то так, не проверял, но смысл понятен:
C++:
if (raw_temp & 0x80 > 0) {
    // обрабатываем отрицательную температуру
    real_temp = (float)(raw_temp & 0x7F) / -10;
} else {
    // обрабатываем положительную температуру
    real_temp = (float)raw_temp / 10;
}
 
Изменено:

Vyacheslav1982

✩✩✩✩✩✩✩
30 Мар 2022
17
2
@Геннадий П, попробовал подправить функцию в коде, но ардуино иде ругается на строку
if (raw_temp & 0x80 > 0). Может компилятор не понимает что такое 0x80. Может сам код что то прояснит.
C++:
#include <DHT.h>
#include <Wire.h> // Библиотека для работы с шиной I2C  ADS1115
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
//ДАННЫЕ ВАЙ-ФАЙ И ТОКЕН БЛУНКА
char auth[] = "fe8c7e699ea946ac935e09f20f218e00";
char ssid[] = "RT-WiFi";// семь ноль С ноль
char pass[] = "08051985";
char serveradress[] = "88.";
#define DHTPIN 13// вход на ДНТ (на плате D8)
//и задаем ее начальное значение 0
#define DHTTYPE DHT22     // DHT 22
float real_tepm;
float t;
float h;
//DHT И БЛУНК
DHT dht(DHTPIN, DHTTYPE);// СВЯЗЬ ДАТЧИКА С БИБЛИОТЕКОЙ DHT
BlynkTimer timer;// ЗАПУСК ОБЯЗАТЕЛЬНОГО ТАЙМЕРА БЛУНК
//ПЕРЕДАЧА ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ НА БЛУНК
void sendSensor()
{
  float real_temp;
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    }
    if (t & 0x80 > 0) {
    // обрабатываем отрицательную температуру
    real_temp = (float)(t & 0x7F) / -10;
    } else {
    // обрабатываем положительную температуру
    real_temp = (float)t/ 10;
}
    return;
  }
  Blynk.virtualWrite(V3, h);//ПИН V5 УСТАНОВЛЕН В БЛУНК НА ТЕЛЕФОНЕ ДЛЯ ВЛАЖНОСТИ (ВИДЖЕТ VALUE DISPLEI)
  Blynk.virtualWrite(V4, real_temp);//ПИН V6 УСТАНОВЛЕН В БЛУНК НА ТЕЛЕФОНЕ ДЛЯ ТЕМПЕРАТУРЫ (ВИДЖЕТ VALUE DISPLEI)
// ESP.deepSleep(1200e6);
}
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass, serveradress,8080);//ЗАПУСК БЛУНК
dht.begin();//ЗАПУСК ДАТЧИКА ТЕМПЕРАТУРЫ
pinMode(DHTPIN, INPUT);
timer.setInterval(1000L,sendSensor);
//ESP.deepSleep(5000);
}
void loop() {
Blynk.run();
timer.run();
}
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,834
589
44
"float t" "t & 0x80" битовые операции не работают для float. Я специально написал, что нужны сырые данные с сенсора, а не из функции библиотеки в которой они уже обработаны.

Еще как вариант, если данные в библиотеке действительно в Int16 перегоняются, то можно поробовать сделать:

C++:
if (temp < 0) {
    temp = -3276.8 - temp;
}
Может со знаками и напутал, нужно пробовать.
 

Vyacheslav1982

✩✩✩✩✩✩✩
30 Мар 2022
17
2
@Геннадий П, вот это должно помочь, т.к после того как температура опускается ниже ноля, значение появляется как раз -3276.6. Только не понимаю как это логически temp=-3276.8-temp? Боюсь компилятор эту строку не поймет.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,834
589
44
Только не понимаю как это логически temp=-3276.8-temp?
А все очень просто:
В Int16 отрицательное число начинается с 0xFFFF и уменьшается до 0x8000 по мере его приближения к пределу отрицательного значения.
В датчике просто ставится флаг в старшем бите и в остальных битах просто записывается абсолютное значение. Таким образом оно начинается с 0x8000 и до 0xFFFF.
И вот эта функция просто инвертирует отрицательную ось значений, корректируя тем самым значения. Тут никаких логических функций нет (как в предыдущем примере), чистая математика, поэтому компилятор нормально должен схавать.
 

Vyacheslav1982

✩✩✩✩✩✩✩
30 Мар 2022
17
2
@Геннадий П, понял Вас наверное для правильного восприятия надо написать так temp=-3276.8+temp16, где 3276.8 это константа, а temp16 значение из шестнадцетиричного счисления которое сейчас идет с датчика. Тогда действительно значения поменяются.

Спасибо Геннадию, заработало!
 
  • Лойс +1
Реакции: Геннадий П