Sensor de temperatura basado en una resistencia NTC

Anuncio
Sensor de temperatura basado en una resistencia NTC
Heiner Bello, Felipe Patiño, Lina Santana, Lina Soler
Universidad Nacional de Colombia
Bogotá D. C. Colombia
[email protected]
[email protected]
[email protected]
[email protected]
Abstract- This document shows the design
and construction of a temperature sensor based
on an NTC. We will see design, hardware and
software and some applications you may have
this sensor. This document can be interpreted as
a guide for anyone interested in having your own
temperature sensor.
I. INTRODUCCIÓN
Existen varias maneras de construir un sensor de
temperatura, sin embargo un sensor basado en una
NTC es un sensor muy completo y su construcción
es simple. Una resistencia NTC es aquella que tiene
un coeficiente de temperatura negativo respecto a la
variación de su resistencia, esto quiere decir que a
mayor temperatura, menos resistencia existirá y más
corriente fluirá. Basados en esa corriente o voltaje,
se determina a qué temperatura esta el NTC.
El proyecto está dividido en 3 partes: el hardware, el
software y la baquela y su caja de protección.
II.
LA NTC
Cuando se tienen estos datos, se utiliza la ecuación
anterior para calcular la resistencia en una
temperatura en particular:
𝑅𝑇 = 𝑅0 𝑒
1 1
(𝐵( − ))
𝑇 𝑇0
Donde:





RT= Resistencia a temperatura T en grados
Kelvin
Ro= Resistencia de referencia a una
temperatura T en Kelvin.
B = Valor Beta de la NTC.
T0= Temperatura de referencia en Kelvin.
T = Temperatura a medir.
Con esta ecuación, también se puede saber cuál será
la resistencia máxima que nos va a dar nuestra NTC
al calcular su curva característica, lo que sirve para
diseñar el divisor de tensión. A continuación se
muestra el gráfico de la curva característica de una
NTC de 10 K ohmios:
La relación entre la resistencia y la temperatura en la
NTC no es lineal sino exponencial. Dicha relación
cumple con la fórmula siguiente:
𝐵
𝑅 = 𝐴 ∗ 𝑒𝑇
Donde A y B son constantes que dependen del
resistor. Estas constantes están dadas por el
fabricante y se encuentran en el datasheet disponible
en la web. Las constantes A y B son:


