Despois de buscar en diversas páxinas entre elas o Playground de Arduino, refixemos varios Sketchs sobre uso dun LCD 16x2 e dun sensor LM35, quedando o noso programa así:
/* Este Sketch foi elaborado a partires dos Sketchs de Arduino Playground sobre uso de
pantallas de cristal líquido compatibles coa pantalla LCD 16x2 de Hitachi HD44780 driver, en
concreto se usou unha LMB162ABC.
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 25 July 2009
by David A. Mellis
Ademais se modificou un Sketch para o calculo da temperatura cun sensor LM35
coa correcion da formula para o calculo da temperatura, despois de comprobar a
temperatura cun 3º sensor (un sensor barométrico BMP085).
A formula inclue a suma dun 2:
float temperatura=2+(5.0 * media * 100.0) / 1024;
pois no DataSheet do LM35 a montaxe que utilicei a recomenda entre +2ºC e +150ºC,
polo tanto, considerei que Vout=0V cando T=+2ºC
Sketch final de Manuel Andujar o 4-2-2013.
*/
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Inicialización LCD
const int Nlecturas = 200; // Numero de lecturas para cada medida de temperatura
int lecturas[Nlecturas]; // Vector de lecturas para a temperatura no LM35
int lecturas2[Nlecturas]; // Vector de lecturas para o NTC
int indice = 0; // Indice da lectura realizada
long total = 0; // Total de todas as lecturas temperatura
long total2 = 0; // Total de todas as lecturas NTC
long media = 0; // Promedio das lecturas temperatura
long media2 = 0; // Promedio das lecturas NTC
int inputPin = 0; //Entrada conectada ao LM35
int inputPin2 = 1; //Entrada conectada ao NTC
byte Grao[8] = { // variable tipo byte, podemos crear un máximo
B00100, // de 8 caracteres.
B01010, // Aquí se utilizou para crear o símbolo de grao.
B01010,
B00100,
B00000,
B00000,
B00000,
};
void setup() {
lcd.begin(16, 2); // Establece o número de filas e columnas do LCD
lcd.print("T. LM35="); // Estas primeiras instrucións son para crear os letreros
lcd.createChar(0, Grao); // permanentes na pantalla LCD
lcd.setCursor(12, 0);
lcd.write(0);
lcd.setCursor(13, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("T. NTC=");
pinMode(9,OUTPUT);
analogWrite(9,20);
for (int i = 0; i < Nlecturas; i++)
lecturas[i] = 0;
for (int i = 0; i < Nlecturas; i++)
lecturas2[i] = 0;
}
void loop() {
total= total - lecturas[indice]; // Resta a ultima lectura
total2= total2 - lecturas2[indice];
lecturas[indice] = analogRead(inputPin); // Lee a entrada analoxica 0 que e onde esta conectado o potenciometro
lecturas2[indice] = analogRead(inputPin2);
total= total + lecturas[indice]; // Engade a lectura ao total
total2= total2 + lecturas2[indice];
indice++; // Incrementa o indice para pasar a seguinte posicion do vector lectura
if (indice >= Nlecturas) // Finaliza o proceso de promediado
{ indice = 0;
media = total / Nlecturas;
media2 = total2 / Nlecturas;
float temperatura=2+(5.0 * media * 100.0) / 1024; // Calculo temperatura LM35
float VNTC=media2*(5/1023.0); // Hai que recordar que
float RNTC=VNTC*9850/(5-VNTC); // como R limitadora estou a usar unha R=9850 Ohmios
float TNTC = (log(RNTC)-log(2600.816))/(-0.037); // Formula obtida a partir das medicions previas,
lcd.setCursor(9, 0); // ver a folla de calculo determinacion parametros NTC
lcd.print(temperatura,1); // Temperatura do LM35
lcd.setCursor(9, 1);
lcd.print(TNTC,1); // Temperatura do NTC
}
delay(5);
}
Con este programa podemos realizar a calibración de diversos NTC para poder ser usados como sensores de temperatura.