segunda-feira, 21 de julho de 2014

Conectando o sensor de temperatura e umidade DHT11 ao Raspberry Pi


O DHT11 é um sensor digital de temperatura com baixo custo largamente utilizado, importei o meu pela dealextreme, mas pode ser encontrado facilmente em diversas lojas no exterior ou no Brasil.

Esse sensor poderá ser encontrado também em conjunto com PCB com pinos rígidos, normalmente utilizado para facilitar a ligação com placas como o Arduino. A versão com pcb já conta com o resistor indicado no datasheet do sensor e em alguns modelos existe um led indicador. Os contatos do sensor são de certa forma frágeis, feitos para soldagem, ao colocar em uma protoboard tome o devido cuidado para não entortar, nesse caso de utilização pode ser mais vantajoso um já em forma de módulo. Fique atento quanto a tensão de operação nesses módulos, apesar do sensor funcionar de 3.3v à 5.5V, os módulos vem com valores diferentes quanto ao resistor, alguns com 4,7K e outros 10K.

As especificações de medição do sensor são bem simples, com medidas de umidade de 20% à 90% e temperatura de 0 à 50C°.

Como ligar o sensor DHT11 ao Raspberry Pi


A ligação física é bem fácil:

VCC( pino 1 ) -> 3.3v
GND( pino 4 ) -> GND
DATA( pino 2 ) -> GPIO4 
Um resistor de 4.7K em paralelo com o DATA e VCC.



O que mais complica nesse tipo de sensor é a parte de software ( para o programador, não ao usuário ). Ele utiliza um tipo de transmissão em que não há linha de clock e se utiliza apenas o fio data para isso. Na hora da transmissão dos 40 bits de dados, ela é feita conforme o comprimento de HIGH, conseguir esse timming no Raspberry Pi que geralmente não usa um sistema em tempo real não é tão fácil. Ao menos 8 bits dos 40 são destinados a verificação de dados. Mais detalhes veja no datasheet.

Retirado do datasheet

Instalação do software para aquisição de dados do sensor de temperatura DHT11 no Raspberry Pi


O software que irá monitorar a temperatura está disponível em GPLv3 em nosso repositório no github e irá precisar da wiringPi, caso não a tenha instalado faça o seguinte:

Baixe a lib utilizando o GIT:

$ git clone git://git.drogon.net/wiringPi

Caso não tenha o git instalado:  

$ sudo apt-get install git-core

Entre no diretório da wiringPi e rode como root ou sudo:

$ ./build

Esse comando irá compilar e instalar automaticamente a biblioteca.

Baixe o dht11_sensor:

$ git clone https://github.com/everpi/dht11_sensor.git

Entre no diretório criado, compile e rode como root:

$ gcc dht11.c -o dht11 -lwiringPi

$ ./dht11 7
H:56%
Temp:19C°


O argumento 7 trata-se do número dentro da biblioteca wiringPi referente ao GPIO4.

Outro problema em relação ao DHT11 é que apesar dele retornar os bits referentes a parte fracionária das medidas, eles sempre estão em branco. Pelo que pesquisei ele realmente é assim, se quiser medidas mais precisas e em intervalos maiores, use o DHT22, ele consegue medir umidade na faixa de 0 à 100%, temperatura na faixa de -40 à 80C° além de enviar dados da parte fracionária.

Referência: http://akizukidenshi.com/download/ds/aosong/DHT11.pdf
Sensor DHT11 Autor EverPi em . Sensor de temperatura e umidade DHT11 no Raspberry Pi. Tutorial para Raspberry Pi com o sensor de temperatura e umidade DHT11 de baixo custo. Classificação: 5

6 comentários:

  1. como faço para salvar esses dados em um arquivo ????

    ResponderExcluir
  2. Esse código funciona no raspberry pi 3? Tentei utiliza-lo porém o programa nao deu nenhuma resposta

    ResponderExcluir
    Respostas
    1. Funciona sim, acabei de testar aqui só para confirmar e foi perfeito. Verifique se o GPIO está correto (se estiver usando outro), as conexões elétricas, etc.

      Excluir
  3. estou utilizando o arduino para fazer a leitura do sensor dht11. Quando conecto a porta usb do arduino no notbbok para ler a resposta do sensor via IHM do arduino obtenho uma resposta bem estável exemplo 31, 31, 31, 31, 31, 31, 31, 31, 31 .... Mas quando uso a IHM do arduino para verificar sua resposta no raspberry Pi está varia de forma não controlada. exemplo : temperatura 31, 31,31, 35, 29, 30, 31, 32, 31, 31, 31, 31, 28 .... qual pode ser o motivo dessa variaçao ?

    ResponderExcluir