DHT11 и DHT22 занижают RH до 18-25%

Frost_north
Offline
Зарегистрирован: 09.11.2016

Салют, комьюнити! 

Есть проблема такого толка: собираю небольшой измеритель отн.влажн./температура, на dht11 или dht22 (в перспективе видно будет, что подойдет). Однако при курении интернетовских мануалов и скачивании с гитхаба библиотек на DHT XX обнаружил, что подборка датчиков показывает мне влагу всего 18-22%. Несколько 11 и один 22-ой поочередно мне врут (китайская погодная станция показывает от 50 до 70 в зависимости от обстановки в помещении).

 - Скетч использую из примеров, смотрю через SerialPort, раскомменчиваю определение датчика соответственно воткнутому в макетку девайсу.

 - Схема подключения каноничная для обоих датчиков (питание в 5в, цифровой вывод во 2-й порт, третья ножка висит, земля к земле, ну и цифровой выход подтянут 10к к 5в)

Менял и библиотеки (остановился пока на скачанной с гитхаба  комбинации ADAFRUIT_SENSOR.h, DHT_U.h, DHT.h).

Использованный скетч:

// DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.

// Depends on the following Arduino libraries:
// - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN            2         // Pin which is connected to the DHT sensor.

// Uncomment the type of sensor in use:
//#define DHTTYPE           DHT11     // DHT 11 
#define DHTTYPE           DHT22     // DHT 22 (AM2302)
//#define DHTTYPE           DHT21     // DHT 21 (AM2301)

// See guide for details on sensor wiring and usage:
//   https://learn.adafruit.com/dht/overview

DHT_Unified dht(DHTPIN, DHTTYPE);

uint32_t delayMS;

void setup() {
  Serial.begin(9600); 
  // Initialize device.
  dht.begin();
  Serial.println("DHTxx Unified Sensor Example");
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Temperature");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" *C");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" *C");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" *C");  
  Serial.println("------------------------------------");
  // Print humidity sensor details.
  dht.humidity().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Humidity");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println("%");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println("%");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println("%");  
  Serial.println("------------------------------------");
  // Set delay between sensor readings based on sensor details.
  delayMS = sensor.min_delay / 1000;
}

void loop() {
  // Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;  
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println("Error reading temperature!");
  }
  else {
    Serial.print("Temperature: ");
    Serial.print(event.temperature);
    Serial.println(" *C");
  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println("Error reading humidity!");
  }
  else {
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
  }
}

Результат на последний час тыканья-мыканья в DHT 22-й Hum: 27%, а TMP:23.5 (что на удивление точно соответствует трем стоящим рядышком измерителям).

Помогите освоить тему, чую баг кроется в какой-то мелочи незначительной, но не могу сообразить в какой.

Frost_north
Offline
Зарегистрирован: 09.11.2016

UPD. 

Наверное стоило сразу признаться, что я пользуюсь Arduino Leonardo, версия IDE 1.6.5

bwn
Offline
Зарегистрирован: 25.08.2014

Чтобы понять, живой датчик или нет (а может и кривая библиотека), проверьте его по NaCl (наиболее простой способ, ибо есть дома всегда, только не берите иодированную).
Берете небольшую баночку, насыпаете ч.ложку соли, капаете воды (должна быть влажная, но без лужи), помещаете в емкость датчик и закрываете пленкой. Мониторим несколько часов, сперва растет, потом стабилизируется. При комнатной температуре должно быть около 70 процентов. Для других значений используются другие соли, но их на кухне не водится.

Krendelyok
Offline
Зарегистрирован: 05.10.2016

У меня на DHT11 вообще показания могут прыгать от считывания к считыванию на плюс минус 10 единиц http://arduino.ru/forum/apparatnye-voprosy/attiny13-dht11-tm1637-watch-dog-timer-upakovyvaem-programmu-v-1-kilobait  Контрольная сумма при этом в норме. Очень критична микросхема датчика к питанию.  Подключаю другой блок питания - проблема почти уходит. В идеале от батареек, наверное, надо питать)) Всю схему )))

Pyotr
Offline
Зарегистрирован: 12.03.2014

Выкладывал таблицу "зависимость ОВВ над насыщенными растворами некоторых солей"
http://greentalk.ru/topic/5557/?do=findComment&comment=55319 

Соли нужны почище, желательно ЧДА.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

попробуйте эту строчку 

delayMS = sensor.min_delay / 1000;

изменить на такую

delayMS = 1000;

 

bwn
Offline
Зарегистрирован: 25.08.2014

Pyotr пишет:

Выкладывал таблицу "зависимость ОВВ над насыщенными растворами некоторых солей"
http://greentalk.ru/topic/5557/?do=findComment&comment=55319 

Соли нужны почище, желательно ЧДА.

Пробовал и пищевую поваренную и очищенную амеровскую (для систем автономной водоочистки), бегает 1,5-2% от табличного, что для климатического использования не принципиально. ИМХО.
Если остальные брать специально за деньги, конечно уже ХЧ.

P/S а память уже не та, все таки 75% для NaCl.

Frost_north
Offline
Зарегистрирован: 09.11.2016

 

Baks пишет:

попробуйте эту строчку 

delayMS = sensor.min_delay / 1000;

изменить на такую

delayMS = 1000;

Как самый быстрый и бескровный вариант - попробовал первым) сначала забыл в базовом скетче забыл определить датчик как 11 и уже успел обрадоваться тому, что показывались адекватные значения, только помножннные на 10, но потом пофиксил косяк и все вернулось на круги своя. В целом, при показаниях на покупной станции в 45% все так же показывает 19 на SerPort-е.

Frost_north
Offline
Зарегистрирован: 09.11.2016

bwn пишет:

Чтобы понять, живой датчик или нет (а может и кривая библиотека), проверьте его по NaCl (наиболее простой способ, ибо есть дома всегда, только не берите иодированную).
Берете небольшую баночку, насыпаете ч.ложку соли, капаете воды (должна быть влажная, но без лужи), помещаете в емкость датчик и закрываете пленкой. Мониторим несколько часов, сперва растет, потом стабилизируется. При комнатной температуре должно быть около 70 процентов. Для других значений используются другие соли, но их на кухне не водится.

Этот вариант обязательно попробую, но пока меня смущает разница в показаниях. Или вы имеете ввиду, что необходимо пересчитывать с коэфициентом каким-то по этим показаниям (банки с солью)?

Может у Вас случайно завалялась проверенная правильная библиотечка для такого девайса?)

Frost_north
Offline
Зарегистрирован: 09.11.2016

Krendelyok пишет:

У меня на DHT11 вообще показания могут прыгать от считывания к считыванию на плюс минус 10 единиц http://arduino.ru/forum/apparatnye-voprosy/attiny13-dht11-tm1637-watch-dog-timer-upakovyvaem-programmu-v-1-kilobait  Контрольная сумма при этом в норме. Очень критична микросхема датчика к питанию.  Подключаю другой блок питания - проблема почти уходит. В идеале от батареек, наверное, надо питать)) Всю схему )))

К сожалению попытка перейти по вашей ссылке не увенчалась успехом. Доступ запрещен.

bwn
Offline
Зарегистрирован: 25.08.2014

Frost_north пишет:

Этот вариант обязательно попробую, но пока меня смущает разница в показаниях. Или вы имеете ввиду, что необходимо пересчитывать с коэфициентом каким-то по этим показаниям (банки с солью)?

Может у Вас случайно завалялась проверенная правильная библиотечка для такого девайса?)

Эти датчики очень не любят сквозняки. Хотя соответствие температур на разных датчиках, косвенно указывает на их отсутствие. Я когда гонял их на столе, брал коробку с высокими стенками и ставил в нее (стабилизация занимает значительное время - десятки минут, часы). Никаких коэффициентов быть не должно, для дешевых датчиков возможна поправка, но тоже в разумных пределах. У меня на одном АМ2301 (DHT22) составила 12%, как раз по соли. Второй год работает в консервохранилище рядом с Орегоновским модулем, разница на 1-2%. Сколько брешет Орегон, естественно не знаю.))))
Библиотека называлась DHT, ссылки откуда брал не сохранилось. Хотите могу на почту скинуть, там архив 43Кб.

P/S и если есть возможность, замените DHT11 на 22 или АМ-ки, ни одного доброго слова про них не слышал, за исключением цены.

Krendelyok
Offline
Зарегистрирован: 05.10.2016

Frost_north пишет:

К сожалению попытка перейти по вашей ссылке не увенчалась успехом. Доступ запрещен.

Странно. Может, так https://goo.gl/C7yDWB

Frost_north
Offline
Зарегистрирован: 09.11.2016

bwn пишет:

Эти датчики очень не любят сквозняки. Хотя соответствие температур на разных датчиках, косвенно указывает на их отсутствие. Я когда гонял их на столе, брал коробку с высокими стенками и ставил в нее (стабилизация занимает значительное время - десятки минут, часы). Никаких коэффициентов быть не должно, для дешевых датчиков возможна поправка, но тоже в разумных пределах. У меня на одном АМ2301 (DHT22) составила 12%, как раз по соли. Второй год работает в консервохранилище рядом с Орегоновским модулем, разница на 1-2%. Сколько брешет Орегон, естественно не знаю.))))

