0

Hoje você irá aprender sobre as variações de cada sensor de temperatura Arduino: LM35, DHT11, DS18B20 e TMP36, que totalizam em 11 tipos de sensores e a como usar cada tipo na sua placa Arduino.

Esses tipos de sensores sempre são úteis para medir a umidade ambiente e temperatura de pessoas, animais, líquidos e de quase qualquer coisa que você puder imaginar que seja mensurável.

Além disso, neste artigo eu preparei um tutorial de montagem de projeto para cada sensor com uma programação fácil de entender e direta ao ponto para utilizar em seus projetos.

No entanto, para que você entenda os conceitos, preciso abordar a temperatura de uma outra forma.

Pense comigo, uma das coisas mais básicas que fazemos quando nos levantamos pela manhã é checar o clima do lado de fora de fora de nossas casas para ver se o dia está propício para uma atividade ao ar livre ou para um dia de Netflix no conforto de casa.

Não concorda?

Ou quando precisamos utilizar termômetros para verificar nossa febre quando não estamos nos sentindo muito bem…

Portanto, sabermos a temperatura no dia-a-dia acaba sendo uma aplicação bastante útil, não acha?

Vou te provar que isso é verdade e que é possível ver aplicação desses sensores não só no nosso cotidiano, mas aplicação deles na indústria.

Além disso, para que você domine o tema, eu desenvolvi um projeto bônus com DHT11 e com um DISPLAY LCD para você medir a umidade e a temperatura de forma simples e direta!

Preparado (a)?

Então aqui vai:

Quais são os principais sensores de temperatura e suas principais características?

Qual sensor de temperatura é o melhor

Na atualidade, dispomos de diversos sensores de temperatura de baixo custo que podem ser usados em nossos projetos com a plataforma Arduino e que calculam a tensão de saída e dispõem a temperatura em outras escalas, como: Celsius, Fahrenheit e Kelvin.

Mas, são tantos que até ficamos meio perdidos, não concorda?

Dessa forma, trago nos próximos tópicos os mais utilizados hoje em dia e suas principais características para que você possa escolher o componente que mais se encaixa no seu projeto.

Mas, se você não domina a plataforma Arduino ainda, recomendo você ler meu artigo: o que é a plataforma open-source e acessar o guia dos melhores treinamentos online e garantir sua vaga nos melhores Cursos Gratuitos ou Pagos em lígua portuguesa.

Família LM 35/335/34

Sensor de temperatura LM35
Sensor de temperatura LM35

LM35: o que é e como funciona?

Esse sensor é um componente eletrônico analógico e ao mesmo tempo, bastante preciso.

O sensor de temperatura Arduino LM35 usa diodos como princípio para medir a temperatura e funciona da seguinte forma: conforme os graus mudam, a tensão se altera a uma taxa conhecida de 10mV/°C.

Sendo assim, para medir a temperatura, precisamos apenas medir a tensão de saída do sensor e fazer um cálculo para converter os Volts em °C.

No programa você vai encontrar a seguinte conversão, veja só:

  // Faz a leitura do sensor
  valorSensor = analogRead(sensorPin);

  // Faz a conversão para tensão 
  tensaoSaida = (valorSensor * 5000) / 1024;

  // Calculando a temperatura para o LM35 
  temperaturaC = tensaoSaida / 10;

Essa família de sensores LM35, LM335 e LM34 trabalha de forma similar, e, a única diferença entre eles é apresentarem as temperaturas em escalas diferentes (Kelvin, Celsius e Fahrenheit) e serem calibrados de formas diferentes também.

Ou seja, a saída dos sensores no quesito tensão (milivolts) é calibrada de forma proporcional para os diferentes tipos de escalas.

Por exemplo, se o LM35 libera uma tensão de 285 mV, isso significa que o valor da temperatura será 28,5°C.

Da mesma forma se tivermos o LM34 liberando uma tensão de 285 mV, a temperatura proporcional será de 30 °F…

Isso fica mais claro na tabela abaixo, veja as diferenças entre esses sensores e suas respectivas escalas:

Família LM3433535
Escala UsadaFahrenheitKelvinCelsius
Temperatura de trabalho em °C-50°C até 150°C-40°C até 100°C-55°C até 150°C
Linearidade10 mV/°F10 mV/K10 mV/°C
Precisão a 25 °C± 1°F± 1 K± 0.5°C

Aqui você encontra os datasheets do LM35, LM335 e do LM34.

Agora, as características que eles possuem em comum, são:

  • Temperatura de trabalho que varia de -55°C até 150°C;
  • Utilizam tensão negativa para temperaturas negativas;
  • Operam entre 4V e 30V.

Mas você deve estar se perguntando por que sensores em escalas diferentes?

Qual sensor de temperatura utilizar

Esses sensores foram criados para atender diversos mercados de forma a se adequarem a diversas escalas de temperatura.

Por exemplo, aplicações exteriores onde a escala de graus Celsius não é tão popular, as pessoas preferem utilizar outras escalas, como a escala Fahrenheit nos EUA.

Além disso, qualquer faixa pode ser facilmente convertida para qualquer outra faixa da seguinte forma (digitalmente):

