Dec 13 2010

Arduino + LM35 – Como montar um termometro

Para fazer essa montagem foram utilizados os seguintes componentes:

Para ligar o LM35 ao Arduino, é bom ter um conhecimento mínimo do conversos Analógico-Digital do Arduino (A/D).

Esse conversor tem entrada máxima de 5V. Como ele é de 10 bits, consegue diferenciar 1024 (de 0 a 1023) valores entre 0V e 5V.  Ou seja, quando ele ler 5v na entrada ele vai converter para 1023.

Agora ficou fácil, pois podemos fazer um regrinha de três (interpolação para quem é mais formal):

1023 —– 5V

512 ——- X

X = (5 * 512) / 1023 = 2.5 V

Ou seja,  se o A/D mostrar o valor digital 512 significa que está entrando 2.5V nele.

E o que o LM35 tem a ver com isso?

O LM35 é um sensor de temperatura linear que fornece 10mV para cada grau celcius que ele medir. Ou seja, se ele fornecer 100mV, significa que ele está medindo 10ºC.

Então da para ligar o LM35 no Arduino e fazer um termômetro?

Sim, basta fazer a ligação do esquemático abaixo e programar seu Arduino com o código fonte disponível no final desse post.

Código Fonte:

/*
Exemplo para ligar o LM35 ao Arduino
13/12/2010
http://www.webtronico.com

  Conversor Analógico->Digital de 10 bits (1024).

  O valor máximo que pode entrar no A/D é 5V.
  Sendo assim, quando entrar:
  -> 5V o valor lido será 1023
  -> 2.5V o valor lido será 511 ou (1023/2)
  -> 0V o valor lido será 0
  Resumindo, é uma regra de três normal onde:
  5V - 1023
  X  - Y
*/
int pinoSensor = 0; //pino que está ligado o terminal central do LM35 (porta analogica 0)
int valorLido = 0; //valor lido na entrada analogica
float temperatura = 0; //valorLido convertido para temperatura

void setup() {
  Serial.begin(9600); //Inicializa comunicação Serial
}

void loop() {
  valorLido = analogRead(pinoSensor);
  temperatura = (valorLido * 0.00488);  // 5V / 1023 = 0.00488 (precisão do A/D)
  temperatura = temperatura * 100; //Converte milivolts para graus celcius, lembrando que a cada 10mV equivalem a 1 grau celcius
  Serial.print("Temperatura atual: ");
  Serial.println(temperatura);
  delay(5000); //espera 5 segundos para fazer nova leitura
}

