Вы находитесь на странице: 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 Cuando se tienen estos datos, se utiliza la ecuacin
and construction of a temperature sensor based anterior para calcular la resistencia en una
on an NTC. We will see design, hardware and temperatura en particular:
software and some applications you may have
this sensor. This document can be interpreted as 1 1
(( ))
a guide for anyone interested in having your own 0
= 0
temperature sensor.
Donde:
I. INTRODUCCIN

Existen varias maneras de construir un sensor de RT= Resistencia a temperatura T en grados


temperatura, sin embargo un sensor basado en una Kelvin
NTC es un sensor muy completo y su construccin Ro= Resistencia de referencia a una
es simple. Una resistencia NTC es aquella que tiene temperatura T en Kelvin.
un coeficiente de temperatura negativo respecto a la B = Valor Beta de la NTC.
variacin de su resistencia, esto quiere decir que a T0= Temperatura de referencia en Kelvin.
mayor temperatura, menos resistencia existir y ms T = Temperatura a medir.
corriente fluir. Basados en esa corriente o voltaje,
se determina a qu temperatura esta el NTC. Con esta ecuacin, tambin se puede saber cul ser
la resistencia mxima que nos va a dar nuestra NTC
El proyecto est dividido en 3 partes: el hardware, el al calcular su curva caracterstica, lo que sirve para
software y la baquela y su caja de proteccin. disear el divisor de tensin. A continuacin se
muestra el grfico de la curva caracterstica de una
II. LA NTC NTC de 10 K ohmios:

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 Figura 1: Curva caracterstica para una NTC de 10K
concreto (en este caso de ejemplo 2800 para
25). La NTC puede medir temperaturas desde -30 hasta
B: La Beta (Temperatura caracterstica del 130 grados centgrados segn los datos del
material entre 2000K y 4000K). fabricante encontrados en el datasheet disponible en
la WEB.
III. HARDWARE analgica, utilizando su muestreo para establecer la
temperatura crtica de las salidas. sta parte se
Los elementos necesarios para construir el hardware especifica en la parte del software.
del sensor son:
C. Salidas
1 Arduino UNO
1 Protoboard Para las salidas se utilizan los LEDS y las
1 NTC resistencias de 220 ohmios con el fin de limitar la
1 Potencimetro de 10K ohmios corriente y que los LEDS no se quemen.
5 diodos LED
5 Resistencias 220 ohmios Este es el circuito esquemtico del sensor:
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:
Figura 3: Esquema del circuito del sensor de temperatura
A. Entrada de temperatura ambiente.
Es importante probar el circuito en una Protoboard
La NTC se conecta en paralelo con otra resistencia antes de tener el circuito impreso en una baquela ya
para tener un divisor de corriente el cual nos permite que si existen problemas de conexin, estos se
controlar el voltaje de entrada del circuito adems de pueden corregir en la Protoboard. A continuacin se
muestra las conexiones de ejemplo del sensor en la
eliminar el problema de la no linealidad (cuando la
Protoboard:
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 Figura 4: Sensor de temperatura utilizando una Protoboard
dispuesto como divisor de voltaje, a la entrada
IV. SOFTWARE float Rntc = 0.0; // [ohm]
Variable para NTC en ohmnios
El programa que se utiliza para programar el
Arduino se encuentra en la web en la pgina oficial float TempK = 0.0; // [K]
del Arduino. El cdigo de programacin se anexa al Temperatura salida en Kelvin
final del software. A continuacin se explicar de float TempC = 0.0; // [C]
forma detallada el cdigo: Temperatura salida en Celsius

#include <math.h> La variable de tipo float es para los nmeros en


coma flotante (nmero decimal), estas
La librera math.h posee las funciones que variables tienen un valor mximo 3.4028235E+38, y
necesitamos para el programa. El #include nos como mnimo -3.4028235E+38. Ocupan 4bytes
importa estas funciones. (32bits) con una resolucin mucho mayor que los
enteros, lo que permite hacer clculos bastante
Se definen los pines de entrada y salida precisos, se debe tener en cuenta no olvidar la coma
en los nmeros de la operacin, de manera que se
//Pines para los LED evitan errores de interpretacin en el programa.
int pinLed1 = 8;
int pinLed2 = 9; En cuanto a los parmetros se necesitan conocer los
int pinLed3 = 10; 2 datos de la NTC que vendrn dispuestos en el
int pinLed4 = 11; datasheet, una resistencia de referencia a una
int pinLed5 = 12; temperatura determinada, en este caso de ejemplo
2800 a 25 y la Beta de 3950 K.
//Pines para las entradas
analgicas Una vez finalizada la declaracin de variables
int analogPin1 = 0; globales, se configura el setup
int analogPin2 = 1;
Serial.begin(9600);
Se declara la variable escala como entero:
Esta instruccin inicializa la comunicacin puerto
int escala = 2; serie desde Arduino al PC a una velocidad de 9600
baudios (bits por segundo), con esto, cualquier cosa
Esta variable se utiliza para establecer el intervalo que se enva se visualiza en el monitor de puerto
entre las alarmas, es decir, si se pone una serie del software de Arduino
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 Figura 5: Herramienta Monitor Serial para visualizar la
15, la segunda a 20, la tercera a 25, etc. temperatura en el PC

Se introducen los datos para hacer las ecuaciones Se declaran los pines de entrada y los pines de salida
que nos permitirn, en base a la lectura de la entrada
analgica conectada al divisor de tensin, calcular la //Declaracin de pines de salida
temperatura. pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
float Vin = 5.0; // [V] pinMode(pinLed3, OUTPUT);
Tensin alimentacin del divisor pinMode(pinLed4, OUTPUT);
float Rfija = 1000; // [ohm] pinMode(pinLed5, OUTPUT);
Resistencia fija del divisor
float R25 = 2800; // [ohm] //Declaracin pines de entrada
Valor de NTC a 25C pinMode(analogPin1, INPUT);
float Beta = 3900.0; // [K] pinMode(analogPin2, INPUT);
Parmetro Beta de NTC
float T0 = 293.15; // [K] Se comienza el bucle, en primer lugar se lee la seal
Temperatura de referencia en Kelvin del potencimetro para establecer una temperatura
de referencia sobre la que comparar la temperatura
float Vout = 0.0; // [V] de la NTC y disparar los avisos. Se lee el valor del
Variable para almacenar Vout pin analgico 2 y lo se almacena en tempMin:
//Y por ltimo la temperatura en
tempMin = analogRead(analogPin2); Kelvin
TempK =
Beta/(log(Rntc/R25)+(Beta/T0));
A continuacin se tiene una nueva instruccin:
//Ahora la pasamos a celsius
tempMin = map (tempMin, 0, 1023, TempC = TempK-273.15;
-100, 800);
Se envan por el puerto serie:
La funcin map tiene la siguiente estructura:
Serial.println();
map(valor, fromLow, fromHigh, toLow, toHigh) Serial.print("LA TEMPERATURA DE
LA NTC ES DE ");
Esta estructura convierte los calores que van de 0 a Serial.print(TempC);
1023 en valores escalonados y proporcionados desde Serial.println(" GRADOS
-100 has 800. Con esto se adapta la lectura del CELSIUS");
potencimetro a un rango de -100 a 800, Luego se Serial.println();
divide este valor en 10
El delay que se pone al final es para que mande los
tempMin = tempMin/10; datos de temperatura 500 milisegundos por el puerto
serie.
La temperatura que se devuelve es la de referencia o
crtica y est entre -10.0 y +80.0,. La temperatura delay(500);
de disparo se puede ajustar con una precisin de
0.1. V. BAQUELA Y CAJA DE
PROTECCIN
Se manda por el puerto serie el dato prefijado para
Esta parte del sensor es opcional, ya que no se puede
tener una referencia visual del mismo.
hacer en casa como las dems partes del sensor y no
es necesaria para su funcionamiento adems de
Serial.println("----------------- requerir conocimientos en programas de diseo de
------------------------------"); circuitos. Para pasar el circuito de la Protoboard a un
Serial.println(); circuito impreso es necesario tener un software de
Serial.print("AJUSTE DE diseo de circuitos, como PROTEUS, ORCAD,
TEMPERATURA MINIMA A "); MULTISIM etc.
Serial.print(tempMin);
Serial.println(" GRADOS En el software se disea el circuito del sensor, en
CELSIUS"); este caso de ejemplo se utilizo el programa
Serial.println(); PROTEUS, lo importante no es tener los mismos
Serial.println("----------------- componentes del circuito sino tener componentes en
------------------------------"); el diseo con los mismos puertos que tienen los
componentes fsicos ya que no siempre se pueden
El Serial.println() envia por puerto serie cualquier simular los componentes del diseo en fsico, como
cosa que se incluya dentro de ( ), si es una variable, es el caso de los LEDs o el potencimetro.
con poner el nombre de la variable es suficiente,
como se puede ver con tempMin, pero tambin se Diseo en ISIS del circuito:
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); Figura 6: Diseo del circuito del sensor en ISIS
Ahora se debe utilizar la herramienta Netlist introducir el circuito con el Arduino y tener listo el
Transfer to Ares ubicada en la parte superior sensor de temperatura. A continuacin un ejemplo
de cmo puede quedar un sensor de temperatura
derecha basado en una NTC utilizando esta gua:
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 9: Sensor de temperatura parte inferior

Figura 7: Diseo del circuito del sensor en ARES para la


Figura 10: Sensor de temperatura parte superior
impresin de la baquela

Se debe imprimir el diseo del circuito para poder


imprimir la baquela y tener el circuito listo para
VI. COSTOS
soldar. Una forma de imprimir el circuito es con el
programa libre PDFCreator disponible en la Web (el Los costos de todo el sensor del ejemplo son:
diseo de ste circuito es un ejemplo, puede ser
acomodado como se requiera). 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

Figura 8: Circuito impreso del sensor de temperatura para la


Herramientas que se utilizaron:
impresin en la baquela
Protoboard
Ya con el circuito impreso se puede mandar a Alicates
imprimir en una baquela en cualquier tienda Estao y crema para soldar
electrnica de la ciudad, en Bogot las tiendas de Cautn
componentes electrnicos se encuentran en la calle Bistur
19 con avenida novena.

Luego de soldar los componentes se puede comprar


una caja de plstico y de acuerdo al diseo,
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);
}

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