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.