Sensor de temperatura

Anuncio
FUNDAMENTOS DE ELECTRICIDAD Y MAGNETISMO
Proyecto final
Sensor de temperatura
Diego Andres Camacho Torres 201249
Hector Dario Diaz Ortiz
245001
Edna Rocio Forero Delgado
153597
Olga Rosa Lozano Lozada
201128
Ian Potdevin Afanador
153661
Javier Rivera Acosta
274144
Cesar Duvan Torres Hernandez 201072
Profesor Jaime Villalobos Ph.D
Universidad Nacional de Colombia
Sede Bogotà
2012 - I
SENSOR DE TEMPERATURA
1.
MARCO TEÓRICO
Un termistor es un sensor resistivo de temperatura. Su funcionamiento se basa en la
variación de la resistividad que presenta un semiconductor con la temperatura. El término
termistor proviene de Thermally Sensitive Resistor. Existen dos tipos de termistor:


NTC (Negative Temperature Coefficient) – coeficiente de temperatura negativo
PTC (Positive Temperature Coefficient) – coeficiente de temperatura positivo
Son elementos PTC los que la resistencia aumenta cuando aumenta la temperatura, y
elementos NTC los que la resistencia disminuye cuando aumenta la temperatura.
Su funcionamiento se basa en la variación de la resistencia de un semiconductor con la
temperatura, debido a la variación de la concentración de portadores. Para los termistores
NTC, al aumentar la temperatura, aumentará también la concentración de portadores, por
lo que la resistencia será menor, de ahí que el coeficiente sea negativo. Para los
termistores PTC, en el caso de un semiconductor con un dopado muy intenso, éste
adquirirá propiedades metálicas, tomando un coeficiente positivo en un margen de
temperatura limitado. Usualmente, los termistores se fabrican a partir de óxidos
semiconductores, tales como el óxido férrico, el óxido de níquel, o el óxido de cobalto.
Sin embargo, a diferencia de los sensores RTD, la variación de la resistencia con la
temperatura es no lineal. Para un termistor NTC, la característica es hiperbólica. Para
pequeños incrementos de temperatura, se darán grandes incrementos de resistencia. Por
ejemplo, el siguiente modelo caracteriza la relación entre la temperatura y la resistencia
mediante dos parámetros:
con
donde:

es la resistencia del termistor NTC a la temperatura T (K)


es la resistencia del termistor NTC a la temperatura de referencia
(K)
B es la temperatura característica del material, entre 2000 K y 5000 K.
Por analogía a los sensores RTD, podría definirse un coeficiente de temperatura
equivalente , que para el modelo de dos parámetros quedaría:
Puede observarse como el valor de este coeficiente varía con la temperatura. Por
ejemplo, para un termistor NTC con B = 4000 K y T = 25 °C, se tendrá un coeficiente
equivalente = -0.045
, que será diez veces superior a la sensibilidad de un sensor
Pt100 con = 0.00385
.
El error de este modelo en el margen de 0 a 50 °C es del orden de ±0.5 °C. Existen
modelos más sofisticados con más parámetros que dan un error de aproximación aún
menor.
En la siguiente figura se muestra la relación tensión – corriente de un termistor NTC, en la
que aparecen los efectos del autocalentamiento.
A partir del punto A, los efectos del autocalentamiento se hacen más evidentes. Un
aumento de la corriente implicará una mayor potencia disipada en el termistor,
aumentando la temperatura de éste y disminuyendo su resistencia, dejando de aumentar
la tensión que cae en el termistor. A partir del punto B, la pendiente pasa a ser negativa.
Características
Las termorresistencias más comunes se fabrican de alambres finos soportados por un
material aislante y encapsulado. El elemento encapsulado se inserta dentro de una vaina
o tubo metálico cerrado en un extremo que se llena con un polvo aislante y se sella con
cemento para impedir que absorba humedad.
Diagrama esquemático de una resistencia termométrica, o resistencia detectora de temperatura (RTD).
2. MATERIALES
1 x Arduino Uno
1 x Protoboard
1 x NTC 10KΩ
1 x Potenciómetro 10kΩ
5 x Diodos LED
5 x Resistencias 220Ω
1 x Resistencia 1KΩ
El sensor utilizado es una resistencia NTC de 10 KΩ.
Marca General Electric. P.N. RL0503-5820-97-MS
Resistencia a 25°C= 10.000 Ω
Beta= 3900 de 0°C a 50°C.
Estos datos fueron tomados del Datasheet ofrecido por el fabricante (Ver Anexo).
3.
DISEÑO DEL HARDWARE
El circuito se estructura en tres partes:



