Sensor de temperatura LM35 no Arduino
  • Retrofit
  • 18/05/2020

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:
  1. ler conversor AD no pino analógico em que está ligado o sensor;
  2. Realizar a conversão da leitura AD para tensão, através de código;
  3. Realizar a conversão de tensão para temperatura;
  4. Mostrar a temperatura no display;
  5. Enviar o valor de temperatura pela porta serial;
  6. delay (tempo) de 1 segundo;
  7. 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!