Celsius = Kelvin – 273,15
Fahrenheit = ((Kelvin – 273,15) * 9/5) + 32
Fahrenheit = (Celsius * 9/5) + 32

Ademais, com esses tipos de sensores, você só precisa de um voltímetro e uma fonte de alimentação de 4 ou 5 volts para ler a temperatura.

Se seu LM35 lê 0,28 volts, multiplique isso por 100 e você tem 28 graus C.

Se seu LM34 lê 0,72 volts, multiplique isso por 100 e você tem 72 graus F.

Simples assim!

Pinagem do sensor de temperatura LM35

Pinout do sensor de temperatura LM35

Pinagem VCC LM35 – Este pino vai conectado no +5V do Arduino;

– Já este, é o pino de dados do sensor, conecte-o no pino analógico A0 do Arduino;

– Por fim, o GND representa o pino negativo, conecte-o ao GND do Arduino.

Montagem do sensor de temperatura Arduino e LM35

Chegou a hora de você aprender a montagem e programação do LM35.

Mas, não se preocupe pois todos os procedimentos de construção do circuito e do código se aplicam aos outros sensores LM34 e LM335.

A montagem do projeto com o LM35 fica da seguinte forma, observe:

Montagem do sensor de temperatura LM35 com Arduino

Código utilizado no projeto

Por padrão, o programa está destinado a fazer as leituras do LM35 mas, caso for fazer medidas no LM34 ou no LM335 basta descomentar suas respectivas linhas na IDE.

O Arduino irá então ler os valores medidos do sensor de temperatura e converter em graus kelvin, fahrenheit ou celsius, dependendo de qual sensor que estiver utilizando.

A partir disso, poderemos acompanhar no serial monitor a variação de temperatura e tensão do sensor.

Se liga no código:

/*   Código do projeto sensor de temperatura Família LM
    
     Monte seus próprios projetos sem dificuldade com programação! 
     ACESSE: https://flaviobabos.com.br/
*/
 
const int sensorPin = A0; // Esse é o pino do Arduino que irá ler a saída do sensor
float valorSensor;        // Essa variável irá ser usada para armazenar o input do sensor
float tensaoSaida;        // Essa variável irá ser usada para armazenar a tensão do sensor

float temperaturaC, temperaturaF;       // Variável que será usada para armazenar a temperatura em graus

// Descomentar se estiver usando o LM335
//float temperaturaK;      


void setup() {
  
  pinMode(sensorPin, INPUT); // Declare o tipo de pino que está conectado na placa
  Serial.begin(9600);        // Inicialize a comunicação serial em 9600 bits por segundo
   
}

void loop() {

  // Insira seu código principal aqui, para rodar repetidamente: 
  valorSensor = analogRead(sensorPin);          // Leia o sensor analógico e armazene seu valor
  tensaoSaida = (valorSensor * 5000) / 1024;    //Cálculo para obter a tensão de saída do sensor
  
  // Calculando a temperatura para o LM35 
  temperaturaC = tensaoSaida / 10;             // Convertendo a tensão em graus Celsius
  temperaturaF = (temperaturaC * 1.8) + 32;    // Convertendo para graus Fahrenheit
 
  // Calculando a temperatura para o LM335
  //temperaturaK = tensaoSaida / 10;
  //temperaturaC = temperaturaK - 273;
  //temperaturaF = (temperaturaC * 1.8) + 32;

  // Calculando a temperatura para o LM34
  //temperaturaF = tensaoSaida / 10;
  //temperaturaC = (temperaturaF - 32.0)*(5.0/9.0);

  Serial.print("Temperatura(ºC): ");           // Printando em graus Celsius
  Serial.print(temperaturaC);
  Serial.print("  Temperatura(ºF): ");         // Printando em graus Fahrenheit
  Serial.print(temperaturaF);
  Serial.print("  Tensão(mV): ");              // Printando a tensão em miliVolts
  Serial.println(tensaoSaida);
  delay(1000);                                 // Uma pequena pausa para não exibir dados errôneos
}
Crie seus próprios projetos com Arduino com o Curso de Arduino

Explicação do código utilizado:

Seta AS VARIÁVEIS DO CÓDIGO

const int sensorPin = A0;

Primeiramente, comece identificando a porta analógica que o sensor está conectado no Arduino.

float valorSensor;
float tensaoSaida;

Depois, crie 2 variáveis para ler o sensor e outra para converter a tensão do sensor futuramente.

float temperaturaC;
float temperaturaF;

Declare mais 2 variáveis do tipo flutuante para armazenarem os valores de temperatura em °C e °F.

Seta CONFIGURANDO O SENSOR E O MONITOR SERIAL

  pinMode(sensorPin, INPUT);
  Serial.begin(9600);

Escreva no void setup () que o sensor é um componente INPUT e inicialize a comunicação serial à 9600 bits por segundo (bps) de forma a exibir as leituras no monitor serial.

Seta CONFIGURANDO A FUNÇÃO NATIVA LOOP ()

valorSensor = analogRead(sensorPin);

