Manual
do
Maker
.
com
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. Veja 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!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.