Hoje vamos ver como podemos realizar a aquisição dos valores de temperatura e humidade do ambiente com um simples sensor DHT11.
O DHT11 é um sensor de temperatura e humidade básico de baixo custo que utiliza um termistor e um sensor capacitivo de humidade. A sua utilização com um Arduino revela-se uma tarefa muito simples e que passamos a explicar de seguida neste artigo. Este sensor funciona com alimentação entre 3 e 5,5V.
O projeto que vamos apresentar consiste no envio para a porta série dos valores de temperatura e humidade adquiridos no DHT11 a cada minuto. Para garantir uma medida mais fidedigna vamos realizar 5 medidas de cada uma das variáveis e imprimir a sua média. Com a variável debug igual a true é possível visualizar todas as medidas realizadas pelo sensor.
Material necessário:
– 1 Arduino Uno (ou similares)
– 1 Sensor DHT11
– 1 resistência pull-up de 1 kOhm
Pinos:
Neste projeto vamos conectar o pino DATA do DHT11 ao pino 6 (pinDHT11) do nosso Arduino. Conforme podemos ver no seguinte diagrama:
Para este projeto vamos necessitar da libraria DHT11 disponível neste link. Esta deve ser instalada no Arduino IDE antes de correr o programa.
Aqui encontra-se o código utilizado para o projeto descrito:
#include "DHT.h" #define pinDHT11 6 //pino ligação do DHT11 #define intervaloleituras 1 * 60 //intervalo de n*60, n em minutos para intervalo entre medidas #define nmedidas 5 //variavel utilizada para indicar o numero de medidas efetuados #define debug false /**************** VARIAVEIS **********************/ DHT dht; //variavel do sensor de temperatura e humidade unsigned int humidade = 0; //variavel para armazenar valor de humidade unsigned int temperatura = 0; //variavel para armazenar valor de temperatura unsigned long ultimamedida; //usado para armazenar o valor em milisegundos da ultima medida /***************************************************/ void setup() { Serial.begin(9600); //velocidade de comunicacao por porta serie com o PC por USB dht.setup(pinDHT11); //definicao do pino de ligacao do sensor DHT11 Serial.println("A iniciar a leitura de temperatura e humidade..."); delay(1000); //depois de alimentar o sensor aguarda que a tensao estabilize temperaturahumidade(); ultimamedida = millis() / 1000; } void loop() { if (((millis() / 1000 - ultimamedida)) > (intervaloleituras)) { //funcao que e despoletada a cada intervaloleituras temperaturahumidade(); ultimamedida = millis() / 1000; } } void temperaturahumidade() { humidade = 0; //reset à variavel temperatura para não conter valores da última medição temperatura = 0; //reset à variavel humidade para não conter valores da última medição unsigned int h = 1; //variavel para contar o numero de vezes que é adquirida a temperatura while (h <= nmedidas) { //ciclo utilizado para adquirir nmedidas de temperatura unsigned int Humid = dht.getHumidity(); //variavel utilizada para armazenar a humidade atual unsigned int Tempe = dht.getTemperature(); //variavel utilizada para armazenar a temperatura atual String estadosensor = dht.getStatusString(); //variavel utilizada para armazenar o estado do senso if (debug) { Serial.print("h = "); Serial.print(h); Serial.print(" TEMP (*C) = "); Serial.print(Tempe); Serial.print(" HUMID (%) = "); Serial.print(Humid); Serial.print(" ESTADO = "); Serial.println(estadosensor); } if ((estadosensor == "OK") and (Humid < 100) and (Tempe < 60)) { humidade += Humid; temperatura += Tempe; } else { if (debug) { Serial.println("Necessario mais uma medida por erro no resultado obtido."); } h -= 1; } delay(dht. getMinimumSamplingPeriod()); h += 1; } humidade = humidade / (nmedidas); //média da medida de humidade temperatura = temperatura / (nmedidas); //média da medida de temperatura Serial.println(""); Serial.println("********* VALORES MEDIOS **********"); Serial.print(" "); Serial.print("TEMP (*C) = "); Serial.print(temperatura); Serial.print(" HUMID (%) = "); Serial.print(humidade); Serial.println(" "); Serial.println("************** *********************"); }
Podemos ver os resultados das medições efetuadas:
Como podem perceber, o esquema de ligações e o código para obter os resultados deste sensor são extremamente simples o que permite criar uma solução muito interessante e low-cost.
Por Carlos Oliveira.
—————
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.
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.
Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?