Entrada de temperatura ambiente.
Entrada de ajuste mínimo de temperatura.
Salidas.
Entrada de temperatura ambiente.
La manera de conectar la NTC a nuestro circuito va a ser formando un divisor de tensión
con su salida a una entrada analógica, en el que nuestra NTC será la resistencia inferior,
En cuanto a la otra resistencia que formará el divisor de tensión, utilizaremos una de 1KΩ,
esto es así para aprovechar el rango de muestreo que nos proporciona Arduino con un
consumo de corriente limitado.
Veremos que si la resistencia máxima de nuestra NTC va a ser 10KΩ, y la fija de 1KΩ,
tendremos una variación de tensión entre 0v y 4,55v.
Entrada de ajuste mínimo de temperatura.
Para tener un mando sobre el que ajustar la temperatura mínima, simplemente
colocaremos un potenciómetro dispuesto como divisor de tensión, a una de las entradas
analógicas y utilizaremos su muestreo para mapearlo a nuestro antojo como veremos en
la sección de programación.
Salidas.
Para las salidas utilizaremos la ya conocida configuración de LED más resistencia.
De manera que el esquema eléctrico global nos quedaría así:
4.
PROGRAMACIÓN:
/*
SENSOR DE TEMPERATURA NTC
*/
//Añadimos la librería math.h
#include <math.h>
//Pines para los LED
int pinLed1 = 8;
int pinLed2 = 9;
int pinLed3 = 10;
int pinLed4 = 11;
int pinLed5 = 12;
int i=0;
//Pines para las entradas analógicas
int analogPin1 = 0;
int analogPin2 = 1;
//Escala de Avisos
int escala = 2;
//Variable para la temperatura de disparo
double tempMin = 0.0;
//Datos para las ecuaciones
float Vin = 5.0; // [V]
Tensión alimentación del divisor
float Rfija = 1000; // [ohm] Resistencia fija del divisor
float R25 = 10000; // [ohm] Valor de NTC a 25ºC
float Beta = 3900.0; // [K]
Parámetro Beta de NTC
float T0 = 298.15; // [K]
Temperatura de referencia en Kelvin
float Vout = 0.0; // [V]
Variable para almacenar Vout
float Rntc = 0.0; // [ohm] Variable para NTC en ohmnios
float TempK = 0.0; // [K]
Temperatura salida en Kelvin
float TempC = 0.0; // [ºC] Temperatura salida en Celsius
void setup() {
//Comenzamos la comunicación puerto serie
Serial.begin(9600);
void config_Stamplot();
//Declaramos pines de salida
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
//Y los pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
}
void config_StampPlot()
{
//CONFIGURACION STAMP PLOT LITE
// Stamp Plot Software
// http://www.parallax.com/ProductInfo/Microcontrollers/BASICStampSoftware/StampPlotSoftware/tabid/481/Default.aspx
//---------------------------------------------------------//Titulo de la ventana (FORM)
Serial.print("!TITL proyecto !");
Serial.write(13);
//Titulo de usuario (STATUS)
Serial.print("!USRS Sensor de temperatura");
Serial.write(13);
//Valor maximo del eje Y
Serial.print("!AMAX 50");
Serial.write(13);
//Valor minimo del eje Y
Serial.print("!AMIN 0");
Serial.write(13);
//Valor maximo de tiempo
Serial.print("!TMAX 100");
Serial.write(13);
//Configuro el numero de puntos
Serial.print("!PNTS 500");
Serial.write(13);
//Añadir Tiempo en la lista de mensajes
Serial.print("!TSMP ON");
Serial.write(13);
//Plot ON
Serial.print("!PLOT ON");
Serial.write(13);
//Borra el valor Max y Min almacenado despues del RESET
Serial.print("!CLMM");
Serial.write(13);
//Limpio la lista de mensajes
Serial.print("!CLRM");
Serial.write(13);
//Borro el fichero stampdat.txt
Serial.print("!DELD");
Serial.write(13);
//Borro el fichero stampmsg.txt
Serial.print("!DELM");
Serial.write(13);
//Salvar datos Analogicos y digitales en proyecto.txt
Serial.print("!SAVD ON");
Serial.write(13);
//Salvar Mensajes en proyecto.txt
Serial.print("proyecto.txt");
Serial.write(13);
//RESET DEL GRAFICO PARA COMENZAR A PLOTEAR
Serial.print("!RSET");
Serial.write(13);
//---------------------------------------------------------}
void loop()
{
i=i+1;
//Primero leemos el pootenciómetro
tempMin = analogRead(analogPin2);
//Lo mapeamos a valores de O a 40 grados)
tempMin = map (tempMin, 0, 1023, 0, 400000);
//Y lo dividimos entre 10000 para darle 4 decimales
tempMin = tempMin/10000;
//Y lanzamos el ajuste establecido via serie
Serial.println("-----------------------------------------------");
Serial.println();
Serial.print("AJUSTE DE TEMPERATURA MINIMA A ");
Serial.print(tempMin,4);
Serial.print(" GRADOS CELSIUS");
Serial.println();
Serial.println("-----------------------------------------------");
//Y ahora calculamos la Temperatura
//Primero la Vout del divisor
Vout=(Vin/1024)*(analogRead(analogPin1));
//Ahora la resistencia de la NTC
Rntc=(Vout*Rfija)/(Vin-Vout);
//Y por último la temperatura en Kelvin
TempK = Beta/(log(Rntc/R25)+(Beta/T0));
//Y ahora la pasamos a celsius
TempC = TempK-273.1500;
Serial.print(TempC);
Serial.write(13);
//Envio de cualquier cadena a mostrar
Serial.print("toma numero: ");
Serial.print(i);
Serial.write(13);
//Y lo mostramos por puerto serie
Serial.println();
Serial.print("LA TEMPERATURA DE LA NTC ES DE ");
Serial.print(TempC,4);
Serial.print(" GRADOS CELSIUS");
Serial.println();
//Ahora las comparaciones para las salidas
if(TempC < tempMin)
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if (((TempC <= (tempMin + escala)) & (TempC > tempMin)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if (((TempC<=(tempMin+(escala*2)))&(TempC>tempMin+escala)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if ((TempC<=(tempMin+(escala*3)))&(TempC>tempMin+(escala*2)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, LOW);
}
else if (TempC > (tempMin + (escala*4)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, HIGH);
}
//Un pequeño delay para no volver loco al puerto serie
delay(1000);
}
CÁLCULO DE TEMPERATURA A PARTIR DE LA MEDIDA ANALÓGICA.
Teniendo en cuenta que el fabricante nos da el valor resistivo para una temperatura en
concreto (en nuestro caso 10000Ω para 25º) y la Beta (3900 entre 0°C y 50°C) podemos
utilizar la ecuación que relaciona la resistencia de la NTC y la temperatura para calcular
esta última, primero veamos la ecuación:






Siendo:
Rt = Resistencia a temperatura T en grados Kelvin (k = ºC + 273,15)
Ro = Resistencia de referencia a una temperatura To en Kelvin.
B = Valor Beta de nuestra NTC.
To = Temperatura de referencia en Kelvin.
T = Temperatura a medir.
Observamos que, si calculamos Rt, tendremos todos los datos para hallar la temperatura
en un valor de resistencia determinado despejando T, veamos la ecuación despejada que
utilizaremos en nuestro programa:
Bien, ya tenemos la ecuación para hallar la temperatura, pero nos faltaría saber cual es la
resistencia de la NTC, para esto primero calcularemos cual es la tensión de entrada de
nuestra entrada analógica, es decir, la Vout de nuestro divisor de tensión:
Con esto hallamos cuanto vale cada bit de la conversión analógico-digital y lo
multiplicamos por la cantidad de bit que nos lee la entrada analógica, con lo que tenemos
la tensión que le está llegando a la entrada analógica.
Una vez tenemos esto, si recordamos la fórmula del divisor de tensión:
Vemos que tenemos todos los datos a excepción de Rinferior, que es justo la resistencia
de la NTC que necesitamos para calcular la temperatura, por lo que despejando nos
queda:
5. BIBLIOGRAFÍA

http://mx.mouser.com/ProductDetail/GE-Sensing/RL0503-5820-97MS/?qs=Vo7DmvLbx%2f%2firrHChPQeLw%3d%3d RL0503-5820-97-MS

http://www.thermometrics.com/assets/images/ms.pdf NTC THERMISTORS: TYPE MS

http://www.thermometrics.com/assets/images/d9_7a.pdf MATERIAL TYPE: D9.7A

http://www.arduteka.com/ Arduino Uno
Descargar