Artigos

Sensor DHT11 de temperatura e humidade

Descrição

Neste novo tutorial vamos aprender a ler os valores da temperatura ambiente e humidade relativa que nos proporciona o sensor DHT11. Este sensor tem um preço muito económico e é ideal para pequenos projetos com Raspberry PI ou Arduino.

 

Carateriza-se por ter o sinal digital bem calibrado, o que nos assegura uma grande fiabilidade nas leituras. A calibração realiza-se em laboratório adquirindo assim uma precisão extrema. Estamos a falar de um sensor com um microcontrolador de 8 bits e sensores resistentes encapsulados numa pequena caixa de plástico azul e construídos com materiais de excelente qualidade para uma resposta rápida e precisa.

Existem vários modelos do sensor DHT11 no mercado, alguns vêem soldados a uma placa e outros vêem soltos para serem usados diretamente ligados a uma breadboard (placa de ensaio). A vantagem dos modelos que já vêem soldados a uma placa é que escusamos de montar a resistência que atua como pull-up.

O protocolo de comunicação que se realiza através de um único fio (Single-Bus) para que a integração no seu projeto seja fácil e rápida, podendo ligar diretamente aos pinos GPIO do seu Raspbery Pi.

 

 

 

A tensão de alimentação dos sensores é de 3~5V, pode ligá-lo aos pinos +5V ou +3.3V e GND do seu Raspberry Pi ou alimentá-lo desde uma bateria externa. O seu alcance de funcionamento é de 0 a 50ºC para a temperatura e de 20% a 90% de humidade relativa. O pino de comunicações para realizar leituras pode ser ligado a qualquer pino GPIO. A taxa de atualização nas leituras é de 2 segundos.

Montagem e ligações

O sensor DHT11 que se vende sem modulo não tem especificados os pinos, por isso, tenha em atenção à seguinte imagem, o sensor está virado para cima sobre a parte que tem orifícios e os pinos estão para baixo. O pino que está situado mais à esquerda é o pino VCC (3.3V ou 5V). O segundo pino é o que usaremos para as leituras, no esquema está ligado ao pino GPIO nº4 do Raspberry Pi. O terceiro pino não será usado neste projeto. O quarto pino é GND, tem que ser ligado em qualquer pino GND do Raspberry Pi ou da bateria.

Por ultimo, tem-se que ligar uma resistência de 4.7 KOhm do pino VCC ao segundo pino (o que usaremos para realizar leituras), isto atuará como “Pull-up”.

Agora que já fizemos a montagem, varemos um exemplo de script em Python para realizar leituras com este sensor.

Script de exemplo

 

import RPi.GPIO as GPIO   #Importamos as livrarias necessárias para usar os pinos GPIO
import time               #Importamos time para poder realizar pausas

def bin2dec(string_num):  #Criamos una função para transformar de binario a decimal
    return str(int(string_num, 2))

data = []                 #Definimos data como um array

GPIO.setmode(GPIO.BCM)    #Colocamos a placa em modo BCM
GPIO.setup(4,GPIO.OUT)    #Configuramos o pino 4 como saida
GPIO.output(4,GPIO.HIGH)  #Enviamos um sinal
time.sleep(0.025)         #Pequena pausa 
GPIO.output(4,GPIO.LOW)   #Desligamos o sinal
time.sleep(0.02)          #Pequena pausa 

GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Colocamos o pin 4 em modo leitura

for i in range(0,500): #Ler os bits que confirmam a resposta binaria do sensor
    data.append(GPIO.input(4))

#Define algumas variaveis usadas para calculos máis adiante
bit_count = 0
tmp = 0
count = 0
HumidityBit = ""
TemperatureBit = ""
crc = ""

try:   #Fá-lo enquanto não existam erros, se detectas erros passa a "except"
#O seguinte codigo ler os bits de resposta que envia o 
#sensor e os transforma num numero decimal legível.

	while data[count] == 1:
		tmp = 1                              
		count = count + 1

	for i in range(0, 32):
		bit_count = 0

		while data[count] == 0:
			tmp = 1
			count = count + 1

		while data[count] == 1:
			bit_count = bit_count + 1
			count = count + 1

		if bit_count > 3:
			if i>=0 and i=16 and i=0 and i=16 and i 3:
			crc = crc + "1"
		else:
			crc = crc + "0"
except: #Erros no bloco
	print "ERR_RANGE"
	exit(0) #Saimos

#Aqui obtemos as leituras de humidade e temperatura num formato mais maneavel
Humidity = bin2dec(HumidityBit)
Temperature = bin2dec(TemperatureBit)

if int(Humidity) + int(Temperature) - int(bin2dec(crc)) == 0: #A comprovação do CRC validou-se
	print "Humidity:"+ Humidity +"%"
	print "Temperature:"+ Temperature +"C"
else: #Se não é válido
	print "ERR_CRC"

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta