Вы находитесь на странице: 1из 9

Sensor de temperatura basado en una resistencia NTC

Heiner Bello, Felipe Patio, Lina Santana, Lina Soler


Universidad Nacional de Colombia
Bogot D. C. Colombia
hobellot@unal.edu.co
lfpatinoo@unal.edu.co
ljsantanam@unal.edu.co
lpsolerf@unal.edu.co

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. INTRODUCCIN
Existen varias maneras de construir un sensor de
temperatura, sin embargo un sensor basado en una
NTC es un sensor muy completo y su construccin
es simple. Una resistencia NTC es aquella que tiene
un coeficiente de temperatura negativo respecto a la
variacin de su resistencia, esto quiere decir que a
mayor temperatura, menos resistencia existir y ms
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 proteccin.
II. LA NTC
La relacin entre la resistencia y la temperatura en la
NTC no es lineal sino exponencial. Dicha relacin
cumple con la frmula siguiente:


Donde A y B son constantes que dependen del
resistor. Estas constantes estn 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 caracterstica del
material entre 2000K y 4000K).
Cuando se tienen estos datos, se utiliza la ecuacin
anterior para calcular la resistencia en una
temperatura en particular:

((

))

Donde:
R
T
= Resistencia a temperatura T en grados
Kelvin
R
o
= Resistencia de referencia a una
temperatura T en Kelvin.
B = Valor Beta de la NTC.
T
0
= Temperatura de referencia en Kelvin.
T = Temperatura a medir.
Con esta ecuacin, tambin se puede saber cul ser
la resistencia mxima que nos va a dar nuestra NTC
al calcular su curva caracterstica, lo que sirve para
disear el divisor de tensin. A continuacin se
muestra el grfico de la curva caracterstica de una
NTC de 10 K ohmios:

Figura 1: Curva caracterstica para una NTC de 10K
La NTC puede medir temperaturas desde -30 hasta
130 grados centgrados segn los datos del
fabricante encontrados en el datasheet disponible en
la WEB.

III. HARDWARE
Los elementos necesarios para construir el hardware
del sensor son:
1 Arduino UNO
1 Protoboard
1 NTC
1 Potencimetro de 10K ohmios
5 diodos LED
5 Resistencias 220 ohmios
1 Resistencia 1 K ohmios.
Cables
Caja de proteccin
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 crtica la cual se ajusta con el
potencimetro. Las siguientes 4 salidas se irn
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:
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 adems de
eliminar el problema de la no linealidad (cuando la
corriente en la NTC es muy alta, se disipar en calor
y su medicin de temperatura no ser confiable.)
Diagrama del divisor de voltaje:

Figura 2: Diagrama de un divisor de tensin

B. Entrada de ajuste mnimo de temperatura
Para tener un control para ajustar la temperatura
mnima, simplemente se coloca un potencimetro
dispuesto como divisor de voltaje, a la entrada
analgica, utilizando su muestreo para establecer la
temperatura crtica de las salidas. sta parte se
especifica en la parte del software.
C. Salidas
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 esquemtico del sensor:

Figura 3: Esquema del circuito del sensor de temperatura
Es importante probar el circuito en una Protoboard
antes de tener el circuito impreso en una baquela ya
que si existen problemas de conexin, estos se
pueden corregir en la Protoboard. A continuacin se
muestra las conexiones de ejemplo del sensor en la
Protoboard:

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 pgina oficial
del Arduino. El cdigo de programacin se anexa al
final del software. A continuacin se explicar de
forma detallada el cdigo:
#include <math.h>
La librera 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
analgicas
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 20C, 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 15C, 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 permitirn, en base a la lectura de la entrada
analgica conectada al divisor de tensin, calcular la
temperatura.
float Vin = 5.0; // [V]
Tensin alimentacin del divisor
float Rfija = 1000; // [ohm]
Resistencia fija del divisor
float R25 = 2800; // [ohm]
Valor de NTC a 25C
float Beta = 3900.0; // [K]
Parmetro 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 = 0.0; // [K]
Temperatura salida en Kelvin
float TempC = 0.0; // [C]
Temperatura salida en Celsius
La variable de tipo float es para los nmeros en
coma flotante (nmero decimal), estas
variables tienen un valor mximo 3.4028235E+38, y
como mnimo -3.4028235E+38. Ocupan 4bytes
(32bits) con una resolucin mucho mayor que los
enteros, lo que permite hacer clculos bastante
precisos, se debe tener en cuenta no olvidar la coma
en los nmeros de la operacin, de manera que se
evitan errores de interpretacin en el programa.
En cuanto a los parmetros se necesitan conocer los
2 datos de la NTC que vendrn 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 declaracin de variables
globales, se configura el setup
Serial.begin(9600);
Esta instruccin inicializa la comunicacin puerto
serie desde Arduino al PC a una velocidad de 9600
baudios (bits por segundo), con esto, cualquier cosa
que se enva 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
//Declaracin de pines de salida
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);

