En este proyecto vamos ha ver como podemos obtener la temperatura mediante la utilización de un termistor. Lo primero, que es un termistor, esta es una simple resistencia que varia según la temperatura que tenga, con el valor devuelto por la resistencia y una pequeña formula podemos calcular que temperatura hace.
Esquema del circuito:
El esquema de este circuito es muy sencillo, esta basado en un simple divisor de tensión, en este caso quedaría de la siguiente manera.
[singlepic id=3 w=320 h=240 float=center]
Este esquema es el utilizado en la mayoría de sensores, simplemente cambiando el termistor, por un lcr, por ejemplo, tendríamos un sensor para detectar la luminosidad.
En mi caso el termistor no es de 10 k, como se muestra en el esquema, sino que es de 100k (NJ28 NTC Thermistor,2.8mm,100K,1%), esto no varia mucho lo fundamental del sistema, ya que en el código para el arduino , le diremos tanto el valor de resistencia del termistor, como el valor de la resistencia secundaria.
Esquema de la conexión en al arduino:
[singlepic id=10 w=320 h=240 float=center]
Para calcular la temperatura necesitamos saber el valor beta de nuestro termistor, normalmente, este valor lo suele facilitar el fabricante de la resistencia, pero si el fabricante no nos lo da o no sabemos el fabricante, lo podremos calcular sabiendo la temperatura a la que esta el termistor, apuntamos el valor de resistencia ha esa temperatura y la temperatura en grados Kelvin, después elevamos la temperatura y volvemos a puntar la resistencia y la temperatura. Cuanto mas diferencia de temperatura mas fiable sera el calculo.
Por ejemplo, ponemos el termistor sobre un hielo, con otro termómetro miramos la temperatura, por ejemplo T1 = 3º + 273,15 y resistencia R1 = 34500 Ohm. Luego lo metemos el agua caliente y hacemos la misma comprobación T2 = 80º + 273,15 y R2 = 134 Ohm. Con esos datos aplicamos la siguiente formula:
beta=(log(RT2/RT1))/((1/T2)-(1/T1))
Quedando de la siguiente manera:
beta = (log(143 / 345000)) / ((1/353,15)-(1 / 276,15))
beta = 4283,9970482988 = 4284
Código para el Arduino.
#include <stdio.h> #include <math.h> int analogPin=0; // Pin donde esta conectado el divisor de tension en el Arduino float Vin=5.0; // [V] Voltage de entrada en el divisor de tension float Raux=10000; // [ohm] Valor de la resistencia secundaria del divisor de tension float R0=100000; // [ohm] Valor de resistencia nominal del termistor (NTC) a 25ºC float T0=298.15; // [K] (25ºC) float Vout=0.0; // [V] Voltage given by the Voltage-Divider float Rout=0.0; // [ohm] Resistencia actual del Termistor (NTC) // Valores para calcular el valor Beta, si no lo sabemos // float T1=273; // [K] Temperatura del 1º punto del test (en grados Kelvin) // float T2=373; // [K] Temperatura del 2º punto del test (en grados Kelvin) // float RT1=19750; // [ohms] Resistencia a 273K grados Kelvin (0ºC) // float RT2=2150; // [ohms] Resistencia a 373K grados Kelvin (100ºC) float beta=0.0; // [K] Parametro Beta float Rinf=0.0; // [ohm] Parametros Rinf float TempK=0.0; // [K] Temperatura de salida en grados Kelvin float TempC=0.0; // [ºC] Temperatura de salida en grados Celsius int iCont; // Contador de ciclos, par el calculo de la temperatura media float cTemp1; // Variable temporal para acumular las temperaturas leidas void setup() { // Configuramos el puerto Serie Serial.begin(9600); // Configuramos el pin del Arduino en entrada pinMode(analogPin, INPUT); // Parametros generales para el calculo // Formula para calcular el valor beta si no disponemos de el // beta=(log(RT1/RT2))/((1/T1)-(1/T2)); // Valor beta, los fabricantes suelen disponer ya de este valor, // mirar en la tabla de carateristicas del termistor beta = 4380; Rinf=R0*exp(-beta/T0); } void loop() { cTemp1=0; for (iCont = 1; iCont <= 500; iCont ++) { // Cálculo del valor de la resistencia termistor (NTC) actual (a través de Vout) Vout=Vin*((float)(analogRead(analogPin))/1024.0); Rout=(Raux*Vout/(Vin-Vout)); // Calculo de la temperatura en grados Kelvin TempK=(beta/log(Rout/Rinf)); // Calculo de la temperatura en grados Celsius TempC=TempK-273.15; // Almacenamos la temperatura (grados Celsuis) actual para despues obtener la media cTemp1 = cTemp1 + TempC; // Hacemos una pausa de 10 milisegundos delay(10); } // Calculamos la temperatura media TempC = cTemp1/iCont; // Mostramos la temperatura media en grados Celsius Serial.println(TempC); // Hacemos una pausda de 1 seg. delay(1000); }
Y con esto ya tendríamos un termómetro digital con nuestro Arduino.
Disculpa creo que el esquema del circuito es diferente al esquema de la conexión en arduino, ¿Cuál es el correcto?
Tienes razón, hace tanto tiempo de el que ni me había fijado. El correcto es el del gráfico, el positivo tiene que entrar al termistor, y el negativo salir de la resistencia. En cuanto tenga un rantin cambio el dibujo.
tengo 2 dudas!! te equivocastes en los valores o yo no entendi bien algo jeje, me responderias?? gracias!!
beta=(log(RT2/RT1))/((1/T2)-(1/T1))
Quedando de la siguiente manera:
beta = (log(143<—- no era 134??? / 345000<—- se te escapo un 0???
Pues ni idea, la prueba con el termistor, lo hice hace mucho, y ahora no te sabría decir. En la actualidad hay mejores sensores para medir temperatura que el termistor. Lo siento por dejar con la duda. :((((
Hola, podrias decirme como sería el codigo para 6 sondas?
Lo quiero instalar en mi placa solar y termo electrico
Muchas gracias.
Buenas, yo tengo montado lo que quieres hacer, pero en vez del termistor, yo he utilizado el DS18B20, puedes ver como leer los datos en este post https://www.todavianose.com/leer-temperatura-de-un-sensor-ds18b20-con-raspberry-pi/. Lo que no entiendo es porque vas ha utilizar 6 sensores, yo en mi caso con 2 me fue más que de sobra, uno para saber la temperatura de la placa o placas si están conectada entre si, y otro para el termo. con la del termo puede controlar cuando tiene que tirar de la placa, y cuando tirar de la resistencia del termo. En la placa, lo mismo, con saber a cuento esta la placa para activar o no la bomba creo que es suficiente. El DS18B20, lo puedes pillar el Aliexpress a un precio razonable.