Neste post vamos mostrar como usar o sensor de temperatura LM35 com Arduino. O LM35 é um sensor de temperatura fabricado pela National Semiconductor. Varia a tensão de saída (pino Vout) de acordo com a temperatura medida na superfície do sensor.
No Arduino, usamos uma das entradas analógicas para ler esta tensão do LM35 e calcular a temperatura.
Conexão do sensor de temperatura LM35 com Arduino
No circuito abaixo, podemos ver a ligação do LM35 com Arduino Uno, assim como os 3 leds na protoboard, que acendem de acordo com a variação da temperatura. Os leds estão conectados nas portas digitais 11, 12 e 13, e o sensor na porta analógica A0 do Arduino:
Ao executar o programa, o LM35 vai enviar informações pela entrada analógica do Arduino, que por sua vez vai tratar essas informações, converter a tensão do sensor para graus celsius e fahrenheit, armazenar os valores máximo e mínimo, e enviar essas informações pela serial, além de acender os leds.
Após compilar e transferir o programa para o Arduino, abra o Monitor Serial da IDE do Arduino e você verá uma tela parecida com essa, com a temperatura sendo exibida tanto em celsius como em fahrenheit, e as indicações de máxima e mínima:
Existem outros sensores de temperatura mais modernos, como o DS18B20, que é um sensor digital, possui bibliotecas próprias, possibilidade de ligar mais de um sensor na mesma porta do Arduino, e várias outras vantagens. Vou testar este sensor posteriormente e farei um post específico.
E já que falamos em datasheet no post anterior, abaixo os links para os datasheets tanto do LM35 como do DS18B20:
Abaixo, o programa relativo ao circuito apresentado nesse post:
//Programa: Sensor de temperatura LM35 //Arduino e Cia int pin = 0; //Pino analogico para ligacao do LM35 //Variaveis que armazenam a temperatura em Celsius e Fahrenheit int tempc = 0,tempf=0; int samples[8]; // Array para precisão na medição //Variáveis que guardam a temperatura máxima e mínima int maxtemp = -100,mintemp = 100; int i; void setup() { Serial.begin(9600); //Inicializa comunicação serial pinMode(13, OUTPUT); //Define pino 13 como saída (led verde) pinMode(12, OUTPUT); //Define pino 12 como saída (led vermelho) pinMode(11, OUTPUT); //Define pino 11 como saída (led amarelo) } void loop() { for(i = 0;i<=7;i++){ //Loop que faz a leitura da temperatura 8 vezes samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0; //A cada leitura, incrementa o valor da variavel tempc tempc = tempc + samples[i]; delay(100); } //Divide a variavel tempc por 8, para obter precisão na medição tempc = tempc/8.0; //Converte a temperatura em Fahrenheit e armazena na variável tempf tempf = (tempc * 9)/ 5 + 32; //Armazena a temperatura máxima na variável maxtemp if(tempc > maxtemp) {maxtemp = tempc;} //Armazena a temperatura máxima na vari[avel mintemp if(tempc < mintemp) {mintemp = tempc;} //Se a temperatura estiver abaixo de 25, acende o led verde if(tempc < 25) { digitalWrite(13, HIGH); digitalWrite(12, LOW); digitalWrite(11, LOW); } //Se a temperatura estiver acima de 28, acende o led vermelho if(tempc > 28) { digitalWrite(12, HIGH); digitalWrite(13, LOW); digitalWrite(11, LOW); } //Se a temperatura estiver acima de 25 e abaixo de 28, acende o led amarelo if((tempc > 25) && (tempc < 28)) { digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, LOW); } //As linhas abaixo enviam para o monitor serial a temperatura em //Celsius e Fahrenheit, //e também as temperaturas máxima e mínima registradas Serial.print(tempc,DEC); Serial.print(" Cels., "); Serial.print(tempf,DEC); Serial.print(" Fahr. -> "); Serial.print(" Min : "); Serial.print(mintemp,DEC); Serial.print(" Max: "); Serial.println(maxtemp,DEC); tempc = 0; delay(1000); //Aguarda 1 segundo e reinicia o processo }
Confira no vídeo abaixo o projeto em funcionamento:
Veja também o post Sensor de temperatura LM35 com display LCD 16×2, aqui mesmo no Arduino e Cia!