Download Heiner Bello Cód: 142880 Felipe Patiño Cód: 261775 Lina Santana
Document related concepts
no text concepts found
Transcript
Heiner Bello Cód: 142880 Felipe Patiño Cód: 261775 Lina Santana Cód: 153434 Lina Soler Cód: 245071 Sensor de temperatura De los sensores investigados el sensor más completo es el que está basado en un NTC, es decir en una resistencia con 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 2 partes, la del hardware y la del software Hardware Elementos necesarios para el sensor: 1 Arduino 1 Protoboard 1 NTC 1 Potenciómetro de 10K ohmios 5 diodos LED 5 Resistencias 220 ohmios 1 Resistencia 1 K ohmios Cables Por medio de la NTC se activan las 5 salidas del Arduino, cada una con un LED para mostrar los diferentes niveles de temperatura. Cada salida se irá activando a medida que la temperatura suba 2 °C. Esto se puede ajustas de la manera que uno quiera en la parte del Software. El potenciómetro se encarga de ajustar la temperatura la cual sirve para lanzar los avisos. 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 además de eliminar el problema de la corriente (si la corriente es muy alta, el sensor no tendrá un comportamiento lineal, es decir el voltaje de salida no es exacto). b) Entrada de ajuste mínimo de temperatura Se coloca un potenciómetro para controlar la entrada de temperatura mínima que saca la NTC y sirve como divisor de tensión para una de las entradas analógicas y utilizaremos su muestreo para mapearlo como se necesite, esto se especificará en la parte del software. c) Salidas Para las salidas se utilizan los LEDS y resistencias con el fin de limitar la corriente y que los LEDS no se dañen Este es el circuito esquemático del sensor: Software El código de programación es el siguiente: la librería math.h #include <math.h> // int pinLed1 = 8; int pinLed2 = 9; int pinLed3 = 10; int pinLed4 = 11; int pinLed5 = 12; // int analogPin1 = 0; int analogPin2 = 1; // 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 = 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; float Rntc = 0.0; // [V] Variable para almacenar Vout // [ohm] Variable para NTC en ohmnios float TempK = 0.0; // [K] float TempC = 0.0; // [ºC] Temperatura salida en Kelvin Temperatura salida en Celsius void setup() { //comunicación puerto serie Serial.begin(9600); //pines de salida pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); pinMode(pinLed3, OUTPUT); pinMode(pinLed4, OUTPUT); pinMode(pinLed5, OUTPUT); //pines de entrada pinMode(analogPin1, INPUT); pinMode(analogPin2, INPUT); } void loop() { //potenciómetro tempMin = analogRead(analogPin2); // tempMin = map (tempMin, 0, 1023, -100, 800); // tempMin = tempMin/10; // Serial.println("-----------------------------------------------"); Serial.println(); Serial.print("AJUSTE DE TEMPERATURA MINIMA A "); Serial.print(tempMin); Serial.println(" GRADOS CELSIUS"); Serial.println(); Serial.println("-----------------------------------------------"); //Temperatura //Vout del divisor Vout=(Vin/1024)*(analogRead(analogPin1)); //resistencia de la NTC Rntc=(Vout*Rfija)/(Vin-Vout); //temperatura en Kelvin TempK = Beta/(log(Rntc/R25)+(Beta/T0)); //temperatura en Celsius TempC = TempK-273.15; // Serial.println(); Serial.print("LA TEMPERATURA DE LA NTC ES DE "); Serial.print(TempC); Serial.println(" GRADOS CELSIUS"); Serial.println(); //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); } El código empieza agregando la librería math, luego se definen los pines de entrada y salida del Arduino. Se declara la variable escala con la cual se establece el intervalo de alarmas para los LEDS, en este caso se establece como 2 grados. Luego se introducen los datos necesarios para las ecuaciones que calcularán la temperatura que va a mostrar la pantalla del computador. Como es necesario que hayan decimales, estas variables son de tipo float. Es necesario tener 2 referencias del NTC, su resistencia de referencia a una temperatura en particular, estos datos se consiguen en el datasheet del elemento. La resistencia es de 2800 ohmios a una temperatura de 25 °C. Se define el bucle estableciendo una temperatura de referencia y poderla comparar con los valores que salgan. Por último los datos se envían por el puerto serie a la salida para que se muestren en pantalla