O sensor LM35 que veremos aqui é, provavelmente, uma solução exagerada para isto. É um sensor de alta precisão (erro máximo de 3/4 de grau na faixa de -55 a 150° C). O modelo que uso aqui é o LM35DZ (encapsulamento TO-92, operação somente de 0 a 150° C), que você encontra no Brasil por algo em torno de R$4.
O datasheet do LM35 (que coloquei nos arquivos do blog) possui uma boa explicação do uso e alguns circuitos interessantes.
Montagem Básica
A forma mais simples de usar o LM35 é alimentá-lo com uma tensão entre 4 e 20V e medir a tensão na saída; cada 0,01V corresponde a um grau centígrado (independente da tensão de alimentação).
Esta montagem simples permite medir temperaturas de 2 a 150° C, o que é mais que suficiente para medir a temperatura ambiente na maior parte do Brasil. Se você preferir trabalhar com graus Farenheit e tem preguiça de fazer contas, existe o LM34 com saída de 0,01V para cada grau Farenheit.
Medindo Temperaturas Negativas
Se você precisar medir temperaturas negativas, o circuito abaixo permite fazê-lo, você precisará usar os modelos LM35, LM35A ou LM35C (ver detalhes dos limites no datasheet).
O datasheet apresenta outras montagens, por exemplo para situações em que é existirá um cabo grande entre o sensor e o resto do circuito.
Ligando ao Arduino
A ligação básica é trivial: ligar a alimentação e conectar a saída a uma entrada ADC. O programa abaixo é um exemplo simples de leitura da temperatura:
// Teste do sensor LM35 void setup () { Serial.begin (38400); analogReference (DEFAULT); } void loop () { int vSensor = analogRead(A1); long temp = (vSensor*5000L)/1024L; Serial.print (vSensor); Serial.print (' '); Serial.print (temp/10); Serial.print (','); Serial.println (temp % 10); delay (1000); }Este exemplo simples pode ser melhorado para obter uma melhor precisão. Por padrão o ADC usa como referência os 5V de alimentação do ATmega. Supondo que estamos interessados em medir temperaturas ambientes até 50° C, a tensão de saída do sensor estará entre 0 e 0,5V. Estamos, portanto, usando apenas um décimo da escala do conversor (em outras palavras, apesar do conversor gerar resultados de 0 a 1023 a temperatura lida será mapeada em um valor de 0 até 120). Podemos melhorar isto mudando a referência do ADC, por exemplo para a referência interna de 1.1V (neste caso o resultado da leitura irá variar de 0 a 465). Outra opção, que na maioria dos casos não compensa, é colocar uma referência apropriada (e de alta precisão) no pino AREF. O código abaixo usa a referência interna:
// Teste do sensor LM35 // Referencia interna no ADC void setup () { Serial.begin (38400); analogReference (INTERNAL); } void loop () { int vSensor = analogRead(A1); long temp = (vSensor*11000L)/1024L; Serial.print (vSensor); Serial.print (' '); Serial.print (temp/100); Serial.print (','); Serial.println (temp % 100); delay (1000); }
Testes
Para fechar, um vídeo com alguns testes do sensor.
Nenhum comentário:
Postar um comentário