You are on page 1of 16

Universidad Tecnolgica de Panam Centro Regional de Cocl Facultad de Ingeniera Elctrica Lic. Ing.

Electrnica y Telecomunicaciones

Tema: Sensor de Temperatura NTC

Nombre: Troya, Carlos.

Cedula: 2-732-497

Asignatura: Esquemas Elctricos y Electrnicos

Fecha de Entrega: 10-06-2013

Introduccin

En este proyecto vamos a aprender a implementar un sensor de temperatura, en este proyecto simularemos seis estados de aviso de exceso de temperatura, sobre los cuales los cuales podramos conectar cualquier elemento que quisiramos que actuara llegado dicho nivel, podramos conectar circuitos de ventilacin de manera que si no consiguieran mitigar el exceso de calor llegara un punto que desconectara el sistema que estemos monitorizando, en resumen, en cualquier lugar donde un control de exceso de temperatura sea necesario.

Sensor de temperatura NTC

Material necesario para este proyecto: 1 x Arduino Uno 1 x Protoboard 1 x NTC 1 x Potencimetro 10k 6 x Diodos LED 6 x Resistencias 220 1 x Resistencia 1K 1 x Juego de Cables

Diseando el hardware
En este nuevo proyecto Arduino tenemos que conseguir, mediante una NTC (Negative Temperature Coefficient o Coeficiente de Temperatura Negativo) activar 6 salidas de nuestro Arduino, una de esas salidas nos mostrar que la temperatura est por debajo del nivel crtico, y a partir de ese nivel, ir activando una salida tras otra cada dos grados que aumente la temperatura. Adems vamos a colocar un potencimetro para ajusta la temperatura, a partir de la cual, nos empezar a lanzar los avisos. Visto esto, estructuremos el circuito en tres partes: Entrada de temperatura ambiente. Entrada de ajuste mnimo de temperatura. Salidas.

Entrada de temperatura ambiente.


Estamos utilizando una NTC, es decir, una resistencia con coeficiente de temperatura negativo respecto a la variacin de su resistencia, esto es que a ms temperatura, aumentar la concentracin de portadores, lo que har que su resistencia sea menor. La manera de conectar este sensor a nuestro circuito va a ser formando un divisor de tensin con su salida a una entrada analgica en el que nuestra NTC ser la resistencia inferior, lo que adems nos proteger de un problema que tienen estos sensores, cuando la corriente que circula por l es baja, no tenemos ningn problema, pues la disipacin de calor es casi nula (VxI 2) pero si la aumentamos, llegamos a un punto en que esa disipacin afecta a la resistencia del sensor, por lo que deducimos que la respuesta de una NTC no es lineal sino hiperblica, pero al colocarlo como un divisor de tensin la variacin de tensin Vout va a ser prcticamente lineal.

En cuanto a la otra resistencia que formar el divisor de tensin, utilizaremos una de 1K, esto es as para aprovechar el rango de muestreo que nos proporciona Arduino con un consumo de corriente limitado, veamos rpidamente el motivo.

Veremos que si la resistencia mxima de nuestra NTC va a ser 10K, y la fija de 1K, tendremos una variacin de tensin entre 0v y 4,55v. Podis hacer cuentas vosotros mismos con otros valores y veris que si aumentamos la resistencia, disminuye el rango de Vout, y si la disminuimos, aumentar los consumos de corriente en exceso. Entrada de ajuste mnimo de temperatura. Para tener un mando sobre el que ajustar la temperatura mnima, simplemente colocaremos un potencimetro dispuesto como divisor de tensin, a una de las entradas analgicas y utilizaremos su muestreo para mapearlo a nuestro antojo como veremos en la seccin de programacin. Salidas. Para las salidas utilizaremos la ya conocida configuracin de LED ms resistencia. De manera que el esquema elctrico global nos quedara as:

Cdigo original
//Aadimos 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; float Rntc = 0.0; // [V] Variable para almacenar Vout // [ohm] Variable para NTC en ohmios Temperatura salida en Kelvin Temperatura salida en Celsius

float TempK = 0.0; // [K] float TempC = 0.0; // [C] void setup() {

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

//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 loop() { //Primero leemos el potencimetro tempMin = analogRead(analogPin2); //Lo mapeamos a valores de -100 a 800 tempMin = map (tempMin, 0, 1023, -100, 800); //Y lo dividimos entre 10 para darle un decimal tempMin = tempMin/10; //Y lanzamos el ajuste establecido via serie Serial.println(-----------------------------------------------); Serial.println(); Serial.print(AJUSTE DE TEMPERATURA MINIMA A ); Serial.print(tempMin); Serial.println( 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.15; //Y lo mostramos 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); } delay(500); }

Divisor de tensin:

Proyecto NTC esquema:

Proyecto construido:

Codigo Final
//Aadimos la librera math.h #include <math.h> //Pines para los LED int pinLed1 = 4; int pinLed2 = 5; int pinLed3 = 6; int pinLed4 = 7; int pinLed5 = 8; int pinLed6 = 9;

//Pines para las entradas analgicas int analogPin1 = 2; int analogPin2 = 3; //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 = 60000; // [ohm] Valor de NTC a 25C float Beta = 5000; // [K] Parmetro Beta de NTC float T0 = 293.15; // [K] Temperatura de referencia en Kelvin float Vout = 0.0; float Rntc = 0.0; // [V] Variable para almacenar Vout // [ohm] Variable para NTC en ohmios Temperatura salida en Kelvin Temperatura salida en Celsius

float TempK = 0.0; // [K] float TempC = 0.0; // [C] void setup() {

//Comenzamos la comunicacin puerto serie

Serial.begin(9600); //Declaramos pines de salida pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); pinMode(pinLed3, OUTPUT); pinMode(pinLed4, OUTPUT); pinMode(pinLed5, OUTPUT); pinMode(pinLed6, OUTPUT);

//Y los pines de entrada pinMode(analogPin1, INPUT); pinMode(analogPin2, INPUT); } void loop() { //Primero leemos el potencimetro tempMin = analogRead(analogPin2); //Lo mapeamos a valores de -100 a 800 tempMin = map (tempMin, 0, 1023, -100, 800); //Y lo dividimos entre 10 para darle un decimal tempMin = tempMin/10; //Y lanzamos el ajuste establecido via serie Serial.println(-----------------------------------------------); Serial.println(); Serial.print(AJUSTE DE TEMPERATURA MINIMA A ); Serial.print(tempMin); Serial.println( 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.15; //Y lo mostramos 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); digitalWrite(pinLed6, LOW);

} else if (((TempC <= (tempMin + escala)) & (TempC > tempMin))) { digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, LOW); digitalWrite(pinLed4, LOW); digitalWrite(pinLed5, LOW); digitalWrite(pinLed6, 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); digitalWrite(pinLed6, 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); digitalWrite(pinLed6, LOW); }

else if ((TempC<=(tempMin+(escala*4)))&(TempC>tempMin+(escala*3))) { digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, HIGH); digitalWrite(pinLed4, HIGH); digitalWrite(pinLed5, HIGH); digitalWrite(pinLed6, LOW); } else if (TempC > (tempMin + (escala*5))) { digitalWrite(pinLed1, HIGH); digitalWrite(pinLed2, HIGH); digitalWrite(pinLed3, HIGH); digitalWrite(pinLed4, HIGH);

digitalWrite(pinLed5, HIGH); digitalWrite(pinLed6, HIGH); } delay(500); }

Proyecto en funcionamiento a temperatura ambiente:

Proyecto en funcionamiento a temperatura de 36.66 C:

Proyecto en funcionamiento a temperatura de 40.28 C:

Proyecto en funcionamiento a temperatura de 44.90 C:

You might also like