Библиотека называлась DHT, ссылки откуда брал не сохранилось. Хотите могу на почту скинуть, там архив 43Кб.

P/S и если есть возможность, замените DHT11 на 22 или АМ-ки, ни одного доброго слова про них не слышал, за исключением цены.

Скиньте, если не трудно)

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

Самая засада в том, что, подозревая косяк с 11-ым, я воткнул 22-й. Все ровно тоже самое, расковырял схемы, поменял плату, промерил резюк, замерил напряжение питания, все ОК. Только показывает не то)

bwn
Offline
Зарегистрирован: 25.08.2014

Отправил, можете мыло убрать.
Скетч здесь (10пост), самый первый, корявый, но уже 2 года честно пашет. Собственно DHT там занимает 452-455 строки + настройки в setup и ничем от стандартного примера не отличается.

Krendelyok
Offline
Зарегистрирован: 05.10.2016

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

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

вечером скину свой пример с библиотекой

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

В датащите в пункте 7 есть рекомедации по восстановлению нормальных показаний RH. Посмотрите.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

 https://drive.google.com/open?id=0Bw55nc23As-3ZldMQkJJdU42aFU пробуйте эта вроди работает у меня но незнаю на сколько точно

Frost_north
Offline
Зарегистрирован: 09.11.2016

Всем привет еще раз!

Спасибо за советы, однако не пошло что-то. После некоторой паузы попробовал и предложенные библиотеки и предложенные методикиЮ в том числе и методика "воскрешения" датчика из мануала на него же.

Однако, вот хоть ты тресни пополам, не получается выдавить что-то более/менее правдивое. Все время показывает влагу в нормальных комнатных условиях ~18-25%. И это при паспортном пороге в 20% нижней границы. Что примечательно, так это то, что температуру показывает вполне адекватную, что 11-ый, что 22-ой.

Озарила меня мысль поработать с ним напрямую, минуя библиотеки. Т.е. поднять сессию  и все по мануалу. Теперь вот осваиваю новую для меня область из Arduino.

 

Так же я обратил внимание, что болтшая часть скетчей, предложенных в топике быди написаны от 2 до 3 лет назад, что родило в моей голове сумашедший, но все же вопрос - не может ли как-то версия IDE повлиять на результат?

nik182
Offline
Зарегистрирован: 04.05.2015

От IDE не зависит. Посмотрите глазом в дырочки датчика какого цвета серебро на обкладках датчика. Если чистого, серебрянного, то странно. Капните маленькую каплю воды на датчик. Следите за показаниями, если скаканёт к 100% а потом плавно и быстро - минут за 5 опять откатится к 18% то обкладки датчика окислились и датчик врёт. Починить невозможно.

Барон
Offline
Зарегистрирован: 17.11.2016

Влезу ))

Откуда у вас уверенность что китайская МС не врет?! как раз у меня предположение что ваши датчики не врут, а метеостанция врет... причем конкретно. если вы проживаете в высотке, и за окном минус, и в квартире нет увлажнителя - то 90% ваша метеостанция врет.

Если при минусе, ну примерно минус 10...15 у вас  стеклопакеты не потеют то 100% ваша МС врет.. так как при влажности 65 (примерно) ваш стеклопакет потечет...

Ибо без увлажнителя, зимой добиться влажности даже 50 % очень сложно, это надо жить в герметичном сосуде и постоянно кипятить чайник.

nik182
Offline
Зарегистрирован: 04.05.2015

Ну так писали же баночка с влажной солью. 75%.

Барон
Offline
Зарегистрирован: 17.11.2016

И с каких это пор банка с солью увлажняет воздух до 70%?  она наоборот сушит... если у товарисча влажность воздуха в квартире и так низкая  (включено центральное отопление и батареи шпарят) то разницы в показаниях что в комнате, что в банке будут примерно одинаковы...ибо соль просто не сможет понизить влажность воздуха с 20% до нуля... 

Я у себя проверял н22 в комнате, Т=21.5, в комнате влажно, так как "выключена" вытяжка, батареи настроены на щедящий режим, так в комнате было 55%, возле самого окна с цветами -65% и температурой 19С. но повторюсь у меня отопление очень хитро настроено... у меня батареи не сушат воздух. и при таких данных (65% и т=19) мультифункциональный стеклопакет начинает течь.. ибо 65% - сильно высокая влажность, если на улице около минус 10.

 

 

Барон
Offline
Зарегистрирован: 17.11.2016

Самое наверное оптимально (проверить метеостанцию и датчики) взять два термометра (тока нормальные) и один обернуть в мокрую тряпку, обдувая вентилятором и дальше по таблицам вычислить влажность, а потом делать выводы что врет..

bwn
Offline
Зарегистрирован: 25.08.2014

Барон пишет:

И с каких это пор банка с солью увлажняет воздух до 70%? 

Методика проверки датчиков влажности над насыщенным раствором солей.
NaCl дает 75-76% во всем диапазоне температур.

Барон
Offline
Зарегистрирован: 17.11.2016

Ну не знаю.. слышал что солью осушают воздух..

bwn
Offline
Зарегистрирован: 25.08.2014

Барон пишет:

Ну не знаю.. слышал что солью осушают воздух..

А погуглить, Клапауций запретил?

Барон
Offline
Зарегистрирован: 17.11.2016

Не знаком с госпадином Клапауцким, но наслышан ). но сам по образованию имею отношение к климату.

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

Барон
Offline
Зарегистрирован: 17.11.2016

Пробежался быстренько по инету: да, верно, НАСЫЩЕННЫй раствор соли позволяет получить 75% влажности, а теперь вопрос: как получить насыщенный а не перенасыщенный раствор - это химия уже )

Барон
Offline
Зарегистрирован: 17.11.2016

Процентовка нужна..

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Барон пишет:
а теперь вопрос: как получить насыщенный а не перенасыщенный раствор - это химия уже )

Физика: раствор - он и в Африке - раствор. :)

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

Трясти солевым раствором рядом с датчиками надо аккуратно, т.к. капля такого раствора может вывести датчик из строя.

bwn
Offline
Зарегистрирован: 25.08.2014

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

Барон
Offline
Зарегистрирован: 17.11.2016

Так это и будет перенасыщенный раствор, как мне кажется

bwn
Offline
Зарегистрирован: 25.08.2014

Барон пишет:

Так это и будет перенасыщенный раствор, как мне кажется

Читаем, последний абзац.

Frost_north
Offline
Зарегистрирован: 09.11.2016

Товарищи! Я попробовал фокус с солью! Пока только один из 3-х имеющихся DHT11, однако через полчаса-час он уже показал 61, правда немного погодя упало до 59, но я пока ожидаю (я положил горстку соли в стакан, налил воды пару-тройку чайных ложек, потом слил излишки оставив только влажную соль, как советовал пользователь Барон (за что отдельное гранд-мерси=)) изакинул датчик скомутированный проводами в стакан, затянув все сверху под занавес пищевой пленкой). Температура с датчика - 21-22 градусов, есть небольшое отверстие, через которое видимо выходит излишек пара, что не дает возможности получить в подстаканном пространстве (выражение - пуля просто) 70 процентов влаги. 

Сейчас все вскрою, поменяю датчик, предварительно все облив водой и опять слив излишек. Оставлю второй на ночь и посмотрю на лог утром. Все сдвинулось с мертвой точки после того как кто-то (по моему опять-же товарищ Барон) сказал, что это нормально иметь запредельно низкую влажность в квартире зимой, если квартира в отапливаемой многоэтажке =)

bwn
Offline
Зарегистрирован: 25.08.2014

Frost_north пишет:

Товарищи! Я попробовал фокус с солью! Пока только один из 3-х имеющихся DHT11, однако через полчаса-час он уже показал 61, правда немного погодя упало до 59, но я пока ожидаю (я положил горстку соли в стакан, налил воды пару-тройку чайных ложек, потом слил излишки оставив только влажную соль, как советовал пользователь Барон (за что отдельное гранд-мерси=)) изакинул датчик скомутированный проводами в стакан, затянув все сверху под занавес пищевой пленкой). Температура с датчика - 21-22 градусов, есть небольшое отверстие, через которое видимо выходит излишек пара, что не дает возможности получить в подстаканном пространстве (выражение - пуля просто) 70 процентов влаги.

Не тупи, а делай как сказано и проверено, соль, вода несколько (2-5) капель из пипетки, а не чайной ложки и возможности что то слить быть не должно. Стакан как емкость вполне подходит, отверстия от проводов под стрейчем ни на что не влияют (если только сквозняк в него не задувает), датчик примерно в центре стакана. Стабилизация 1-2 часа, проверено на SHT10 и АМ2302, sht кажет правду, ам-ка врет на 8%.