A: El valor resistivo para una temperatura en
concreto (en este caso de ejemplo 2800Ω para
25º).
B: La Beta (Temperatura característica del
material entre 2000K y 4000K).
Figura 1: Curva característica para una NTC de 10KΩ
La NTC puede medir temperaturas desde -30 hasta
130 grados centígrados según los datos del
fabricante encontrados en el datasheet disponible en
la WEB.
III. HARDWARE
Los elementos necesarios para construir el hardware
del sensor son:
analógica, utilizando su muestreo para establecer la
temperatura crítica de las salidas. Ésta parte se
especifica en la parte del software.
C. Salidas
1 Arduino UNO
1 Protoboard
1 NTC
1 Potenciómetro de 10K ohmios
5 diodos LED
5 Resistencias 220 ohmios
1 Resistencia 1 K ohmios.
Cables
Caja de protección
Para las salidas se utilizan los LEDS y las
resistencias de 220 ohmios con el fin de limitar la
corriente y que los LEDS no se quemen.
Este es el circuito esquemático del sensor:
Por medio de la NTC se activan las 5 salidas del
Arduino, cada una con un LED para mostrar los
diferentes niveles de temperatura. La primera salida
muestra que la temperatura está por debajo de la
temperatura crítica la cual se ajusta con el
potenciómetro. Las siguientes 4 salidas se irán
activando a medida que la temperatura suba 2 °C
(ésta se puede ajustar de la manera que uno quiera
en la parte del Software).
El circuito está estructurado en 3 partes:
Figura 3: Esquema del circuito del sensor de temperatura
A. Entrada de temperatura ambiente.
La NTC se conecta en paralelo con otra resistencia
para tener un divisor de corriente el cual nos permite
controlar el voltaje de entrada del circuito además de
eliminar el problema de la no linealidad (cuando la
corriente en la NTC es muy alta, se disipará en calor
y su medición de temperatura no será confiable.)
Es importante probar el circuito en una Protoboard
antes de tener el circuito impreso en una baquela ya
que si existen problemas de conexión, estos se
pueden corregir en la Protoboard. A continuación se
muestra las conexiones de ejemplo del sensor en la
Protoboard:
Diagrama del divisor de voltaje:
Figura 2: Diagrama de un divisor de tensión
B.
Entrada de ajuste mínimo de temperatura
Para tener un control para ajustar la temperatura
mínima, simplemente se coloca un potenciómetro
dispuesto como divisor de voltaje, a la entrada
Figura 4: Sensor de temperatura utilizando una Protoboard
IV. SOFTWARE
El programa que se utiliza para programar el
Arduino se encuentra en la web en la página oficial
del Arduino. El código de programación se anexa al
final del software. A continuación se explicará de
forma detallada el código:
#include <math.h>
La librería math.h posee las funciones que
necesitamos para el programa. El #include nos
importa estas funciones.
Se definen los pines de entrada y salida
//Pines para los LED
int pinLed1 = 8;
int pinLed2 = 9;
int pinLed3 = 10;
int pinLed4 = 11;
int pinLed5 = 12;
//Pines para las entradas
analógicas
int analogPin1 = 0;
int analogPin2 = 1;
Se declara la variable “escala” como entero:
int escala = 2;
Esta variable se utiliza para establecer el intervalo
entre las alarmas, es decir, si se pone una
temperatura de disparo de 20ºC, con una escala de 2
la primera alarma será a 20º, la segunda a 22º, la
tercera a 24º, etc. Si se coloca una escala de 5 con
una temperatura de 15°C, la primera alarma será a
15°, la segunda a 20°, la tercera a 25°, etc.
Se introducen los datos para hacer las ecuaciones
que nos permitirán, en base a la lectura de la entrada
analógica conectada al divisor de tensión, calcular la
temperatura.
float Vin = 5.0;
// [V]
Tensión alimentación del divisor
float Rfija = 1000; // [ohm]
Resistencia fija del divisor
float R25 = 2800;
// [ohm]
Valor de NTC a 25ºC
float Beta = 3900.0; // [K]
Parámetro Beta de NTC
float T0 = 293.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
Temperatura
float TempC
Temperatura
= 0.0;
// [K]
salida en Kelvin
= 0.0;
// [ºC]
salida en Celsius
La variable de tipo “float” es para los números en
coma
flotante
(número
decimal),
estas
variables tienen un valor máximo 3.4028235E+38, y
como mínimo -3.4028235E+38. Ocupan 4bytes
(32bits) con una resolución mucho mayor que los
enteros, lo que permite hacer cálculos bastante
precisos, se debe tener en cuenta no olvidar la coma
en los números de la operación, de manera que se
evitan errores de interpretación en el programa.
En cuanto a los parámetros se necesitan conocer los
2 datos de la NTC que vendrán dispuestos en el
datasheet, una resistencia de referencia a una
temperatura determinada, en este caso de ejemplo
2800Ω a 25º y la Beta de 3950 K.
Una vez finalizada la declaración de variables
globales, se “configura” el setup
Serial.begin(9600);
Esta instrucción inicializa la comunicación puerto
serie desde Arduino al PC a una velocidad de 9600
baudios (bits por segundo), con esto, cualquier cosa
que se envía se visualiza en el monitor de puerto
serie del software de Arduino
Figura 5: Herramienta Monitor Serial para visualizar la
temperatura en el PC
Se declaran los pines de entrada y los pines de salida
//Declaración de
pinMode(pinLed1,
pinMode(pinLed2,
pinMode(pinLed3,
pinMode(pinLed4,
pinMode(pinLed5,
pines de salida
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
//Declaración pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
Se comienza el bucle, en primer lugar se lee la señal
del potenciómetro para establecer una temperatura
de referencia sobre la que comparar la temperatura
de la NTC y disparar los avisos. Se lee el valor del
pin analógico 2 y lo se almacena en tempMin:
tempMin = analogRead(analogPin2);
A continuación se tiene una nueva instrucción:
tempMin = map (tempMin, 0, 1023,
-100, 800);
La función map tiene la siguiente estructura:
map(valor, fromLow, fromHigh, toLow, toHigh)
Esta estructura convierte los calores que van de 0 a
1023 en valores escalonados y proporcionados desde
-100 has 800. Con esto se adapta la lectura del
potenciómetro a un rango de -100 a 800, Luego se
divide este valor en 10
tempMin = tempMin/10;
La temperatura que se devuelve es la de referencia o
crítica y está entre -10.0º y +80.0º,. La temperatura
de disparo se puede ajustar con una precisión de
0.1°.
Se manda por el puerto serie el dato prefijado para
tener una referencia visual del mismo.
Serial.println("----------------------------------------------");
Serial.println();
Serial.print("AJUSTE DE
TEMPERATURA MINIMA A ");
Serial.print(tempMin);
Serial.println(" GRADOS
CELSIUS");
Serial.println();
Serial.println("----------------------------------------------");
El Serial.println() envia por puerto serie cualquier
cosa que se incluya dentro de ( ), si es una variable,
con poner el nombre de la variable es suficiente,
como se puede ver con tempMin, pero también se
puede mandar cualquier texto, siempre que se
incluya entre comillas.
//Y por último la temperatura en
Kelvin
TempK =
Beta/(log(Rntc/R25)+(Beta/T0));
//Ahora la pasamos a celsius
TempC = TempK-273.15;
Se envían por el puerto serie:
Serial.println();
Serial.print("LA TEMPERATURA DE
LA NTC ES DE ");
Serial.print(TempC);
Serial.println(" GRADOS
CELSIUS");
Serial.println();
El delay que se pone al final es para que mande los
datos de temperatura 500 milisegundos por el puerto
serie.
delay(500);
V. BAQUELA Y CAJA DE
PROTECCIÓN
Esta parte del sensor es opcional, ya que no se puede
hacer en casa como las demás partes del sensor y no
es necesaria para su funcionamiento además de
requerir conocimientos en programas de diseño de
circuitos. Para pasar el circuito de la Protoboard a un
circuito impreso es necesario tener un software de
diseño de circuitos, como PROTEUS, ORCAD,
MULTISIM etc.
En el software se diseña el circuito del sensor, en
este caso de ejemplo se utilizo el programa
PROTEUS, lo importante no es tener los mismos
componentes del circuito sino tener componentes en
el diseño con los mismos puertos que tienen los
componentes físicos ya que no siempre se pueden
simular los componentes del diseño en físico, como
es el caso de los LEDs o el potenciómetro.
Diseño en ISIS del circuito:
Se introducen las funciones que calcularán la
temperatura de la NTC
//Primero la Vout del divisor
Vout=(Vin/1024)*(analogRead(analogP
in1));
//Ahora la resistencia de la NTC
Rntc=(Vout*Rfija)/(Vin-Vout);
Figura 6: Diseño del circuito del sensor en ISIS
Ahora se debe utilizar la herramienta “Netlist
Transfer to Ares” ubicada en la parte superior
derecha
introducir el circuito con el Arduino y tener listo el
sensor de temperatura. A continuación un ejemplo
de cómo puede quedar un sensor de temperatura
basado en una NTC utilizando esta guía:
Se Abre el programa Ares donde se sacará el circuito
impreso para la baquela. Se puede ajustar los
elementos de manera subjetiva o el programa los
puede ubicar en el sitio más apropiado. Luego de
ubicar los elementos de la manera que uno quiera se
inicia la herramienta Auto-router
el cual
organiza las pistas del circuito de la mejor forma:
Figura 9: Sensor de temperatura parte inferior
Figura 7: Diseño del circuito del sensor en ARES para la
impresión de la baquela
Se debe imprimir el diseño del circuito para poder
imprimir la baquela y tener el circuito listo para
soldar. Una forma de imprimir el circuito es con el
programa libre PDFCreator disponible en la Web (el
diseño de éste circuito es un ejemplo, puede ser
acomodado como se requiera).
Figura 8: Circuito impreso del sensor de temperatura para la
impresión en la baquela
Ya con el circuito impreso se puede mandar a
imprimir en una baquela en cualquier tienda
electrónica de la ciudad, en Bogotá las tiendas de
componentes electrónicos se encuentran en la calle
19 con avenida novena.
Luego de soldar los componentes se puede comprar
una caja de plástico y de acuerdo al diseño,
Figura 10: Sensor de temperatura parte superior
VI. COSTOS
Los costos de todo el sensor del ejemplo son:
1 Arduino UNO
1Cable Arduino
1 NTC
1 Potenciómetro de 10K ohmios
5 diodos LED
6 Resistencias
Cables de conexión
Caja de protección
Baquela
$70 000
$7 000
$4 000
$500
$500
$300
$ 6 000
$ 6 000
$ 9 000
Total
$103 300
Herramientas que se utilizaron:
Protoboard
Alicates
Estaño y crema para soldar
Cautín
Bisturí
VII. APLICACIONES
El sensor de temperatura tiene muchas aplicaciones,
como por ejemplo medir la temperatura ambiental de
manera permanente o estacional gracias a que los
datos se pueden ver en un computador y ser
almacenados con el fin de sacar un promedio de
temperaturas, así, se puede hacer un historial de
temperaturas del tiempo que se requiera.
Si se necesita mandar los datos a un lugar lejano, por
medio del internet la temperatura medida se podrá
ver en cualquier lugar del mundo. Existen varios
lugares en los cuales se necesita saber la temperatura
ambiente como en hospitales, salas de recuperación,
en cocinas y restaurantes, en un laboratorio, un
invernadero, bodegas, entre muchos otros lugares.
Otra aplicación muy importante es la medición de la
temperatura de algún equipo o material. Cuando los
equipos de algún proceso ya sea de industria o de
otro tipo se sobrecalientan o no trabajan a la
temperatura que se requiere su vida útil se verá
afectada, por lo que un sensor de temperatura es
indispensable
para
garantizar
el
buen
funcionamiento del equipo o del material.
RECONOCIMIENTOS
Se le agradece al profesor Jaime Villalobos (Phd)
por su gran motivación la cual permitió que este
proyecto se hiciera realidad
VIII.
REFERENCIAS
[1]
(2012) Sensores de temperatura. [Online]. Disponible
en: http://www.antirrobo.net/sensores/sensores-de-temperatura.
html
[2]
(2012) formato IEEE para presentar artículos.
[Online]. Disponible en http://www.cidca.edu.co/Formato_IEEE/
Formato _Articulos_IEEE.pdf
[3]
R. C. Dorf y J. A. Svodoba. Circuitos eléctricos, sexta
edición. 2006
Código completo del programa:
/*
Sensor NTC
Se conecta una NTC a una entrada
analógica para controlar cinco salidas
en función de la temperatura.
Se utiliza un potenciómetro para
controlar la temperatura a partir de la cual
se activarán las salidas
*/
//Se añade la librería math.h
#include <math.h>
//Pines para
int pinLed1 =
int pinLed2 =
int pinLed3 =
int pinLed4 =
int pinLed5 =
los LED
8;
9;
10;
11;
12;
//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
float
float
float
float
Vin = 5.0;
Rfija = 1000;
R25 = 2800;
Beta = 3900.0;
T0 = 293.15;
// [V]
// [ohm]
// [ohm]
// [K]
// [K]
Tensión alimentación del divisor
Resistencia fija del divisor
Valor de NTC a 25ºC
Parámetro Beta de NTC
Temperatura de referencia en Kelvin
float Vout = 0.0;
float Rntc = 0.0;
// [V]
// [ohm]
Variable para almacenar Vout
Variable para NTC en ohmnios
float TempK = 0.0;
float TempC = 0.0;
// [K]
// [ºC]
Temperatura salida en Kelvin
Temperatura salida en Celsius
void setup() {
//Comienza la comunicación puerto serie
Serial.begin(9600);
//Declaración de
pinMode(pinLed1,
pinMode(pinLed2,
pinMode(pinLed3,
pines de salida
OUTPUT);
OUTPUT);
OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
//Declaración pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
}
void loop()
{
//Se lee el potenciómetro
tempMin = analogRead(analogPin2);
//Se mapea a valores de -100 a 800
tempMin = map (tempMin, 0, 1023, -100, 800);
//Se divide entre 10 para darle un decimal
tempMin = tempMin/10;
//Se lanza el ajuste establecido vía serie
Serial.println("-----------------------------------------------");
Serial.println();
Serial.print("AJUSTE DE TEMPERATURA MINIMA A ");
Serial.print(tempMin);
Serial.println(" GRADOS CELSIUS");
Serial.println();
Serial.println("-----------------------------------------------");
//Se calcula 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));
//de kelvin a Celsius
TempC = TempK-273.15;
//se muestra por puerto serie
Serial.println();
Serial.print("LA TEMPERATURA DE LA NTC ES DE ");
Serial.print(TempC);
Serial.println(" 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 delay para fijar el tiempo de muestra en el puerto, en este caso son
500 milisegundos
delay(500);
}
Descargar