Controle de temperatura com LM35 com Arduino

LM35 com Arduino

 

O sensor LM35 com Arduino  é muito simples de utilizar para medir temperaturas diretamente em graus Celsius. Então além de medir temperaturas, vamos controlar a intensidade de luminosidade de dois LEDs; um verde e um vermelho. Quando estiver dentro da range de normalidade, a intensidade do LED verde variará conforme a porcentagem de variação estipulada; o mesmo para o LED vermelho, quando estiver na range de alerta.
Para esse projeto utilizaremos dois pinos PWM (que são os pinos precedidos pelo ‘~’ (til)) para controlar a intensidade.
Encontrei um tutorial terrível onde o Ground e o V+ estavam invertidos, então, preste MUITA atenção no modo de ligar esse sensor:

Essa referência eu peguei em um site que também dá exemplos de LM35 com Arduino (http://www.ladyada.net/learn/sensors/tmp36.html).
Olhando o componente de frente, considerando que a frente seja sua face plana, a alimentação ficará à esquerda, o ground à direita e o pino central será a nossa referência, bastanto converter a frequência gerada nesse pino para a medida em graus, com a seguinte fórmula:

temperatura = (5.0 * freq * 100.0)/1024.0;

O LED é muito simples de ligar e está descrito nesse outro post, caso necessite entender mais detalhes do que o que está descrito nesse experimento.

Para controlar a intensidade da luminosidade do LED, utilizaremos as frequencias sem aplicar a fórmula para assim ter um espaço de variação de luminosidade maior. Se você ainda não conhece o modo de funcionamento do PWM, veja nesse outro post que descrevo o recurso.

Utilizaremos o pino 9 para o LED verde e o pino 10 para o LED vermelho. O pino analógico 0 será utilizado para leitura da frequência gerada no sensor. Também utilizaremos um resistor de 330ohms entre o sensor e sua alimentação de 5v, já considerando que haverá ruído de sinal, que pode ser eliminado utilizando aref e 3v em substituição ao 5v (mas não será feito isso nesse exemplo).

O circuito deve ficar assim:

O código é muito simples e os componentes são controlados por poucas linhas:

#include <stdlib.h>
//Mensagem exibida na serial
String mensagem = " ";
//variavel para guardar o valor de conversao
float temperatura;
//variavel para guardar o valor de conversao em string
char buf[50];
//variavel que recebe o valor do pino de frequencia
int freq = 0;

void setup(){
//inicia serial
  Serial.begin(9600);
}

void loop(){
  //le a frequencia do sensor no pino 0 analogico
  freq = analogRead(0);
  //calculo para conversao em graus celcius
  temperatura = (5.0 * freq * 100.0)/1024.0;
  //conversao em string para imprimir na serial
  mensagem = dtostrf(temperatura,3,2,buf);
  //imprime na serial
  Serial.println(mensagem);
  //pausa entre os ciclos
  delay(1000);
  // se a temperatura for menor que 23, esta OK e acende no maximo o LED verde
  if (temperatura < 23){
    analogWrite(9,255);
    analogWrite(10,0);
  }
//senao se a temperatura for maior que 23 mas menor que 24, acende verde mais fraco
  else if (temperatura >23 && temperatura < 24){
    analogWrite(9,60);
    analogWrite(10,0);
  }
  //senao se for maior que 24 mas menor que 25, vermelho fraco
  else if (temperatura > 24 && temperatura < 25){
    analogWrite(9,0);
    analogWrite(10,60);
  }
//senao, certamente e maior que 25 e deve acender vermelho no maximo
  else {
    analogWrite(9,0);
    analogWrite(10,255);
  }
}

 

E no link, o resultado desse trabalho.

Pode-se fazer uma escala com LEDs, mas a precisão continuaria limitada visualmente. Assim sendo, o LED seria ideal para quando estivesse OK ou ALARMADO e as temperaturas mostradas como string em um display. Por isso, o próximo post será sobre controle de display no Arduino com o display comprado no WebTronico e em seguida veremos um projeto que se utilize do display para controlar os limites para alarme, incluindo um buzzer além dos LEDs verde e vermelho (vide nesse post).

Os próximos posts serão projetos utilizando sensores de 3 pernas para luminosidade e gases inflamáveis, a partir de onde geraremos alarmes, ligaremos lâmpadas, acionaremos ventiladores, etc. Diversão garantida!

Djames Suhanko

Sobre o autor: Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.