No void loop (), leia o valor saindo do sensor e armazene-o na variável valorSensor. Para ler o sensor basta usar a função analogRead () e inserir o pino do sensor como argumento da função.

Seta LEITURA DO SENSOR

tensaoSaida = (valorSensor * 5000) / 1024;

Como foi mencionado anteriormente, esses sensores possuem uma tensão proporcional à temperatura.

Já, os valores lidos no Arduino podem variar de 0 a 1023, no qual 0 condiz com 0 Volts e 1023 com 5 Volts. Portanto, podemos facilmente transformar a tensão de saída em mV de acordo com o algoritmo acima.

Seta CONVERSÃO DA TENSÃO EM °C

temperaturaC = tensaoSaida / 10;

Vimos também que a cada 10 mV corresponde a um aumento no valor da temperatura. Sendo assim, use a conversão acima para obter os valores de mV para °C.

Seta CONVERTA PARA A ESCALA FAHRENHEIT

temperaturaF = (temperaturaC * 1.8) + 32;

Já para obter essa medida em °F, basta usar a conversão dada acima.

PS: Lembrando que, caso você estiver usando os outros 2 sensores ao invés do LM35, basta descomentar as linhas do código e lembrar que o LM34 retorna a temperatura em °F e o LM335 em K.

Seta IMPRIMA OS VALORES NO MONITOR SERIAL

  Serial.print("Temperatura(ºC): ");
  Serial.print(temperaturaC);
  Serial.print("  Temperatura(ºF): ");
  Serial.print(temperaturaF);

Por último, você deve imprimir as leituras realizadas no monitor serial, utilizando os comandos abaixo:

  Serial.print("  Tensão(mV): ");
  Serial.println(tensaoSaida);

E, também não se esqueça de exibir os valores de tensão do sensor para verificar se está tudo funcionando ok.

Seta INSIRA UM DELAY

  delay(1000);

Forneça uma pausa de 1 segundo durante a execução do código para que o Arduino não faça leituras errôneas.

Família TMP 36/35/37

Sensor de temperatura TMP36

Esse sensor se parece muito com a família de sensores LM35, LM34 e LM335.

Mas, não se deixe enganar em pensar que por serem parecidos eles possuem as mesmas características técnicas.

A diferença entre eles começa na acurácia.

Enquanto os sensores TMP35, TMP36 e TMP37 possuem precisão de ± 2 °C os sensores LM chegam a ±0.5°C.

Pois bem!

Além disso, ao analisar o datasheet separado de cada um, você consegue notar que o range da família LM é de -55°C à 150°C enquanto que a faixa ideal dos sensores TMP é de -40°C à 125°C.

Já as principais funcionalidades dos sensores TMP 36/35/37, se destacam as seguintes:

  • Possuem uma tensão de baixa operação (2.7V até 5.5V);
  • Trabalham na faixa de -40°C até 125°C e operam até no máximo 150°C;
  • Não esquentam tão facilmente;
  • São estáveis a grandes cargas capacitivas aplicadas;
  • Não precisam de calibração para funcionar e são componentes que já fornecem valores na escala Celsius;
  • São qualificados para serem utilizados em automóveis.

Caso deseje se certificar de todas as especificações técnicas da família, acesse o datasheet do TMP36 aqui.

Para se ter uma ideia, encontramos aplicações desses sensores de temperatura:

  • no controle de sistemas ambientais;
  • na proteção contra superaquecimento de computadores;
  • no controle de processos industriais, e;
  • entre muitos outros.

Agora, a diferença entre os sensores TMP 36/35/37 você encontra melhor detalhado na tabela abaixo.

Veja só:

Família TMP353637
Temperatura de trabalho10°C até 125°C-40°C até 125°C5°C até 100°C
Linearidade10 mV/°F10 mV/K20 mV/°C
Tensão de saída a 25°C250 mV750 mV500 mV

Algumas características são comuns para os 3 componentes, tais como:

  • Utilizam o mesmo protocolo de comunicação analog output que usa a interface analogRead() com o Arduino;
  • Possuem a mesma faixa de alimentação: 2.7V até 5.5V;
  • Possuem precisão de +/- 1°C em 25°C e precisão de +/- 2°C entre -40°C e e 150°C.

Pinagem do sensor de temperatura TMP36

Pinout do sensor de temperatura TMP36

Pinagem VCC LM35 – Esse é o pino positivo, portanto conecte-o ao +5V do Arduino;

– Conecte este no pino analógico A0 do Arduino;

– E, o GND você já sabe, né? Vai conectado no negativo (GND) do Arduino!

Montagem do sensor de temperatura Arduino e TMP36

A montagem proposta para este projeto usando o sensor TMP36 está representada abaixo:

Montagem do sensor de temperatura TMP36 com Arduino

Da montagem do LM35 o que muda aqui é apenas o componente TMP36 pois, o restante permanece intacto: mesma polaridade de alimentação e mesmo pino analógico para coleta de dados.

Código utilizado no projeto

O código utilizado para programar o Arduino e o TMP36 é bastante similar com o usado para o LM35.

Então, olhe só:

/*   Código do projeto sensor de temperatura Família TMP
    
     Monte seus próprios projetos sem dificuldade com programação! 
     ACESSE: https://flaviobabos.com.br/
*/

const int sensorPin = A0;  // Esse é o pino do Arduino que irá ler a saída do sensor
float valorSensor;        // Essa variável irá ser usada para armazenar o input do sensor
float temperaturaC, temperaturaF;        // Variável que será usada para armazenar a temperatura em graus

void setup() {
  
  pinMode(sensorPin, INPUT);  // Declare o tipo de pino que está conectado na placa
  Serial.begin(9600);         // Inicialize a comunicação serial em 9600 bits por segundo
  
}

void loop() {
  
  // Insira seu código principal aqui, para rodar repetidamente: 
  valorSensor = analogRead(sensorPin);    // Leia o sensor analógico e armazene seu valor
  temperaturaC = valorSensor / 1024;       // Encontrando a porcentagem da leitura de input
  temperaturaC = temperaturaC * 5;          // Multiplique por 5V para obter a tensão
  temperaturaC = temperaturaC - 0.5;        // Subtraia o deslocamento  
  temperaturaC = temperaturaC * 100;        // Converta em graus Celsius
  temperaturaF = (temperaturaC * 1.8) + 32;  // Converta para graus Fahrenheit

 
  Serial.print("Temperatura atual (°C): ");  // Printando em graus Celsius
  Serial.println(temperaturaC);
  Serial.print("Temperatura atual (°F): ");  // Printando em graus Fahrenheit
  Serial.println(temperaturaF);
  delay(1000);                               // Uma pequena pausa para não exibir dados errôneos
}

Sensor de temperatura DS18B20

Dando sequência nos sensores de temperatura, temos no mercado um bastante preciso: o DS18B20.

Este é um sensor digital de temperatura que se apresenta em duas formas, o modelo em encapsulamento TO92 (modelo mais comum que também se assemelha a um transistor) e o modelo a prova d’água do sensor de temperatura Arduino DS18B20:

Sensor de temperatura DS18B20

Algumas características desse sensor DS18B20 são:

  • Escala graduada em graus Celsius;
  • Mede entre -55°C até 125°C;
  • Possui precisão de 0,5°C entre -10°C e 85°C;
  • Alimentação: 3V a 5,5V;
  • Consumo de energia: 1,5mA;
  • ID Único de 64 bits;
  • Protocolo One Wire.

Se interessou? Então acesse o datasheet do sensor DS18B20 aqui.

O protocolo One Wire nos permite que a comunicação com o Arduino seja feita com diversos sensores através de apenas uma porta digital.

Veja este tutorial de uso com 3 sensores DS18B20 utilizando uma mesma porta digital do Arduino.

Além disso, você pode definir através do protocolo, uma temperatura de alarme com temperaturas mínimas e máximas definidas no seu micro-controlador.

Por exemplo, quando a temperatura ultrapassar um determinado valor programado pelo usuário, um LED, um buzzer ou qualquer outro componente pode ser configurado para ser acionado para alertar o usuário.

Pinagem do sensor de temperatura DS18B20

Pinout sensor de temperatura DS18B20

– Ligue este pino no negativo do seu Arduino;

– Já este, conecte-o na porta digital 8 e após, insira um resistor pull-up de 4,7kOHMS e ligue-o no VCC;

Pinagem VCC LM35 – Espete este pino no +5Volts do microcontrolador.

Montagem do sensor de temperatura Arduino e DS18B20

Segue a montagem dos componentes do projeto usando o sensor de temperatura Arduino DS18B20:

Montagem do sensor de temperatura DS18B20 com Arduino

Neste projeto, é necessário que utilizemos um resistor de pull-up de 4,7KOhms para manter a transferência de dados de forma estável.

PS: Observe que este sensor possui polaridade inversa aos sensores LM35 e TMP36, portanto, siga a montagem as conexões como mostradas na imagem acima para não queimar o componente.

Agora, caso você possuir o sensor DS18B20 a prova d’água, a montagem fica da seguinte forma:

Montagem do sensor de temperatura DS18B20 prova d'agua com Arduino

Com tudo montado na protoboard, vamos partir para a programação do sistema.

Código utilizado no projeto

Utilize o código abaixo para programar o seu sensor de temperatura Arduino:

/*   Código do projeto sensor de temperatura DS18B20
    
     Monte seus próprios projetos sem dificuldade com programação! 
     ACESSE: https://flaviobabos.com.br/
*/

#include <OneWire.h>
#include <DallasTemperature.h>
 
// Porta do pino de sinal do DS18B20
#define ONE_WIRE_BUS 8
 
// Define uma instancia do oneWire para comunicacao com o sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Armazena temperaturas minima e maxima
float tempMin = 999;
float tempMax = 0;
 
DeviceAddress sensor1;

void setup()
{
  Serial.begin(9600);
  sensors.begin();
  // Localiza e mostra enderecos dos sensores
  Serial.println("Localizando sensores DS18B20...");
  Serial.print("Foram encontrados ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" sensores.");
  if (!sensors.getAddress(sensor1, 0)) 
     Serial.println("Sensores nao encontrados !"); 
  // Mostra o endereco do sensor encontrado no barramento
  Serial.print("Endereco sensor: ");
  mostra_endereco_sensor(sensor1);
  Serial.println();
  Serial.println();
}
 
void mostra_endereco_sensor(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // Adiciona zeros se necessário
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}
 
void loop()
{
  // Le a informacao do sensor
  sensors.requestTemperatures();
  float tempC = sensors.getTempC(sensor1);
  // Atualiza temperaturas minima e maxima
  if (tempC < tempMin)
  {
    tempMin = tempC;
  }
  if (tempC > tempMax)
  {
    tempMax = tempC;
  }
  // Mostra dados no serial monitor
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Min : ");
  Serial.print(tempMin);
  Serial.print(" Max : ");
  Serial.println(tempMax);
   
  delay(3000);
}

Após entender o código e ter ele pronto na sua IDE, você deve baixar as seguintes bibliotecas:

  • One Wire, e;
  • Dallas Temperature.

Siga o passo-a-passo para download:

Download Biblioteca do Sensor de Temperatura DS18B20
Acesse: Sketch > Incluir Biblioteca > Gerenciar bibliotecas
Download Biblioteca One Wire
Instale a biblioteca one wire
Download Biblioteca Dallas Temperature
Instale a biblioteca dallas temperature

Explicação do código utilizado:

Seta AS BIBLIOTECAS DO CÓDIGO

#include <OneWire.h>
#include <DallasTemperature.h>

O código precisa começar incluindo as bibliotecas DallasTemperature.h e OneWire.h pois caso contrário seu código não irá funcionar. Além disso, devemos declarar qual pino o seu sensor está conectado (pino digital 8 do Arduino):

Seta CRIE UM OBJETO PARA CONTROLAR O DS18B20

// Porta do pino de sinal do DS18B20
#define ONE_WIRE_BUS 8

Na próxima linha, é preciso criar um objeto One Wire pois assim, nos dará permissão do controle do nosso componente.

Seta CRIE UMA INSTÂNCIA DO ONEWIRE E DEFINA UM OBJETO DA BIBLIOTECA DALLAS TEMPERATURE

// Defina uma instancia do oneWire para comunicacao com o sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

Após isso, também criamos um objeto da biblioteca Dallas Temperature para passar a referência do objeto One Wire como parâmetro.

Seta INTERAJA COM O SENSOR ATRAVÉS DE COMANDOS BÁSICOS

Por fim, após a criação do objeto DallasTemperature, podemos criar comandos simples, como o exemplo abaixo, para interagir com o sensor.

Se liga:

begin()

A função procura sensores conectados no barramento e define a resolução de bits (12 bits) para cada um.

requestTemperatures()

Função que envia o comando para todos os sensores no barramento para realizar uma conversão de temperatura.

getTempCByIndex(deviceIndex)

Essa função lê e retorna a leitura de temperatura do sensor. O argumento deviceIndex nada mais é que a localização do sensor no barramento.

Se você estiver usando apenas um DS18B20 no barramento, defina-o como 0.

Família DHT 11/21/22

Agora você vai conhecer componentes que não só medem a temperatura, mas, que também medem a umidade.

Seguem abaixo as variações existentes desses sensores de temperatura DHT11, DHT21 e DHT22:

Pinout sensores de temperatura DHT11 DHT22 DHT21

Mas, como funciona o sensor de umidade Arduino?

Note que seu princípio de medição é bastante simples.

Eles consistem em um sensor de temperatura NTC (Coeficiente de temperatura negativa, sigla em inglês) e um circuito integrado CI como sendo o componente sensitivo à umidade.

Esse CI possui 2 eletrodos com uma espécie de substrato no meio para retenção da umidade.

Observe:

Funcionamento sensor de temperatura DHT22

Dessa forma, a umidade do ambiente em que você estiver é medida de acordo com a condutividade do substrato e, por causa disso, a resistência entre ambos eletrodos se altera.

Essa mudança de resistividade é calculada e processada pelo circuito integrado que já prepara os dados para serem lidos pelo microcontrolador.

Portanto, se caso a resistência entre os eletrodos diminuir é sinônimo de que a temperatura sofreu um aumento…

Observe o gráfico abaixo:

Gráfico sensor DHT22

Além disso, você consegue identificar as diferenças e semelhanças dos sensores DHT11, DHT22 e DHT21 em uma única tabela:

Família DHT112122
Temperatura de trabalho0°C até 50°C-40°C até 80°C-40°C até 80°C
Escala de umidade20 – 80% / ± 5%0 – 100% / ± 3%0 – 100% / ± 2%
Tensão de operação3.3 – 5V3.3 – 5V3.3 – 6V
Precisão a 25°C250 mV750 mV500 mV

Pinagem do sensor de temperatura DHT11

Bacana! Agora que você já entende o funcionamento dos sensores DHT, observe como se dá a pinagem do DHT11 que serve também para o DHT22:

Pinout do sensor de temperatura DHT11

Pinagem VCC LM35 – Conecte este pino no +5V do Arduino;

– Já este, conecte-o na porta digital 8 e após, insira um resistor de 10kOhms e ligue-o no VCC;

– Não se preocupe com este pino pois ele não é utilizado para ligar em nada e analisando outros tutoriais na web, percebi que nenhum projeto liga este pino a alguma coisa. Meu palpite é que talvez ele seja utilizado para calibração ou para algum teste de fábrica;

– Como o próprio nome já diz, ligue este pino ao ground do seu Arduino!

Montagem do sensor de temperatura Arduino e DHT11

Segue a montagem dos componentes do projeto:

Montagem do sensor de temperatura DHT11 com Arduino
  • Observe que o sensor possui 4 pinos conforme visto na imagem acima;
  • Também, é necessário o uso de um resistor de 5k à 10kOhms para manter a linha de dados estável durante a comunicação com o ATMEGA.

Há versões deste sensor (alguns módulos DHT) que já possuem um resistor pull-up.

Você possui uma versão assim?

Então não precisa se preocupar com o resistor pois ele já vem embutido no módulo.

Código utilizado no projeto

Esse tipo de sensor DHT11 possui seu próprio tipo de comunicação através de um protocolo para enviar os dados.

Esse tipo de protocolo necessita de uma comunicação bastante precisa com a placa Arduino para enviar as informações.

No entanto, não precisaremos nos preocupar com isso uma vez que iremos utilizar a biblioteca padrão do componente.

Para isso, vamos seguir o mesmo passo a passo que usamos para instalar a biblioteca do sensor de temperatura DS18B20 para o sensor de temperatura DHT.

Então, acompanhe os passos:

Biblioteca DHT11
Acesse: Sketch > Incluir Biblioteca > Gerenciar Bibliotecas
Biblioteca do sensor DHT11
Escreva DHT e ache a biblioteca da Adafruit e instale-a na IDE

Feito isso, use o código abaixo para programar seu sistema:

/*   Código do projeto sensor de temperatura da família DHT
    
     Monte seus próprios projetos sem dificuldade com programação! 
     ACESSE: https://flaviobabos.com.br/
*/

#include "DHT.h"
#define PINODHT 8

// Defina o modelo da família do seu DHT
#define MODELODHT DHT11

DHT dht(PINODHT, MODELODHT);

void setup() {
  Serial.begin(9600);
  
  // Inicialize o sensor
  dht.begin();

  Serial.println("Efetuando leituras!");

}

void loop() {
  
  // Aguarde alguns segundos entre as medidas
  delay(2000);

  // Lendo a umidade
  float umi  = dht.readHumidity();
  // Lendo a temperatura na escala Celsius
  float tempC = dht.readTemperature();
  // Lendo a temperatura na escala Fahrenheit
  float tempF = dht.readTemperature(true);

  // Verificando se as leituras falharam
  if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
    Serial.println("Falha na leitura do seu sensor DHT!");
  } else {
    Serial.print("Umidade: ");
    Serial.print(umi);
    Serial.print("%");

    Serial.print("  |  "); 

    Serial.print("Temperatura: ");
    Serial.print(tempC);
    Serial.print("°C ~ ");
    Serial.print(tempF);
    Serial.println("°F");
  }
}

Análise final dos sensores de temperatura

Comparação entre o TMP36 e o LM35

TMP36 vs LM35

Com tantas informações sobre esses sensores, fica um pouco complicado filtrar qual o melhor para se usar, não concorda comigo?

Mas, digo o seguinte, caso seu projeto não requerer muita precisão e não necessitar de um range amplo de medição, eu recomendo o TMP36 para facilitar na aplicação.

No entanto, se seu projeto for algo como um sensor interno conectado a um Arduino que não irá coletar temperaturas negativas, então provavelmente eu ficaria com a precisão extra do LM35, já que a tensão de alimentação e a saída negativa não seria uma preocupação.

É tudo uma questão de compensações e, para isso escrevi a seguinte tabela de comparação sobre ambos sensores:

Tabela de comparação do TMP36:

ProsContras
Faixa de tensão operacional de 2,7 V a 5,5 V perfeita para projetos de fabricantesPrecisão menor do que LM35
Toda a faixa de temperatura suportada representada como saída de tensão positivaFaixa de temperatura ligeiramente menor

Tabela de comparação do LM35:

ProsContras
Precisão de ±0,5 ° CA tensão de alimentação mínima de 4 V proibe a integração fácil de 3,3 V
Excelente faixa de temperaturaRequer saída negativa para temperaturas negativas

Comparação entre o DTH11 e o DS18B20

Já a utilização do DHT11 e do DS18B20 possui uma aplicação mais específica.

Ou seja, se você quer medir temperatura e umidade, vai de DHT11, DHT21 ou DHT22.

Agora, se quiser medir a temperatura de um líquido ou de outra coisa no qual o sensor precisa estar bem protegido e bem vedado, vai de DS18B20.

Com relação aos preços desses sensores, não há muita variação.

Após fazer uma breve pesquisa do mercado chinês e dependendo da época, você deve encontrar o seguinte (vendedores da China):

SensoresPreço
LM35R$ 7,95
TMP36R$ 7,34
DS18B20R$ 7,84
DS18B20 (a prova d’água)R$ 9,59
Módulo DHT11R$ 4,56

Projeto Bônus

Sensor de temperatura DHT11 e LCD com Arduino
Projeto sensor de temperatura DHT11 com Display LCD e Arduino

Para que você domine o mundo dos sensores de temperatura com Arduino, preparei um projeto que aborda o sensor de temperatura Arduino com DHT11 e um Display LCD 16×2.

Este é um projeto simples mas eficaz e que no final você poderá aprender muito com o que irei te ensinar aqui!

Vamos ao que interessa.

Montagem do sensor de temperatura DHT11 com LCD

Para construir este projeto presente na imagem abaixo:

Sensor de temperatura DHT11 e LCD com Arduino
Vista lateral do módulo do sensor de temperatura DHT11

Você irá precisar de:

  • 1 Arduino;
  • 1 Sensor de Temperatura DHT11;
  • 1 Display LCD;
  • 1 Potenciômetro entre 5k a 10kOhms;
  • 15 a 20 jumpers macho-macho;

A montagem de todos esses componentes fica da seguinte forma:

Sensor de Temperatura DHT11 e LCD com Arduino
Montagem dos componentes do projeto

Para este projeto foi utilizado um módulo DHT11 mas você pode utilizar o componente normal, não precisa ser especificamente um módulo para funcionar.

Apenas atente-se para as conexões do display LCD 16×2 nos pinos digitais do Arduino:

LCD Arduino
Pinagem do LCD com Arduino

Bora programar?

O código para execução do projeto é o descrito abaixo:

/*   Código do projeto sensor de temperatura DHT11 e LCD
    
     Monte seus próprios projetos sem dificuldade com programação! 
     ACESSE: https://flaviobabos.com.br/
*/

// Inclua as bibliotecas dos componentes
#include <LiquidCrystal.h>
#include "DHT.h"

// Defina o pino do seu componente
#define PINODHT 8

// Defina qual o modelo da família do seu DHT
#define MODELODHT DHT11

// Defina as portas utilizadas do LCD
// LiquidCrystal(RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

DHT dht(PINODHT, MODELODHT);

void setup() {
  Serial.begin(9600);
  
  // Inicialize o LCD
  lcd.begin(16, 2);

  // Inicialize o sensor
  dht.begin();
  
  Serial.println("Efetuando as leituras!");
  lcd.print("Aguarde...");

}

void loop() {
  
  // Aguarde alguns segundos entre as medidas
  delay(1000);

  // Lendo a umidade
  float umi  = dht.readHumidity();
  // Lendo a temperatura na escala Celsius
  float tempC = dht.readTemperature();
  // Lendo a temperatura na escala Fahrenheit
  float tempF = dht.readTemperature(true);

  // Verificando se as leituras falharam
  if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
    Serial.println("Falha na leitura do seu sensor DHT!");
  } else {

    // Printando os resultados no Monitor Serial
    Serial.print("Temperatura: ");
    Serial.print(tempC);
    Serial.print("°C ~ ");
    Serial.print(tempF);
    Serial.print("°F");

    Serial.print("  |  "); 
    
    Serial.print("Umidade: ");
    Serial.print(umi);
    Serial.println("%");
    
    // Printando os resultados no LCD
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(tempC);
    lcd.print(" C ");

    lcd.setCursor(0,1);
    lcd.print("Umidade: ");
    lcd.print(umi);
    lcd.print(" % ");

  }
}

Entendendo o código a fundo

Seta INCLUA AS BIBLIOTECAS DO PROGRAMA

#include <LiquidCrystal.h>
#include "DHT.h"

A primeira coisa antes de tudo é incluir as bibliotecas utilizadas no projeto.

Neste caso é necessário que importemos a biblioteca do LCD e do DHT.

Para o LCD, basta escrevermos o #include pois a biblioteca já vem instalada na IDE do Arduino.

Agora, para a família de sensores DHT você irá precisar instalar direto do Gerenciador de Bibliotecas.

Caso não saiba o passo a passo de instalação, na seção sobre o DHT11 deste artigo eu explico como fazer para inserir a biblio desse componente na IDE.

Seta DEFINA ONDE OS COMPONENTES ESTÃO CONECTADOS

const int PINODHT 8

#define MODELODHT DHT11

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

DHT dht(PINODHT, MODELODHT);

O segundo passo é fazer com que o Arduino identifique em quais portas estão cada componente.

Por exempo, usamos const int para definir onde se encontra o nosso DHT11 e já que estamos falando de variável, você já deve saber que as variáveis const int são diferentes das variáveis int.

O que diferencia uma da outra é que a const int é usada apenas para leitura e a int é utilizada para gravar dados ao longo do código.

Por exemplo, os números dos pinos raramente devem ser alterados. 

Portanto, eles geralmente são declarados como const ou como #define.

Além disso, vale a pena notar que, se você usar “const” para a variável que for somente leitura, o compilador poderá fazer otimizações, o que inclui a não alocação de armazenamento de dados para a variável.

Não se esqueça também de escrever no programa qual o modelo de DHT que está utilizando e de definir a pinagem do LCD no programa na seguinte ordem:

LiquidCrystal(RS, E, D4, D5, D6, D7)

Seta FUNÇÃO NATIVA SETUP()

void setup() {
  Serial.begin(9600);

  lcd.begin(16, 2);

  dht.begin();
  
  Serial.println("Efetuando as leituras!");
  lcd.print("Aguarde...");

}

Dentro do setup() iremos fazer o seguinte:

  • Inicializar a comunicação serial com o monitor serial a uma taxa de 9600 bits por segundo;
  • Especificar o LCD que estamos a utilizar (16 colunas e 2 linhas);
  • Inicializar o sensor de temperatura Arduino – DHT11;
  • Informar coleta de leituras no monitor serial e no LCD.

Simples assim!

Seta LOOP: VARIÁVEIS TEMPERATURA E UMIDADE

  delay(1000);
 
  float umi  = dht.readHumidity();

  float tempC = dht.readTemperature();

  float tempF = dht.readTemperature(true);

Já na função void loop() iremos declarar 3 variáveis de ponto flutuante: uma para receber o valor da umidade (umi), outra para identificar a variação de temperatura em graus Celsius (tempC) e mais uma para a escala Fahrenheit (tempF).

Lembrando que esse tipo de variável float é um decimal e é usado para armazenar números não inteiros.

Um delay também é necessário no começo do loop para nos assegurar de coletar medidas assertivas do sistema de temperatura e umidade.

Seta CERTIFICANDO AS LEITURAS

 if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
    Serial.println("Falha na leitura do seu sensor DHT!");

Essa é uma maneira simples e eficaz de averiguar se obtivemos sucesso na coleta dos dados de temperatura e umidade.

É como um debug: você consegue saber se o erro está nas conexões do seu DHT, como má conexão de jumpers/fios, ou erro de hardware do próprio componente.

Seta PRINTANDO NO MONITOR SERIAL

    Serial.print("Temperatura: ");
    Serial.print(tempC);
    Serial.print("°C ~ ");
    Serial.print(tempF);
    Serial.print("°F");

    Serial.print("  |  "); 
    
    Serial.print("Umidade: ");
    Serial.print(umi);
    Serial.println("%");

A função Serial.print () envia informações do Arduino para o computador. Você pode ver essas informações no monitor serial da IDE.

O que estiver dentro das aspas da função, irá ser impresso na tela do monitor serial. Caso você fornecer uma variável como argumento, o imprimirá o valor dessa variável.

Como a variável de umidade é a última coisa que você imprimirá nesse loop, você pode usar um comando um pouco diferente: Serial.println ().

Se você não sabe, esse comando criará uma nova linha no monitor serial após o envio do valor. Isso ajuda a facilitar a leitura das coisas quando elas estão sendo impressas.

Valores de temperatura no monitor serial do Arduino
Valores de temperatura na escala Celsius e Fahrenheit e umidade relativa do ar impressos no monitor serial

Seta PRINTANDO NO DISPLAY LCD

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(tempC);
    lcd.print(" C ");

    lcd.setCursor(0,1);
    lcd.print("Umidade: ");
    lcd.print(umi);
    lcd.print(" % ");

Primeiramente dê um clear na tela do seu display LCD para limpar todo e qualquer caractere escrito anteriormente.

Após isso ter sido feito, deve-se posicionar o cursor na linha e coluna zero para que a temperatura na escala Celsius seja escrita a partir daí.

Para imprimir a umidade deve-se pular uma linha, indo para a linha debaixo e usar o lcd.print() para imprimir o texto “Umidade” e printar a variável umi logo em seguida.

Considerações finais do Projeto Bônus

Com o código carregado no Arduino, clique no ícone do monitor serial.

Monitor Serial Arduino
Clique no Monitor Serial do Arduino

Veja as oscilações presente no monitor serial e no visor do seu LCD.

Por exemplo, você pode pegar algo mais quente do que o ambiente em que estiver e posicionar na frente do seu sensor e ver a temperatura aumentar.

Algo simples como pressionar o sensor colocando os seus dedos em volta dele já é suficiente para ver o que acontece com os valores no monitor serial da IDE e na tela do seu display.

Senão, você pode fazer o oposto.

Pegue algo mais frio do que o normal e insira próximo ao sensor e você verá que a tempratura aumenta consideravelmente ao longo do tempo.

Falando em projeto bônus, eu reuni algumas das melhores invenções com a plataforma Arduino e disponibilizei aqui no blog! Acessa lá e me conta o que achou!

E aí, com qual sensor de temperatura Arduino você mais se identificou? Comente aqui embaixo e me deixe saber 👇

Flávio Babos
Futuro Engenheiro Mecatrônico pela Federal de Uberlândia, fanático por Tecnologia, Empreendedorismo e Gestão. Desde pequeno faz projetos com Arduino e recentemente atuou na Empresa Júnior do seu curso gerenciando equipes de engenharia no setor de vendas e de projetos.

10 Melhores Projetos Com Arduino Para Criar em 2021

Previous article

O Que é Internet das Coisas e 13 Exemplos da Tecnologia

Next article

You may also like

Comments

Leave a reply

Your email address will not be published. Required fields are marked *

More in Arduino