Sensor de Temperatura TMP36 com Arduino e visor LCD 16×2

Sensor de Temperatura TMP36 com com Arduino e visor LCD

Neste projeto vamos empregar um sensor para verificar a temperatura do ambiente e enviar a leitura para um Arduino, que se encarregará de interpretar o valor lido e então exibir em um display LCD a temperatura medida em graus Celsius (ºC).

Para tal usaremos o sensor TMP36, que é um sensor de baixo custo, bastante comum e muito empregado em circuitos que envolvam controle de temperatura para realização de processos diversos.

Outros modelos de sensores podem ser empregados, como o TMP35 ou TMP37 bastando para isso realizar pequenas alterações no programa de acordo com as características de cada componente.

Algumas das aplicações mais comuns do TMP36 incluem:

  • Sistemas de controle ambiental
  • Proteção térmica de circuitos
  • Controle de processos industriais
  • Alarmes de incêndio
  • Monitoramento de sistemas de potência
  • Gerenciamento térmico de CPU

entre muitas outras que podemos imaginar.

Algumas características do sensor TMP36

A seguir temos listadas algumas das características técnicas do sensor TMP36, retiradas de seu datasheet:

  • Saída Analógica: O TMP36 gera uma saída analógica proporcional à temperatura medida. A tensão de saída aumenta linearmente com o aumento da temperatura.
  • Precisão: Boa precisão em relação à medição de temperatura. Sua precisão é de cerca de ±2°C.
  • Alimentação: Alimentado com uma baixa tensão, tipicamente entre 2,7V e 5,5V
  • Faixa de Operação: O sensor pode medir temperaturas em uma ampla faixa, geralmente de -40°C a 125°C.
  • Tensão de Referência: Ele gera uma tensão de saída proporcional à temperatura, onde 0°C é representado como 0,5V. Para cada grau Celsius de aumento na temperatura ocorre um aumento de 10 mV na tensão de saída.

Para fazer a leitura da temperatura, a tensão de saída do TMP36 é conectada a um conversor analógico para digital (ADC) no microcontrolador (ou outro circuito). O microcontrolador (no caso, o Arduino) lê a tensão e, por meio de cálculos simples (explicados adiante), converte essa tensão medida em mV para uma temperatura correspondente em graus Celsius.

Mais informações sobre esse sensor podem ser obtidas no Datasheet do TMP36.

Vejamos os materiais que serão necessários para construir esse circuito e testá-lo.

Lista de Materiais

Vamos precisar dos seguintes componentes para montar o circuito do projeto:

  • 01 Sensor de Temperatura TMP36
  • 01 Arduino Uno (ou compatível)
  • 01 Display LCD 16×2
  • 01 Resistor de 220 Ω
  • 01 Potenciômetro de 10 kΩ
  • 01 Matriz de Contatos
  • Fios diversos

O Circuito

A figura a seguir mostra as ligações dos componentes, criada com o auxílio de um software de simulação de circuitos – Tinkercad.

Medir temperatura com sensor TMP36 e LCD no Arduino

Diagrama Esquemático

E a seguir temos o diagrama esquemático do circuito, com detalhes de como os componentes são interligados.

Sensor TMP36 e visor LCD no Arduino - Diagrama Esquemático

Sensor TMP36 e visor LCD no Arduino – Diagrama Esquemático

Código-fonte

Na sequência temos o código que foi usado para programar o microcontrolador, com uma explicação detalhada logo após.

#include <LiquidCrystal.h>

// Inicializar a biblioteca com os números dos pinos digitais
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);

// Variáveis para leitura e interpretação das leituras do TMP36
const int TEMP=0;
int val = 0;
float celsius=0.0;

void setup()
{
    // Configurar o número de colunas e linhas do LCD:
    lcd.begin(16, 2);

    // Texto a ser mostrado no LCD (texto fixo, primeira linha):
    lcd.print("Temp. °C");
}

void loop()
{
    // Posicionar o cursor na coluna 0 e linha 1 (segunda linha):
    lcd.setCursor(0, 1);

    // Ler o valor enviado pelo sensor
    val = analogRead(TEMP);

    // Calcular e ajustar a temperatura em graus Celsius
    celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125); 

    // Imprimir no LCD a temperatura
    lcd.print(celsius);
}

Funcionamento do código

1. Declarações iniciais

Começamos incluindo a biblioteca “LiquidCrystal”, que é necessária para controlar o display LCD.
Logo após criamos uma instância da classe “LiquidCrystal” chamada “lcd”, definindo os pinos digitais que estão conectados aos pinos do display . Os números (12, 11, 2, 3, 4, 5) correspondem, respectivamente, aos pinos RS, Enable, D4, D5, D6 e D7 do LCD.
 
Na sequência, declaramos duas variáveis e uma constante que serão usadas pelo programa:
 
  • TEMP é uma constante que representa o pino analógico ao qual o sensor TMP36 está conectado (no caso, o pino 0).
  • val é uma variável que será usada para armazenar o valor enviado pelo sensor TMP36
  • celsius é a variável que armazenará a temperatura (já convertida) em graus Celsius.

2. Função setup()

Aqui configuramos o número de colunas e linhas do display LCD com o método lcd.begin(16, 2) e escrevemos uma mensagem fixa na primeira linha do LCD com lcd.print(“Temp. °C”) 
 

3. Função loop()

Na função principal do programa temos:

  1. Posicionamento do cursor na coluna 0 e linha 1 (segunda linha) com lcd.setCursor(0, 1)
  2. Leitura do valor analógico enviado pelo sensor e armazenado na variável val com val = analogRead(TEMP)
  3. Cálculo da temperatura em graus Celsius com base no valor lido do sensor com a instrução celsius = map(((val – 20) * 3.04), 0, 1023, -40, 125)
  4. Finalmente, imprimimos a temperatura no display LCD com lcd.print(celsius)

A conversão de mV para ºC

A linha

celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125);

permite mapear o valor lido do sensor, que é uma tensão elétrica da ordem de alguns mV, para um valor numérico que representa a temperatura medida pelo dispositivo. Nesta linha temos:

map(): A função map() é usada para mapear um valor de um intervalo para outro. Neste caso, ela mapeia o valor ajustado em mV para o intervalo de temperaturas em graus Celsius.

A sintaxe da função map() é a seguinte:

map(valor, de_min, de_max, para_min, para_max);

onde:

  • valor: O valor que queremos mapear para a nova faixa.
  • de_min e de_max: A faixa atual (mínimo e máximo) do valor de entrada. No caso, os valores 0 e 1023, que são os limites de leitura da entrada analógica do Arduino.
  • para_min e para_max: A faixa desejada (mínimo e máximo) para o valor de saída, que no caso é a faixa de temperaturas suportada pelo sensor: de -40ºC a 125ºC

Leia mais sobre a função map do Arduino aqui.

Antes de usar a função map(), o código realiza o cálculo (val – 20) * 3.04 para ajustar o valor lido do sensor. O sensor TMP36 gera valores que representam a temperatura em mV (milivolts) e estão relacionados a uma tensão de referência. O valor “20” é subtraído para compensar a tensão de referência do sensor e ter uma medição mais precisa. Já o valor “3.04” é um fator de conversão que leva em consideração a sensibilidade do sensor. O valor obtido é então mapeado pela função map().

Assim, o código calcula a temperatura em graus Celsius com base no valor analógico lido do sensor TMP36, ajustando-o primeiro e depois mapeando-o para o intervalo desejado de temperaturas. O resultado é armazenado na variável celsius, para exibição no display LCD.

Resultado

Assim que o circuito é ligado, o sensor inicia a detecção da temperatura ambiente e então o valor é lido pelo Arduino, que o converte e mostra a temperatura correspondente no mostrador LCD, como ilustra a imagem a seguir (retirada do simulador Tinkercad):

Temperatura sendo exibida em um display LCD com sensor TMP36

Temperatura sendo exibida em um display LCD a partir de um sensor TMP36

Variando a temperatura no sensor o valor exibido no LCD muda de acordo.

É isso aí! Nos próximos artigos vamos explorar mais circuitos interessantes e úteis com microcontroladores, sensores e outros componentes eletrônicos. Até!

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*