//Declaracin pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
Se comienza el bucle, en primer lugar se lee la seal
del potencimetro 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 analgico 2 y lo se almacena en tempMin:

tempMin = analogRead(analogPin2);
A continuacin se tiene una nueva instruccin:
tempMin = map (tempMin, 0, 1023,
-100, 800);
La funcin 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
potencimetro 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
crtica y est entre -10.0 y +80.0,. La temperatura
de disparo se puede ajustar con una precisin 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 tambin se
puede mandar cualquier texto, siempre que se
incluya entre comillas.
Se introducen las funciones que calcularn 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);

//Y por ltimo la temperatura en
Kelvin
TempK =
Beta/(log(Rntc/R25)+(Beta/T0));

//Ahora la pasamos a celsius
TempC = TempK-273.15;
Se envan 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
PROTECCIN
Esta parte del sensor es opcional, ya que no se puede
hacer en casa como las dems partes del sensor y no
es necesaria para su funcionamiento adems de
requerir conocimientos en programas de diseo de
circuitos. Para pasar el circuito de la Protoboard a un
circuito impreso es necesario tener un software de
diseo de circuitos, como PROTEUS, ORCAD,
MULTISIM etc.
En el software se disea 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 diseo con los mismos puertos que tienen los
componentes fsicos ya que no siempre se pueden
simular los componentes del diseo en fsico, como
es el caso de los LEDs o el potencimetro.
Diseo en ISIS del circuito:

Figura 6: Diseo del circuito del sensor en I SI S
Ahora se debe utilizar la herramienta Netlist
Transfer to Ares ubicada en la parte superior
derecha
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 ms 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 7: Diseo del circuito del sensor en ARES para la
impresin de la baquela
Se debe imprimir el diseo 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
diseo de ste circuito es un ejemplo, puede ser
acomodado como se requiera).

Figura 8: Circuito impreso del sensor de temperatura para la
impresin en la baquela
Ya con el circuito impreso se puede mandar a
imprimir en una baquela en cualquier tienda
electrnica de la ciudad, en Bogot las tiendas de
componentes electrnicos se encuentran en la calle
19 con avenida novena.
Luego de soldar los componentes se puede comprar
una caja de plstico y de acuerdo al diseo,
introducir el circuito con el Arduino y tener listo el
sensor de temperatura. A continuacin un ejemplo
de cmo puede quedar un sensor de temperatura
basado en una NTC utilizando esta gua:

Figura 9: Sensor de temperatura parte inferior

Figura 10: Sensor de temperatura parte superior

VI. COSTOS
Los costos de todo el sensor del ejemplo son:
1 Arduino UNO $70 000
1Cable Arduino $7 000
1 NTC $4 000
1 Potencimetro de 10K ohmios $500
5 diodos LED $500
6 Resistencias $300
Cables de conexin $ 6 000
Caja de proteccin $ 6 000
Baquela $ 9 000
Total $103 300
Herramientas que se utilizaron:
Protoboard
Alicates
Estao y crema para soldar
Cautn
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 recuperacin,
en cocinas y restaurantes, en un laboratorio, un
invernadero, bodegas, entre muchos otros lugares.
Otra aplicacin muy importante es la medicin de la
temperatura de algn equipo o material. Cuando los
equipos de algn 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 motivacin 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 artculos.
[Online]. Disponible en http://www.cidca.edu.co/Formato_IEEE/
Formato _Articulos_IEEE.pdf
[3] R. C. Dorf y J. A. Svodoba. Circuitos elctricos, sexta
edicin. 2006



































































































Cdigo completo del programa:

/*
Sensor NTC

Se conecta una NTC a una entrada
analgica para controlar cinco salidas
en funcin de la temperatura.

Se utiliza un potencimetro para
controlar la temperatura a partir de la cual
se activarn las salidas

*/

//Se aade la librera math.h
#include <math.h>

//Pines para los LED
int pinLed1 = 8;
int pinLed2 = 9;
int pinLed3 = 10;
int pinLed4 = 11;
int pinLed5 = 12;

//Pines para las entradas analgicas
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] Tensin alimentacin del divisor
float Rfija = 1000; // [ohm] Resistencia fija del divisor
float R25 = 2800; // [ohm] Valor de NTC a 25C
float Beta = 3900.0; // [K] Parmetro 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 = 0.0; // [K] Temperatura salida en Kelvin
float TempC = 0.0; // [C] Temperatura salida en Celsius

void setup() {

//Comienza la comunicacin puerto serie
Serial.begin(9600);

//Declaracin de pines de salida
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);

//Declaracin pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);

}

void loop()
{
//Se lee el potencimetro
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 va 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);
}

Вам также может понравиться