Sensor de temperatura LM35 – Medindo temperatura com Arduino
Em diversas aplicações temos que fazer a leitura de variáveis físicas, tais como a temperatura, distancia, entre diversas outras. Nesse tutorial iremos aprender como fazer a leitura de temperatura usando o sensor de temperatura LM35, um sensor barato e de ótima precisão com uma placa Arduino.
[toc]
Sistemas autônomos
Quando pensamos em um sistema autônomo, pensamos em um sistema que faça a tarefa designada por conta própria, sem a necessidade de interferência do homem. Para isso, é fundamental que o seu sistema autônomo enxergue as variáveis físicas que serão importantes para o desempenho da atividade.
Pense em uma geladeira ou num ar condicionado. Neles devemos definir o valor de temperatura desejado e a partir desse valor o equipamento deve controlar essa variável. Para que ele tenha capacidade de controlar a temperatura, é fundamental que o sistema possa ler a variável. É ai que entram os sensores.
Sensores
Da famosa enciclopédia online Wikipédia, temos que:
“Um sensor é um dispositivo que responde a um estímulo físico/químico de maneira específica e mensurável analogicamente.”
Ou seja, sensores são dispositivos capazes de ler variáveis físicas ou químicas do ambiente e transformá-las em informação.
Qualquer processo automático possui sensores. Em industrias, onde há processos de produção automatizados, temos muitos tipos de sensores medindo as mais diversas variáveis do processo: temperatura, pressão, peso, pH, dentre muitos outros. Devido a importância da leitura dessas variáveis, existe uma área responsável por instrumentos de medição, a Instrumentação Industrial.
Nós, seres humanos, também somos feitos de vários sensores que nos ajudam a desenvolver nossas tarefas. Os nossos cinco sentidos: Olfato, audição, paladar, tato e visão, nada mais são do que conjuntos de sensores que colhem informações do ambiente para que o cérebro possa tomar decisões adequadas em cada situação.
Usando sensores
Tão importante quanto medir uma variável física é transformá-la em uma informação legível pelo cérebro do sistema autônomo, nosso Arduino, por exemplo. Pensando em eletrônica, essa informação pode ser digital ou analógica (Veja o tutorial Grandezas Digitais e Analógicas e PWM)
- Digital: Quando a informação é passada através de valores lógicos Altos(1) ou valores lógicos baixos(0).
- Analógico: Quando a informação pode assumir qualquer valor dentro de um máximo e um mínimo. Quando trabalhamos com eletrônica, geralmente essa informação é dada por um valor de corrente ou tensão.
LM35 – Sensor de temperatura
O sensor LM35 é um sensor de precisão que apresenta uma saída de tensão linear proporcional à temperatura em que ele se encontrar no momento, tendo em sua saída um sinal de 10mV para cada Grau Célsius de temperatura.
Esse sensor não necessita de qualquer calibração externa para fornecer com exatidão, valores temperatura com variações de ¼ºC ou até mesmo ¾ºC dentro da faixa de temperatura entre –55ºC e 150ºC.
Ele pode ser usado de duas formas, com alimentação simples ou simétrica, dependendo do que se desejar como sinal de saída, mas independentemente disso, a saída continuará sendo de 10mV/ºC.
Em cada uma dessas duas formas de alimentação, o range de temperatura, ou seja, a temperatura máxima e mínima medida com exatidão, é diferente.
Uma vantagem é o fato desse sensor drenar apenas 60μA para estas alimentações. Dessa forma, seu auto-aquecimento é de aproximadamente 0.1ºC ao ar livre e possui um consumo muito baixo.
O sensor LM35 é apresentado com vários tipos de encapsulamentos, sendo o mais comum o TO-92, que mais se parece com um transistor, e oferece ótima relação custo benefício, por ser o encapsulamento mais barato sem diferenças em seu uso ou exatidão.
Veja a folha de dados dele clicando aqui.
Mãos à obra – Medindo temperatura
Componentes necessários:
Montando o projeto
Agora vamos conectar os componentes do projeto. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.
Veja como ficou o nosso:
Conectando o Arduino ao computador
Conecte seu Arduino ao computador e abra a IDE Arduino.
Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.
Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).
Programando
Crie um programa (Sketch) e salve com o nome de “programa_sensor_de_temperatura”.
Com o seu programa salvo, escreva nele o código conforme escrito abaixo.
//Sensor de temperatura usando o LM35 const int LM35 = A0; // Define o pino que lera a saída do LM35 float temperatura; // Variável que armazenará a temperatura medida //Função que será executada uma vez quando ligar ou resetar o Arduino void setup() { Serial.begin(9600); // inicializa a comunicação serial } //Função que será executada continuamente void loop() { temperatura = (float(analogRead(LM35))*5/(1023))/0.01; Serial.print("Temperatura: "); Serial.println(temperatura); delay(2000); }
Após escrever o código, clique em Carregar (Upload) para que o programa seja transferido para seu Arduino.
Colocando para funcionar
Caso tenha ocorrido tudo conforme esperado, poderemos fazer a leitura da temperatura através do monitor serial. Abra o monitor serial para verificar o que está sendo lido na entrada A0.
O resultado será algo semelhante à imagem a seguir:
Entendendo a fundo
Entendendo o Software
Lendo o valor de temperatura
Primeiramente, em nosso programa usamos o comando de leitura analógica, já estudado no tutorial Entradas e Saídas Analógicas, para fazer a leitura do valor em A0. Além disso, usamos a comunicação serial, também discutida em outro tutorial, Comunicação Serial Arduino . É importante que o leitor entenda como eles funcionam. Experimente ler nossos tutoriais anteriores.
Em resumo, nosso programa lerá qual é o valor do sinal no pino A0, que varia de 0 a 1023, onde 0 corresponde a 0Volts e 1023 corresponde a 5Volts. Como sabemos, 1ºC é igual a 10mV. Sendo assim, temos:
Tensão em A0 = (Valor lido em A0)*(5/1023)
Temperatura = Tensão em A0/10mV
Logo:
Temperatura = [(Valor lido em A0)*(5/1023)]/10mV
Em linguagem de programação, ficará:
temperatura = (float(analogRead(LM35))*5/(1023))/0.01;
Transformando o tipo da variável
Perceba que colocamos o comando de leitura do valor analógico, analogRead, dentro de float(). Você saberia me dizer o motivo?
Quando o Arduino faz uma leitura analógica, ele converte o valor lido, que pode ser um valor de tensão entre 0V e 5V, em um número entre 0 e 1023. Ou seja, o Arduino divide 5Volts, que é o maior valor que ele é capaz de ler, em 1023 partes iguais e lhe informa quantas partes tem o valor que ele está medindo.
Pense que temos uma rampa que vai de 0 à 5V e dividimos essa rampa em 1024 degraus. Então, quando estamos no degrau 0, estamos no que equivale a 0V, quando subimos o primeiro degrau vamos para o que equivale a 5V/1023 (5 Volts dividido pelos 1023 degraus restantes), que é aproximadamente igual à 0,00487V.
O número que o Arduino nos informa é do tipo inteiro, contudo, o valor de temperatura é um numero racional, que pode assumir valores decimais. Por conta disso, no nosso programa, declaramos a temperatura como uma float.
Em programação, quando multiplicamos uma variável inteira por uma variável racional, o programa considera que o resultado deve ser inteiro, eliminando a parte decimal da variável. Dessa forma, para que tenhamos um resultado racional, devemos transformar o número inteiro em um número racional.
Em virtude disso, em nosso código foi necessário colocar o comando de leitura do valor analógico, analogRead, dentro de float().
numeroracional = float(numero); temperatura = (float(analogRead(LM35))*5/(1023))/0.01;
Sempre que for necessário fazer um calculo com o valor analógico, precisamos convertê-lo para uma variável do tipo float.
Em alguns casos, precisamos transformar uma variável qualquer para o tipo inteiro. O procedimento é o mesmo, ou seja, basta colocar o valor ou variável dentro dos parenteses de int();
numerointeiro= int(numero); temperatura = int((float(analogRead(LM35))*5/(1023))/0.01);
Se usamos o int() no calculo de temperatura, tal como mostrado acima, teremos um resultado sem os números decimais. Faça o teste.
Desafios
- Tente retirar o comando float() do calculo de temperatura e veja o resultado. Provavelmente você terá o valor de temperatura igual a zero, descubra o motivo.
- Crie um alarme usando um buzzer e um LM35, explicado em nosso ultimo tutorial Usando buzzer com Arduino, Quando a temperatura estiver muito alta, o alarme deve disparar.
- Usando 3 ou mais LED’s e um LM35, faça um programa que aumente o numero de LED’s acesos conforme a temperatura seja maior.
Fechamento
Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!! Compartilhe à vontade.
Engenheiro Eletricista pela UFES, Técnico em Automação industrial pelo IFES, MBA Gestão de Projetos pela USP e Fundador do Vida de Silício. Sonhador com uma única pretensão, fazer a diferença.
34 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Existe um lote de LM35 que não funciona, o lote 082×8 LM35DZ funciona perfeitamente já testei mais de 50 peças, mas todos o lote de 50 peças do 52AB LM35DZ não funcionaram, dão valores aleatório não importando o que eu faça,…
Faltou um detalhe: o sensor nessa configuração começa com 2ºC. Portanto, 0V na entrada do ADC significa 2ºC. Logo, você precisa somar +2 na temperatura.
estou com um problema semelhante ao do Marcelo e o estranho q mesmo se eu remover o sensor ou inicir o programa sem o sensor conectado e mesmo assim acusa leitura :(
Olha estes resultados, qual seria o problema?
Temperatura: 481.92
LM35 982
Temperatura: 478.49
LM35 975
Temperatura: 471.16
LM35 961
Temperatura: 470.67
LM35 964
Temperatura: 476.05
LM35 978
Temperatura: 482.89
LM35 993
Temperatura: 488.27
LM35 1001
Temperatura: 488.76
LM35 999
Temperatura: 485.83
LM35 986
Temperatura: 478.98
LM35 974
Temperatura: 474.10
LM35 965
Temperatura: 471.16
LM35 961
Temperatura: 469.70
LM35 961
Primeiro obrigado por abordar o assunto de forma didática. Allan meu sensor sempre está dando valores estranho assim como o do Gabriel, qual seria a solução comprar outro sensor LM35 ?
Boa Noite ! Estou precisando de um sensor para medir a temperatura de uma placa fotovoltáica, sei que vou precisar colocar o sensor em contato com a placa, para não medir a temperatura do ar em volta do sensor e sim a temperatura da placa.
Gostaria de saber qual sensor me recomenda para este projeto ?
aguardo respostas.
Obrigado
Bom dia.
Estou com problemas na leitura com cabos compridos.
Com o cabo curto, funciona perfeitamente. Porém, preciso de, pelo menos, 15 metros, mas quando é trocado para cabos maiores, a leitura da temperatura oscila muito.
a pinagem esta errada! Os teminais de alimentaçao estao invertiodos
Boa tarde! como faço pra registrar a hora juntamente com a temperatura no arduino? Preciso de dados em gráfico para uma apresentação.
Muito bom seu conteúdo. Parabéns
Olá! Sou estudante de Design e estou desenvolvendo um projeto de um brinquedo onde os pais poderão medir a temperatura de seus filhos através do mesmo, usando um sensor LM35. A questão é que eu não entendo nada sobre sensores hahaha por isso preciso de uma ajuda, o tutorial foi super ótimo me ajudou bastante. O desafio número 3 (Usando 3 ou mais LED’s e um LM35, faça um programa que aumente o numero de LED’s acesos conforme a temperatura seja maior.) me chamou atenção pq tbm é uma proposta do meu trabalho, a ideia é que um LED acenda qnd a temperatura exceder 37 graus. Porém, como faço isso? Sua ajuda é MUUUUUITO bem vinda hahaha desde já obrigada
Boa noite Allan Mota, parabéns pelo post. Tenho 2 questões :
1) Posso usar mais de um sensor na mesma porta analógica? Se sim ai vem a pergunta 2
2) Como faço para conectar mais de um sensor na mesma porta ?
Grato
Boa noite!
Sou o Devanir!
Como fasso para usar o sensor lm35 a 70m da placa arduino? estou usando cabo manga para comunicação!
Boa tarde Devanir, tudo bem?
Não é possível colocar um sensor tão longe da placa devido a variação do sinal causado da interferência e numa distância assim tão grande ocorre perda da energia elétrica em uma tensão tão baixa.
Aconselho manter uma placa Arduino junto com o sensor e utilizar alguma forma de comunicação com outra placa (ou até mesmo via internet) para você receber estes dados.
Sensacional! Agradeço por compartilhar. Abraços.
Olá, você poderia me esclarecer uma dúvida? É o seguinte: Mesmo quando o sensor de temperatura LM35 não está conectado na protoboard, ele fica enviando valores. Como faço para ele apontar um erro quando o sensor LM35 for desconectado da protoboard?
Já tentei utilizar resistor de pull up e não funcionou. Obrigada desde já.
Allan Mota, muito bom seu post!
Como eu nunca mexi com esse tipo de coisa, e quero fazer um controle de temperatura de servidores, gostaria de saber oq eu teria que comprar. Não sei qual o Arduino adequado, nem o protoboard, nem os jumpers, nem o sensor.
Se vc puder me dar uns nomes, pra que eu possa comprá-los por esse site mesmo.
Olá Emerson, a definição dos itens necessários do seu projeto precisa ser feita por aqueles que estão de fato alinhados com as particularidades dele. De qualquer forma, para o projeto apresentado nesse tutorial você pode conferir os itens que usamos no tópico “Componentes necessários”
Bom dia. Primeiro, obrigado pela iniciativa. Trabalho em laboratório de concreto na UERJ e precisaria fazer um gráfico da variação da temperatura de um bloco exposto ao sol durante o dia. como não é a minha área de trabalho peço sua ajuda para criar um atalho. Sei se eu pesquisar na net e nas bibliotecas eu acabaria achando. Não quero de bandeja,só uma direção. Grato, Felipe
Para montar um gráfico você vai precisar de armazenar as informações coletadas ao longo do dia, você pode usar esse tutorial aqui: https://portal.vidadesilicio.com.br/datalogger-com-modulo-cartao-sd-nodemcu/
Talvez você também vai precisar saber a hora da leitura e um RTC será importante: https://portal.vidadesilicio.com.br/real-time-clock-rtc-ds3231/
Bom dia. Muito obrigado pela ajuda. Foi um tremendo atalho. Felipe
Bom Dia. Amigo, estou com um problema, liguei os componentes de acordo com a imagem do projeto acima, porém a placa arduíno acaba desligando, fiz o teste do sensor e o mesmo está funcional, a tela lcd também está funcionando. Tenho uma placa arduíno e uma black board, em ambos os casos ao conectar a entrada 5v, o arduíno desliga.
Se a Placa Arduino está desligando, provavelmente você está dando um curto entre o 5V e o GND. Recomendo montar novamente em outro ponto da sua protoboard. Algumas vezes a protoboard pode está dando contato internamente entre as trilhas.
Olá estou fazendo um projeto e queria usar esse sensor para medição da temperatura de baterias de ions de litio em um local fechado. Você acha que ele teria um funcionamento bom para isso? E qual seria a distancia que ele tem que ficar, tem algo especificado?
Não é simples indicar a melhor opção. Mas posso te dá uma dica:
A escolha do sensor em geral tem relação com os parâmetros do sistema que você deseja controlar. Um dos parâmetros mais importantes é a temperatura mínima e máxima que deseja medir e a precisão.
Existem varias opções de sensores de temperatura tais como o DS18b20 a prova d’agua, o PT100, termistores, DHT11, DHT22, entre outros.
Sobre a questão do contato.Se você quer medir a temperatura de um corpo, você vai precisar que colocar o sensor em contato com esse corpo. caso contrario, irá medir a temperatura do Ar em torno do sensor.
Caso, na sua aplicação, a medição de temperatura ambiente seja suficiente, você pode usar o DHT11 ou DHT22, que além de medir temperatura vai te fornecer a umidade do ar.
DHT22: http://www.vidadesilicio.com.br/sensor-umidade-am2302-dht22.htmlz
Tutorial sobre o DHT22 e DHT11: https://portal.vidadesilicio.com.br/sensores-dht11-dht22-biblioteca-arduino/
Entendi Allan mota, mas no caso eu preciso de um sensor que indique a temperatura corporal da celula, pois essas celulas de ion lítio podem esquentar com facilidade durante a descarga e não é recomendavel passar dos 60°C, então eu quero monitorar para não deixar passar dessa temperatura e não disparar o sistema de segurança assim se tornando inútil para utilização, obrigado por responder o comentário anterior aprendi bastante com seu site.
Ítalo, as empresas usam muito o sensor de temperatura DS18b20 para aplicações menos robustas. Ele é bem simples de usar e confiável.
Veja as especificações:
– Comunicação One-Wire, que necessita apenas de um pino do microcontrolador para fazer a linha de dados;
– Alimentação: 3V a 5.5V;
– Escala de Medição: -55ºC até +125ºC;
– Precisão: ±0.5°C se estiver operando dentro da faixa de -10°C até +85°C;
– Resolução configurável pelo usuário de 9-bit à 12-bit;
– Possui função de alarme programável;
– Possui número de série único de 64-bit, o que permite ligar vários sensores no mesmo microcontrolador;
– Encapsulamento metálico, vedado com cola e tubo isolante termorretrátil, garantindo isolamento e proteção da água;
– Ponteira metálica pode ficar submersa (6 * 45 mm)
– Possui cabo de ligação de 85cm;
Segue o link para você dá uma olhada nele. http://www.vidadesilicio.com.br/sensor-de-temperatura-ds18b20-a-prova-d-agua.html
Boa tarde, favor indique um sensor de temperatura simples e pratico como lm35, usando o arduino, para medição de temperaturas de fornos de fogão domestico.
Obrigado
Se o uso for didático, recomendo o NTC. Eles são bem simples de trabalhar.
(http://www.vidadesilicio.com.br/termistor-ntc-10k-3mm.html)
Para aplicações comerciais, o DS18b20 é muito usado. Ele é um sensor digital e por isso você vai precisar de algumas linhas de códigos a mais, mas é muito simples de usar.
http://www.vidadesilicio.com.br/sensor-de-temperatura-ds18b20-a-prova-d-agua.html
Estou tendo o seguinte retorno:
Temperatura: 62.07
Temperatura: 0.98
Temperatura: 24.44
Temperatura: 48.39
Temperatura: 80.16
Temperatura: 98.73
Temperatura: 110.46
Temperatura: 122.68
Temperatura: 133.92
Temperatura: 156.40
Temperatura: 195.50
Temperatura: 262.46
Temperatura: 374.39
Temperatura: 498.53
Temperatura: 500.00
Temperatura: 500.00
Temperatura: 500.00
Temperatura: 474.58
Temperatura: 338.71
Temperatura: 176.93
Será que pode ser um problema no meu sensor?
Tentei vários tipos de ligações com o LM35 aqui para verificar como foi que você chegou a esse resultado. Em nenhuma delas tinha uma variação tão grande.
Pode ser sim que o sensor esteja com problemas. Mas é estranho,visto que esse é um sensor bem robusto.
Você conferiu se a alimentação do sensor está correta usando a pinagem mostrada?
Parece que a temperatura esta sempre aumentando, pode ser que não tenha resetado a váriavel e esta somando com a última…
tive o mesmo problema. notei que o pino Vout do lm35 estava sem contato com A0. Refiz o contato e o problema foi resolvido
o meu não está funcionando Allan, implementei um LCD para mostrar a leitura e um ventilador para controlar, mas a lógica deve estar faltando algo, pode me ajudar? É um trabalho acadêmico…..e estou apanhando