18 Comments

  • By John, October 4, 2011 @ 12:51 am

    Olá!

    Sabe como faço para ler valores negativos se o Arduino trabalha com tensão entre 0 e 5 volts?

  • By ws, November 27, 2011 @ 10:29 pm

    John, pra temperatura abaixo de 0°C você precisará de uma fonte simétrica. No datasheet do LM35 tem o esquema. Não deve ser difícil. Abraço

  • By ObservadorSP, January 6, 2012 @ 9:55 pm

    Olá. Gostaria de montar um circuito onde o valor do terminal fosse mostrado em 2 ou 3 displays de 7 seguimentos. Teria como fazer isso? Preciso de pelo menos uma dica para iniciar o projeto.
    Obrigado pela atenção.

  • By Sandro, February 7, 2012 @ 6:16 pm

    Oi, gostaria de saber se vcs tem algum sensor de temperatura 1-wire para distâncias até 10 metros.

    Obrigado

  • By jorge orengo, May 22, 2012 @ 9:47 am

    Colega, Neste código com um termômetro paralelo em 26.7 C eu estou lendo no arduino o valor de 440 na saída do println, será que meu LM35 está ruim ? Logo ao ligar ele deixa um cheiro de queimado e esquenta muito. As tensões não passaram dos 5V que é a tensão de operação do LM35. O que pode ser ? Agradeço o artigo. Muito bom.

  • By admin, May 22, 2012 @ 11:36 am

    Jorge, creio seu LM35 esteja danificado ou você ligou a tensão de forma invertida.

  • By Peter, May 25, 2012 @ 10:29 pm

    OI, COLEGA nesste codigo esta saindo 477 …sera que tem alguma erro ?

  • By minilathe(Gil Pinheiro), May 29, 2012 @ 7:36 pm

    Para ler temperaturas negativas, basta usar uma fonte de 5Vcc e ligar o OV do LM35 com um diodo em série. Assim, ao medir +0.7V na saida do LM35, em relação ao GND, isso equivale a aproximadamente 0 Graus Celsius, e se essa tensão for de 0V equivale a -70 Graus.

  • By Alian, June 5, 2012 @ 9:20 pm

    Muito bom esse post seu, eu cheguei a fazer uns testes aqui para um controlador de temperatura para meu aquário, a principio to exibindo a temperatura em dois displays de 7 seg., quando conectava na USB a temperatura oscilava em + ou – 1°, quando conectava a uma fonte de 6V a temperatura chegava a oscilar em até 10°, consegui aliviar isso com um capacitor de 1000uF conectado no 0 e no 5V do sensor mas ainda estava oscilando em 5°, fiz um for para tirar a média dentre 100 leituras e resolvi o problema.
    for(int i = 0; i <=99; i++){ // pega 100 leituras de temperatura
    samples[i] = ( 5.0 * analogRead(pinoSensor) * 100.0) / 1023.0;
    Celsius = Celsius + samples[i];
    delay(30);
    }

    Celsius = Celsius / 100; // melhor precisão

  • By marciano, July 12, 2012 @ 12:17 am

    Olá!
    Não manjo nada de Arduíno ainda mas estou muito interessado no assunto e gostaria de saber se com esse kit e mais algumas peças que julgo serão necessárias é possível criar um automatizador de ar condicionado automotivo?
    Por exemplo fazer com que o sensor mostre a temperatura num display que eu possa definir a máxima e minima temperatura para que quando atingir a temperatura máxima acione o ar condicionado e ao chegar na minima desligue o mesmo…

  • By Otto, September 2, 2012 @ 12:51 am

    Você não colocou nenhum resistor no seu circuito. Significa que o LM35 tem uma resistência interna? Procurei essa informação na internet e não encontrei.

  • By http://www.instructables.com/member/Tastache/, April 3, 2013 @ 7:26 pm

    Excellent post. I absolutely appreciate this site.
    Stick with it!

  • By Fabiano Anhaia, April 13, 2013 @ 12:12 am

    Caros amigos da webtronico gostaria do auxilio de vcs para esclarecer algumas duvidas:
    1 Para ler temperatura negativa com lm35 eu preciso de uma fonte simétrica com tensão negativa, minha duvida é a seguinte, a porta analógica do arduino lê tensão negativa?
    2 Se com a programação acima eu conseguiria fazer a leitura dessa temperatura negativa?
    3 Eu tb gostaria que essa leitura fosse realizada num display de LCD 16×2 é possível?
    Grato pela atenção de todos.

  • By Janet, May 9, 2013 @ 2:40 am

    It’s going to be ending of mine day, however before end I am reading this fantastic paragraph to improve my know-how.

  • By abrir Cuenta facebook, May 9, 2013 @ 4:40 am

    These are truly enormous ideas in regarding blogging.
    You have touched some fastidious things here. Any way keep up wrinting.

Other Links to this Post

  1. Tweets that mention WebTronico Blog » Arduino + LM35 – Como montar um termometro -- Topsy.com — December 14, 2010 @ 11:53 am

  2. WebTronico Blog » Exemplo do Ethernet Shield ENC28J60 com Arduino — May 22, 2012 @ 2:05 pm

  3. WebTronico Blog » Módulo gravador de voz ISD1820 com Arduino + LM35 — March 28, 2013 @ 4:00 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment