Проверить датчик DHT11 на работоспособность

Robinson
Offline
Зарегистрирован: 26.09.2013

Здравствуйте, как проверить датчик DHT11 на работоспособность.

В наличии 2 датчика. Оба не могу подключить, думаю что спалил их, т.к. перепробовал все варианты на первых 3 стр гугла.:(

Собственно интересно, спалил я их или просто не получается подключить?

maksim
Offline
Зарегистрирован: 12.02.2012

Robinson пишет:

Собственно интересно, спалил я их или просто не получается подключить?

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

kolganoff
Offline
Зарегистрирован: 26.09.2013

На первой странице угля все правильно написано и нарисовано.

Подтягивающий резистор поставили?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Библиотеку нормальную найдите - я тоже как то натыкался на неработающие библиотеки.

Я использовал эту

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

Есть похожая проблема, подключил DHT11, никакой реакции, пишет время вышло.

Подумал, случайно спалил переполюсовкой, взял новый, тоже никакой реакции, решил выпаять подтягивающий резистор, выпаял, включил, заработал, но только до 31 градуса, т.е. когда остыл, программа опять дает "Error: read timeout". Экспериментальным путем установил диапазон работы датчика - 31-60, ниже 31 ошибка. Что интересно, попробовал разные скетчи, там где опрос датчика идет методом update, с библиотекой dht.h работают оба датчика в указанном диапазоне, другие скетчи и по определению параметров и просто с функциями считывания не дают никакого результата.

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

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

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

Я все библиотеки перепробовал, все скетчи, по типу опроса они трех видов, мои датчики работают только с dht.h, сейчас пытаюсь понять метод update, как в нем изменить параметры запроса, или что не так в библиотеке.

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

Раскопал даташит, попробовал в этом скетче менять время в дипазоне, рекомендованном производителем:

#define dht_dpin 14 // датчик DHT11 на 0 аналоговый.
byte bGlobalErr;
byte dht_dat[5]; 
void setup()
{
InitDHT();
Serial.begin(9600);
Serial.println("www.dvrobot.ru");
delay(1200);
Serial.println("Humidity and temperaturenn");
delay(700);
}
void loop()
{
ReadDHT();
switch (bGlobalErr)
{
case 0:
Serial.print("Current humdity = ");
Serial.print(dht_dat[0], DEC);
Serial.print(".");
Serial.print(dht_dat[1], DEC);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(dht_dat[2], DEC);
Serial.print(".");
Serial.print(dht_dat[3], DEC);
Serial.println("C ");
break;
case 1:
Serial.println("Error 1: DHT start condition 1 not met.");
break;
case 2:
Serial.println("Error 2: DHT start condition 2 not met.");
break;
case 3:
Serial.println("Error 3: DHT checksum error.");
break;
default:
Serial.println("Error: Unrecognized code encountered.");
break;
}
delay(800);
}
void InitDHT()
{
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
}
void ReadDHT()
{
bGlobalErr=0;
byte dht_in; byte i;
digitalWrite(dht_dpin,LOW);
delay(18);
digitalWrite(dht_dpin,HIGH);
delayMicroseconds(30);
pinMode(dht_dpin,INPUT);
//delayMicroseconds(40);
dht_in=digitalRead(dht_dpin);
if(dht_in){ bGlobalErr=1; return;
}
delayMicroseconds(70);
dht_in=digitalRead(dht_dpin);
if(!dht_in)
{
bGlobalErr=2; return;
}
delayMicroseconds(70);
for (i=0; i<5; i++) dht_dat[i] = read_dht_dat();
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
byte dht_check_sum = dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
if(dht_dat[4]!= dht_check_sum) {bGlobalErr=3;
}
};
byte read_dht_dat(){ byte i = 0; byte result=0;
for(i=0; i< 8; i++){ while(digitalRead(dht_dpin)==LOW);
delayMicroseconds(30);
if (digitalRead(dht_dpin)==HIGH) result |=(1<<(7-i));
while (digitalRead(dht_dpin)==HIGH);
}
return result;
}
///////////////////////////////////////////////
 
 
Даже при прогреве дает вместо показаний только ошибку.
Robinson
Offline
Зарегистрирован: 26.09.2013

Подключал вот так:

 
 
NeiroN, спасибо за библиотеку. Вот такая ошибка "Getting info: Timeout"

Bobrov.Anatoliy, спасибо за совет, пробовал прогреть обычным бытовым феном - не получилось. 

К слову другой датчик (LM35DZ) завелся сразу.

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

Заработало, Спасибо NeiroN!!!

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

 

Я не понимаю почему у меня все работает но вот скрин - только номер вывода меняю в тесте и все OK - иногда контрольная сумма не совпадает. Датчиков у меня этих 10 шт - все работают, у них похоже время от партии зависит. На других библиотеках не заработали - был таймаут ожидания ответа.

Robinson
Offline
Зарегистрирован: 26.09.2013

Разобрался, датчики были на платке(универсальной, под сенсоры). Плата была кривая или просто перепутал пины.

В общем отпаял датчики отдельно, оба завелись.:)

Merl1n
Offline
Зарегистрирован: 16.12.2015

Кстати, насчёт датчика. Можно его подключать и без платки. Достаточно только одного регистра.

http://privateblog.info/arduino/datchik-vlazhnosti-i-temperatury-dht11/