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
Links de referênciahttp://www.ladyada.net/learn/sensors/tmp36.html
http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino/
Nenhum comentário:
Postar um comentário
Faça seu comentário.