SENSOR DE TEMPERATURA LM35 + LCD SERIAL



Continuando com as experiências com o LCD serial resolvi montar um termômetro usando o sensor LM35 que é um pequeno chip que gera corrente variável de acordo com a temperatura. Segundo os dados do fabricante este sensor gera uma voltagem de + 10.0 mV/°C , logo ele gera 0 V s para  0°C  celsius e + 1 V para 100 °C graus celsius com uma precisão de 0.5 °C.
Este sensor pode ser encontrado facilmente em qualquer loja de componentes e existem também várias placas ( shields) para o arduino com este sensor já montado e pronto para conexão no arduino.

A alimentação do sensor pode ser feita com 5.0 volts a partir do própria placa arduino, assim como o ground. Segue esquema da ligação abaixo:



Código

O código abaixo toma as leituras da porta analógica 0 da arduino 2009 geradas pelo LM35 e apresenta estas leituras após transformação ( veja abaixo) no LCD serial. Apresenta também as leituras de mínima e máxima. Para ver o exemplo da conexão do LCD serial procure o post sobre ele neste blog.

---------------------------------------------------------------------------------------------------
// Claudio miklos 05/2010 based on:
// http://www.arduino.cc/playground/Learning/SparkFunSerLCD
// http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino

#include <SoftwareSerial.h>
#define txPin 2
int pin = 0; // analog pin
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;
SoftwareSerial LCD = SoftwareSerial(0, txPin);

// referencia - http://www.arduino.cc/playground/Learning/SparkFunSerLCD

void setup()
{
pinMode(txPin, OUTPUT);
LCD.begin(2400);
clearLCD();
clearCURSOR();
}

void loop()

{

for(i = 0;i <= 7;i++){

samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples[i];
delay(100);

}

tempc = tempc/8.0; // better precision
tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit

if(tempc > maxi) {maxi = tempc;} // set max temperature
if(tempc < mini) {mini = tempc;} // set min temperature

selectLineOne();
delay(100);
LCD.print(maxi,DEC); LCD.print(" Max "); LCD.print(mini,DEC); LCD.print(" Min ");
selectLineTwo();
delay(100);
LCD.print(tempc,DEC); LCD.print(" Celsius");LCD.print(" P0=");LCD.print(analogRead(pin));
delay(100);

tempc = 0;

delay(1000); // delay before loop
}

void selectLineOne(){  //puts the cursor at line 0 char 0.
   LCD.print(0xFE, BYTE);   //command flag
   LCD.print(128, BYTE);    //position
}
void selectLineTwo(){  //puts the cursor at line 0 char 0.
   LCD.print(0xFE, BYTE);   //command flag
   LCD.print(192, BYTE);    //position
}

void clearCURSOR(){
   LCD.print(0xFE, BYTE);   //command flag
   LCD.print(0xC, BYTE);   //clear command.
}

void clearLCD(){
   LCD.print(0xFE, BYTE);   //command flag
   LCD.print(0x01, BYTE);   //clear command.
}

void serCommand(){   //a general function to call the command flag for issuing all other commands   
  LCD.print(0xFE, BYTE);
}


----------------------------------------------------------------------------------------------------

Considerações sobre as leituras do LM35 e o código :

// samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0; //


Se você está utilizando a alimentação do arduino com 5 v e conectando o sensor diretamente a porta analógica 0, será necessários utilizar a fórmula acima para converter a leitura de 10 bit do sensor na temperatura em graus celsius.

Exemplo:

Leitura = 48 mV

5.0 ( 5 VOLTS DE REFERENCIA)   x 48 ( LEITURA EM MILIVOLTS ) x 100  / 1024 ( SAMPLES DA PORTA ANALOGICA) = 23,4375 °C

Resultado a ser apresentado no LCD = 23°C

http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino/

Nenhum comentário:

Postar um comentário

Faça seu comentário.

Internet of Things

LUX com arduino GPRS shield e sensor LDR.

/*
Graph: Feed 38642, Datastream lux
*/

Laboratórios, Lojas e Produtos

Blogs, Comunidades e Revistas