Boa noite a todos.

       Tenho realizado várias tentativas de obter uma leitura mais precisa com o DHT11 (sensor de umidade e temperatura). O que tenho procurado é ter leitura com décimos de graus. Tipo 36,5°.

       Já tentei vários códigos, porem mesmo os que tem a opção de visualizar os décimos não funcionam. Agradeço a quem puder me dar uma luz.

Exibições: 3304

Responder esta

Respostas a este tópico

Este sensor se me lembro bem, nao passa valores decimais.. Ele entrega valores inteiro da temperatura e da umidade..

tipo 36ºC. se vc quiser uma estética melhor adicione zeros depois da virgula.. 36,0ºC.

Poste o código para analizarmos...

        Bom dia Cesar. 

        Neste código que eu achei ele lê toda a string enviada pelo arduino, porem o retorno para as variáveis dht11_dat[1] e dht11_dat[3] e sempre 0.  Estou começado a acreditar que estes dados não são gerados pelo sensor.

Segue o codigo: 

#define DHT11_PIN 0 // Define o pino 0 para leitura dos dados

byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(PINC & _BV(DHT11_PIN))); // Espera 50us
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN))
result |=(1(7-i));
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}

void setup()
{
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
Serial.begin(9600);
Serial.println("Ready");
pinMode(13, OUTPUT);
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;// start condition
// 1. pull-down i/o pin from 18ms
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC |= _BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);

dht11_in = PINC & _BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN);
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met");
return;
}

delayMicroseconds(80);// now ready for data reception
for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat();
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Umidade = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("Temperatura = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C ");
delay(2000);
}

Anexos

como previ, seu projeto é p arduino, e não posso lhe ajudar ao código, pois difere um pouco do código p pic q uso... Mas pelo q li no data do dht11 , realmente ele não da valores após a virgula.. ou seja , ele envia 5bytes contínuos na linha de dados.. o 1 e o 3 são os valores de umidade e temperatura respectivamente, enquanto seu subsequentes sempre são 0. o 5 byte seriam a soma de tds para confirmação de tds os bytes enviados..

espero ter ajudado.. aguarde alguém opinar se o código esta ok.

Pessoal, uma coisa muito curiosa ocorreu com o DHT11.

No meu projeto existem 2 destes sensores. Quando coloco na bancada, eles leêm a temperatura e a umidade corretamente (sem resistores). Quando vou colocar eles aonde devem estar instalados (cerca de 15m de distância do RaspberryPi) as lesituras ora falham e acusam um valor de temperatura muito baixo e de umidade muito alto, totalmente errado.
Engraçado que não parece ser uma questão de instalar um resistor, pois na bancada, com uma distância curta, não precisou, logo, numa distância maior o próprio fio atua como um resistor por ser muito comprido.

Alguém já presenciou isso? Alguém indica um sensor mais preciso que o DHT11 para medir temperatura e umidade?

Obrigado a todos!

Boa tarde TCSCM, 

Qual voltagem está usando?

Que tipo de cabo está usando?

Cuidado, os níveis da GPIO do raspberry é  0 (LOW)  e +3,3V (HIGH).

Lembre-se que a frequência do interface do DHT11 pode chegar á 50KHz.

Veja também o que fala o datasheet dele:

""  2. When using a 3.5V voltage supply cable length shall not be greater than 20cm.  ""  20 CM sómente.

https://akizukidenshi.com/download/ds/aosong/DHT11.pdf     Pag 3.

Rui

Oi Rui, boa tarde.
Estou usando o pino de 3.3V num cabo de telefone de 4 vias.

Você acredita que seja melhor por um outro tipo de sensor pra medir a umidade Rui?

Abraço!!!

Rui, estava lendo o datasheet como vc me recomendou.
Não entendo muito o que está lá, mas ele diz pra usar um pull-up em distâncias de até 20 metros, é isso?
Só que eu tenho que subir a tensão pra 5V?

"Electrical Characteristics Power supply: DC 3.5~5.5V" 

(...)
"Typical application circuit recommended in the short cable length of 20 meters on the 5.1K pull-up resistor, the resistance of greater than 20 meters under the pull-up resistor on the lower of the actual situation"

Pull -Up é um resistor que mantém o Sinal lógico alto, ligando um resistor de 10k entre a linha e o vcc do circuito, então seria um resistor de 10k ligado no 3.3V

Tem um código interessante que pode te ajudar deste russo aqui

https://github.com/G6EJD/ESP8266-Reading-Multiple-DHT-Sensors

achei interessante esse aqui, ele fez uma versão para cada tipo de sensor

https://github.com/G6EJD/ESP8266-Autonomous-Graphing-Data-Logger

Bom dia TA,

você está sugerindo sketchs par ESP, mas ele está usando raspberry.

Rui

Verdade Rui, como o tópico era sobre o Arduíno, não me atentei que o meu chara Tiago estava falando sobre RaspberryPi, apesar de ter lido (problemas da leitura dinâmica).

mas fica o registro os sketchs são bons rsrs

Lendo a exposição de vocês sobre problemas com DHT-11, lembrei-me de um problema que ocorreu comigo utilizando DHT-11 e um PIC. Montei um circuitinho em protoboard e, dentro da precisão do DHT-11 que é de +/- 1 grau Centígrado, os resultados estavam compatíveis. No "monta-desmonta" que se faz em protoboard, um mês depois remontei o mesmo esquema e os resultados ficaram sensivelmente diferentes. Quebrei a cabeça e lembrei-me que desta vez estava usando um cristal oscilador externo de 20 Mhz. Quando voltei ao esquema anterior, tudo voltou à normalidade. Para utilizar determinados periféricos é necessário seguir o protocolo de comunicação que o fabricante do mesmo nos passa nos manuais técnicos. Esta temporização, é fixa. Se o ambiente de processamento muda e não se faz a compensação o string de dados vindo do periférico pode não ser mais entendido.

Quanto à precisão de leitura, o DHT22 tem precisão de +/- 0,1 grau Centígrado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço