Sensor de temperatura LM35 no Arduino
Sensor de temperatura LM35 no Arduino
Você sabe como realizar a medição de temperatura no Arduino, utilizando sensores comuns, como o LM35 ou o TMP36? Se é isso que você está procurando, este post vai te auxiliar nesta tarefa, utilizando o sensor de temperatura LM35 e o Arduino Uno. Em outro post falarei da utilização do sensor TMP36, que é muito semelhante.
Posto de forma simples, a temperatura é a medição do grau de agitação das moléculas do objeto (solido, liquido ou gasoso). Assim, quanto mais alta é a temperatura do objeto, maior é a agitação de suas moléculas e maior a emissão de energia. Logo, para detectarmos a temperatura é necessário que se utilize um sensor adequado, que capture a energia emitida e a transforme em um sinal elétrico correspondente.
Neste artigo vou lhe mostrar a utilização do sensor LM35 no Arduino Uno (facilmente utilizável no Arduino Nano também) com display 16x2 LCD para visualização da temperatura e também o envio do seu valor pela porta serial, para visualização no computador.
Por: Diego J. Stefanello e Ricardo B. Morim
Como funciona o LM35
Para facilitar a utilização destes sensores de temperatura em seus projetos com Arduino, nada melhor do que você entender como eles funcionam.
Convido você a consultar o datasheet destes componentes, que é o documento que contém as informações técnicas a respeito dos mesmos, fornecido pelo fabricante. Você pode visualizar o aspecto real destes sensores na Figura 1.
Figura 1: Sensor de temperatura LM35.
O datasheet pode ser baixado no seguinte link: http://www.ti.com/lit/ds/symlink/lm35.pdf
Na primeira página do datasheet você vai encontrar as principais características do LM35, tais como precisão, faixa de temperatura de medição e tensão de alimentação, dentre outras. É interessante que você leia atentamente o documento para que faça a utilização correta do componente. Os dados de encapsulamento e da disposição dos pinos também estão disponíveis no documento.
Através da leitura do datasheet, você verificará que o LM35 é um sensor de temperatura de precisão com saída de tensão linearmente proporcional a temperatura em graus Celsius. O sensor não requer calibração e há especificações de precisão de acordo com a faixa de temperatura de operação. São indicados os modos de operação básico e estendido. Nesse artigo foi utilizado o modo básico, cujo esquema é mostrado na Figura 2.
Figura 2: Esquema básico para utilização do sensor de temperatura LM35.
No datasheet você pode ver ainda a configuração básica de utilização: A saída do sensor é analógica, de 10 mV/ºC. Além disso, o sensor possui um offset de temperatura, que corresponde a 2 ºC quando a sua saída é de 0 V.
Portanto, para a utilização do esquema básico, só conseguiremos medir temperaturas a partir de 2ºC, o que já é suficiente para a maioria das aplicações.
O encapsulamento do LM35, em sua versão mais comum, é mostrado na Figura 3, na qual é mostrada a vista do lado dos pinos.
Figura 3: Encapsulamento do sensor de temperatura LM35.
A faixa de utilização do sensor de temperatura é de 2 ºC a 150 ºC no modo básico. Para medir temperaturas abaixo de 2 ºC é necessário que se faça uma pequena modificação no circuito, como é mostrado no datasheet.
Convertendo da tensão de saída do sensor em temperatura
Como você pode ver, os sinais de saída do sensor de temperatura LM35 é analógico. A utilização destes sensores com o Arduino Uno deverá ser feita por meio do conversor Analógico Digital (ADC). Portanto, é necessário que sejam construídas as relações entre a tensão medida (sinal do sensor), o valor digital resultante e finalmente a temperatura correspondente.
Figura 4: Caminho do sinal a ser medido e visualizado.
Conversor Analógico Digital (AD) do Arduino
O conversor AD do Arduino é um periférico do microcontrolador que realiza a conversão de sinais analógicos em digitais. É importante que você entenda alguns conceitos básicos para que seja possível utilizar adequadamente o conversor AD.
A faixa de tensões analógicas que o conversor ADC trabalha é definida pelo valor das tensões de referência, positiva (Vref+) e negativa (Vref-). Usualmente a referência negativa é conectada ao GND (0V) da placa e a referência positiva é conectada ao VCC (+5 V) da própria alimentação do microcontrolador.
Nesse artigo foi considerado que Vref- é o GND (0V) e Vref+ é 5V. O conversor AD do Arduino possui resolução de 10 bit, isto é, a faixa de sinais entre Vref- e Vref+ é convertida em uma faixa de valores numéricos inteiros variando de 0 a 2^10-1, ou seja, de 0 a 1023.
Figura 5: Alimentação do ADC.
Portanto, a partir de uma regra de três simples você pode construir a relação numérica entre a tensão de entrada do conversor AD e o valor resultante, uma vez que:
- Se a entrada do conversor AD é 0 V, o resultado da conversão é 0;
- Se a entrada do conversor AD é 5 V, o resultado da conversão é 1023;
Assim, para uma tensão x de entrada, teremos um resultado y, digital:
Como no processo de conversão a variável que teremos é o resultado digital y, a tensão de entrada x é calculada através da relação:
Outra informação importante é a resolução das leituras do conversor AD. Isto acontece porque, como foi demonstrado, temos 1024 valores diferentes (de 0 a 1023) para representarmos uma variação de tensão de 0 a 5 V. Dividindo-se os 5 V/1023 temos que a resolução do conversor AD é de 4,88 mV.
Figura 6: ADC ATMEGA328 (Arduino UNO).
Em outras palavras, cada incremento unitário no valor resultante da conversão AD corresponde a um aumento de 4,88 mV na tensão de entrada do conversor AD do Arduino.
Hora da diversão: Colocando a teoria em prática
Agora que você já aprendeu um pouco mais sobre os sensores, que tal fazer a implementação e ver o seu conhecimento materializado?
Para realizar o experimento, você vai precisar de:
- Uma placa Arduino, no caso utilizaremos o Arduino Uno
- Um sensor de temperatura LM35
- Um protoboard (placa de prototipagem)
- Um display LCD de caracteres, 16x2
- Fios diversos para as conexões
Montando o circuito
Monte seu circuito conforme a Figura 6. Certifique-se que ele esteja desligado durante a montagem.
Figura 7: Montagem do circuito.
Se tiver duvidas neste circuito, a leitura deste artigo mostrando como usar o display LCD 16x2 poderá te ajudar.
Na Figura 4, as conexões do sensor LM35 foram feitas diretamente na placa do Arduino Uno, evitando oscilações na medição de temperatura, pois pequenas quedas de tensão nos cabos de alimentação (devido ao uso do blacklight) são suficientes para alterar o valor lido pelo ADC. Embora existam maneiras de contornar esse problema, usando cabos de alimentação mais grossos, por exemplo, nem sempre temos a disposição durante a montagem no protoboard.
O capacitor azul que aparece abaixo do LM, possui especificação de 100nF/16 V e tem a finalidade de eliminar ruídos indesejáveis na alimentação do sensor.
Contudo, se você encontrou dificuldades em realizar a montagem, o circuito abaixo (Figura 5) com o esquema elétrico, poderá lhe ajudar.
Figura 8: Esquema elétrico do circuito com LM35.
Programando o Arduino
Para a programação, primeiramente faremos um breve fluxograma. O fluxograma consiste no estabelecimento da sequência das instruções que deverão ser codificadas na linguagem de programação do Arduino.
Como queremos que o programa funcione continuamente, estabelecemos um loop (laço) fechado, contínuo e infinito, que contém as sequências de código. O fluxograma tem a seguinte forma:
- inicialização de variáveis, configuração dos pinos e da porta serial (executa só uma vez);
- loop:
- ler conversor AD no pino analógico em que está ligado o sensor;
- Realizar a conversão da leitura AD para tensão, através de código;
- Realizar a conversão de tensão para temperatura;
- Mostrar a temperatura no display;
- Enviar o valor de temperatura pela porta serial;
- delay (tempo) de 1 segundo;
- retorna ao passo 1.
Embora eu tenha realizado a implementação no Arduino Uno, você poderá utilizar uma placa de Arduino Nano praticamente sem precisar alterar nada no código e obter os mesmos resultados.
Programa para o Arduino Uno (Sketch):
/**********************************************************************************
TOT Engenharia
Neste exemplo, você entenderá como é feita a leitura do sensor de temperatura
LM35, atravéz do conversor ADC do Arduino, convertido para a escala de graus
Celsius e mostrada em um display LCD 16x2.
Autor: Ricardo Morim
Revisão: Diego Stefanello
Data: 06/2018
Versão: 1.0
*********************************************************************************/
//--- Carrega a biblioteca LiquidCrystal ---
#include <LiquidCrystal.h>
//--- Definições de estados ---
#define ON 1
#define OFF 0
//--- Definições de pinos ---
#define LM35_PIN A0
//--- Define os pinos que serão utilizados para comunição com o display ---
LiquidCrystal lcd( 6, 7, 8, 9, 10, 11); // Pinos do LCD: RS, ENABLE, D4, D5, D6, D7
//Array simbolo grau
byte grau[8] =
{
0b01110,
0b01010,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
//--- Inicialização ---
void setup()
{
Serial.begin(115200); // Inicializa a serial @ 115200bps
lcd.begin(16, 2); // Inicializa O LCD 16x2
lcd.createChar(0, grau); //Cria o caractere customizado com o simbolo do grau
// Cria o cabeçalho do display
lcd.setCursor(2,0); // Seta cursor no display (coluna, linha)
lcd.print("Sensor LM35"); // Envia o texto para o display
lcd.setCursor(0,1); // Seta cursor no display (coluna, linha)
lcd.print("Temp:"); // Envia o texto para o display
// Cria o cabeçalho para serial
Serial.println("Sensor temperatura LM35"); // Envia texto pla serial, seguido por um caractere de retorno de
// carro (decimal 13 ou '\r') e um caractere de nova linha (decimal 10 ou '\n')
}
//--- Loop principal ---
void loop()
{
unsigned int lm35; // Variável do tipo inteiro (16bits) para armazenar a conversão analogica do ADC
float t_lm35; // Variavel do tipo float, para armazenar a temperatura em graus Celsius, do LM35
lm35 = analogRead(LM35_PIN); // Faz a conversão analogica->digital da entrada onde está ligado o LM35
t_lm35 = ((float)lm35*5/1023); // Converte o valor lido em tensão (Volts)
t_lm35 = (t_lm35 + 0.02) * 100; // Ajusta o offset e converte para temperatura, em ºC (tensão*100)
Serial.print(t_lm35, 1); // Envio o valor da temperatura pela porta serial
Serial.print("\xC2\xB0"); // Envia o simbolo "°". Arduino IDE 1.8.3 utiliza formatação UTF-8
Serial.println("C"); // Envia o caracter "C" e o comando de nova linha e retorno
lcd.setCursor(6, 1); // Posiciona o cursor do LCD, na 1º linha
lcd.print(t_lm35, 1); // Envia para o display, o valor da temperatura, com um decimo de resolução
lcd.write((byte)0); // Envia o simbolo do grau, formado pelo array
lcd.print("C "); // Envia a letra C
delay(1000); // Delay de 1 segundo (1000 milisegundos) entre cada ciclo de leitura da temperatura e envio para o display
}
Para Finalizar, segue abaixo as imagens da minha realização prática.
Figura 9: Montagem final.
Conclusão
Neste artigo vimos a utilização de do sensor de temperatura analógico LM35 no Arduino Uno, que também pode ser implementado no Arduino Nano praticamente sem modificações.
Como você pode notar, a sua utilização é relativamente simples. No caso deste artigo, temos as medições somente com valores inteiros e sem muita precisão numérica.
E se quiséssemos, por exemplo, realizar medições com uma precisão aprimorada, com os valores dos décimos? Este será o assunto do meu próximo artigo, no qual irei lhe ensinar uma das diversas formas de se conseguir a medição de temperatura com mais resolução.
Gostou do artigo? Sobre o que você gostaria que escrevêssemos? Deixe o seu comentário!