# Sensor de temperatura NTC
Bienvenidos a un nuevo tutorial para sacar el máximo partido a vuestro Arduino, seguimos con los sensores, en este caso exploramos las posibilidades de un sensor de temperatura NTC:Nivel: BásicoCoste: <30€Tiempo: 25′Os recomiendo leer previamente los anteriores tutoriales por si tenéis dificultades en alguna parte de este proyecto, o bien, para recordar conceptos de programación ya mostrados.Parte 1: ¿Que vamos a hacer?En este proyecto vamos a aprender a implementar un sensor de temperatura a nuestros proyectos Arduino, en este proyecto simularemos cinco estados de aviso de exceso de temperatura, sobre los cuales los cuales podríamos conectar cualquier elemento que quisiéramos que actuara llegado dicho nivel, podríamos conectar circuitos de ventilación 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.
También vamos a controlar la temperatura vía puerto serie, ya que todavía no hemos hablado de cómo utilizar los LCD en nuestro Arduino, todo llegará.
De nuevo hemos incorporado un pequeño potenciómetro que nos permitirá establecer una temperatura, a partir de la cual nos vaya dando los avisos (led) en unos intervalos fijados en nuestro programa.
He elegido realizar un programa de aviso de exceso de temperatura, pero igualmente se podría utilizar el NTC para un sistema en que necesitemos controlar que no descienda la temperatura a partir de un punto crítico.
Veamos un video que muestra el resultado final:
Material necesario para este proyecto:
- 1 x Arduino Uno
- 1 x Protoboard
- 1 x NTC
- 1 x Potenciómetro 10kΩ
- 5 x Diodos LED
- 5 x Resistencias 220Ω
- 1 x Resistencia 1KΩ
- 1 x Juego de Cables
Parte 2: Diseñando el hardware…
En este nuevo proyecto Arduino tenemos que conseguir, mediante una NTC (Negative Temperature Coefficient o Coeficiente de Temperatura Negativo) activar 5 salidas de nuestro Arduino, una de esas salidas nos mostrará que la temperatura está por debajo del nivel crítico, y a partir de ese nivel, irá activando una salida tras otra cada dos grados que aumente la temperatura.
Veréis en el video que según va aumentando la temperatura, se van incrementado los LED encendidos, lo he realizado así por que es más visual para la comprensión del funcionamiento, podréis ver en la sección de programación que es muy sencillo cambiar esto para que solo active un LED o varios, o lo que necesitéis.
Además vamos a colocar un potenciómetro 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 mínimo de temperatura.
- Salidas.
Entrada de temperatura ambiente.
Estamos utilizando una NTC, es decir, una resistencia con coeficiente de temperatura negativo respecto a la variación de su resistencia, esto es que a más temperatura, aumentará la concentración 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 tensión con su salida a una entrada analógica (podéis ver en este ejemplo como funciona una entrada analógica), en el que nuestra NTC será la resistencia inferior, lo que además nos protegerá de un problema que tienen estos sensores, cuando la corriente que circula por él es baja, no tenemos ningún problema, pues la disipación de calor es casi nula (VxI2) pero si la aumentamos, llegamos a un punto en que esa disipación afecta a la resistencia del sensor, por lo que deducimos que la respuesta de una NTC no es lineal sino hiperbólica, pero al colocarlo como un divisor de tensión la variación de tensión Vout va a ser prácticamente lineal.
En cuanto a la otra resistencia que formará el divisor de tensión, utilizaremos una de 1KΩ, esto es así para aprovechar el rango de muestreo que nos proporciona Arduino con un consumo de corriente limitado, veamos rápidamente el motivo.
Si recordamos la ecuación del divisor de tensión:
Veremos que si la resistencia máxima de nuestra NTC va a ser 10KΩ, y la fija de 1KΩ, tendremos una variación de tensión entre 0v y 4,55v. Podéis hacer cuentas vosotros mismos con otros valores y veréis que si aumentamos la resistencia, disminuye el rango de Vout, y si la disminuimos, aumentará los consumos de corriente en exceso.
Entrada de ajuste mínimo de temperatura.
Para tener un mando sobre el que ajustar la temperatura mínima, simplemente colocaremos un potenciómetro dispuesto como divisor de tensión, a una de las entradas analógicas y utilizaremos su muestreo para mapearlo a nuestro antojo como veremos en la sección de programación.
Salidas.
Para las salidas utilizaremos la ya conocida configuración de LED más resistencia.
De manera que el esquema eléctrico global nos quedaría así:
Y las conexiones en nuestra protoboard…
Parte 3: Programando…
Veamos primero el código al completo:
Empecemos a sacarle brillo!
La primera línea que nos resulta desconocida es:
1
| # include <math.h> |
Cuando ponemos #include <librería.h> lo que hacemos es importar las funciones que haya en esa librería a nuestro programa, en este caso, la librería math.h nos va añadir la posibilidad de realizar operaciones matemáticas algo más complejas, es como cuando Neo aprendía a hacer cosas en Matrix en segundos.. (punto friki.. sorry).
En arduino tenemos infinidad de librerías que iremos descubriendo poco a poco, sigamos!
Lo siguiente que nos encontramos es la definición de los pines de entrada y de salida, ya sabemos de sobra a que nos referimos si habéis seguido los anteriores tutoriales.
Pero después de esto declaramos la variable “escala” como entero:
1
| int escala = 2 ; |
Esta variable la utilizaremos para establecer el intervalo que queremos que haya entre alarmas, es decir, si yo pongo una temperatura de disparo de 20ºC, con una escala de 2 la primera alarma será a 20º, la segunda a 22º, la tercera a 24º, etc…
Ahora introduciremos los datos para hacer las ecuaciones que nos permitirán, en base a a la lectura de nuestra entrada analógica conectada al divisor de tensión, calcular la temperatura.
Veréis que a la hora de definir el tipo de cada variable, tenemos algo nuevo, la variable de tipo “float”, esta variable es para los números en coma flotante (número decimal), estas variables tienen un valor máximo 3.4028235E+38, y como mínimo -3.4028235E+38. Ocupan 4bytes (32bits) con una resolución mucho mayor que los enteros, lo que nos permitirá hacer cálculos bastante precisos, debemos tener en cuenta no olvidarnos de poner la coma en los números que utilicemos en la operación como vemos en las líneas de código, de manera que evitemos errores de interpretación en nuestro programa.
En cuanto a los parámetros necesitaremos conocer 2 datos de nuestra NTC que vendrán dispuestos en el datasheet, una resistencia de referencia a una temperatura determinada, en nuestro caso 2800Ω a 25º y la Beta de nuestra NTC en Kelvin, para nosotros 3950 K.
Un poco más abajo explicaremos en detalle todo esto.
Un vez finalizada la declaración de variables globales, nos toca “configurar” el setup, de nuevo tenemos una línea nueva!
1
| Serial.begin( 9600 ); |
Esta instrucción nos inicializa la comunicación puerto serie desde Arduino al PC a una velocidad de 9600 baudios (bits por segundo), con esto, cualquier cosa que enviemos lo podremos visualizar en el monitor de puerto serie de nuestro software de Arduino o cualquier otro.
Luego, como siempre, declaramos que pines van a ser entradas y cuales van a ser salidas.
Ahora comenzamos con el bucle, en primer lugar leemos la señal de nuestro potenciómetro para establecer una temperatura de referencia sobre la que comparar la temperatura de la NTC y disparar los avisos.
Primero leemos el valor del pin analógico 2 y lo almacenamos en tempMin:
1
| tempMin = analogRead(analogPin2); |
A continuación tenemos una nueva instrucción:
1
| tempMin = map (tempMin, 0 , 1023 , - 100 , 800 ); |
La función map tiene esta estructura:
map(valor, fromLow, fromHigh, toLow, toHigh)
Es decir, como si le dijéramos: Transfórmame “tempMin”, que puede ir de 0 a 1023 en valores escalonados y proporcionados desde -100 has 800.
Con esto adaptamos la lectura del potenciómetro a un rango de -100 a 800, esto lo hemos hecho así para que al dividir entre 10 el valor:
tempMin = tempMin/10;
Nos devuelva una temperatura de referencia entre -10.0º y +80.0º, con esto podremos ajustar la temperatura de disparo con una precisión de 0.1º.
A continuación lo que hacemos es mandar por el puerto serie el dato prefijado para tener una referencia visual del mismo.
Esto nos enviará por puerto serie cualquier cosa que incluyamos dentro de ( ), si es una variable, con poner el nombre de la variable es suficiente, como se puede ver con tempMin, pero también podemos mandar cualquier texto que queramos, siempre que lo incluyamos entre comillas, como se puede ver, yo lo único que he hecho es crear unas líneas de separación entre la variable que lanzo, para que se lean mejor los datos vía serie.
Y ahora llega lo más complicado del programa, el cálculo de temperatura a partir de la medida analógica.
Para realizar esto debemos conocer algo de teoría.
Teniendo en cuenta que el fabricante nos da el valor resistivo para una temperatura en concreto (en nuestro caso 2800Ω para 25º) y la Beta (Temperatura característica del material entre 2000K y 4000K) podemos utilizar la ecuación que relaciona la resistencia de la NTC y la temperatura para calcular esta última, primero veamos la ecuación:
Siendo:
- Rt = Resistencia a temperatura T en grados Kelvin (k = ºC + 273,15)
- Ro = Resistencia de referencia a una temperatura To en Kelvin.
- B = Valor Beta de nuestra NTC.
- To = Temperatura de referencia en Kelvin.
- T = Temperatura a medir.
Con esta ecuación podremos saber cual será la resistencia máxima que nos va a dar nuestra NTC al calcular su curva característica, en nuestro caso, 10KΩ lo que nos sirve para diseñar el divisor de tensión.
Observamos que, si calculamos Rt, tendremos todos los datos para hallar la temperatura en un valor de resistencia determinado despejando T, veamos la ecuación despejada que utilizaremos en nuestro programa:
Bien, ya tenemos la ecuación para hallar la temperatura, pero nos faltaría saber cual es la resistencia de la NTC, para esto primero calcularemos cual es la tensión de entrada de nuestra entrada analógica, es decir, la Vout de nuestro divisor de tensión:
Con esto hallamos cuanto vale cada bit de la conversión analógico-digital (recordemos que nuestro conversor divide los 5 voltios entre 1024 cachitos) y lo multiplicamos por la cantidad de bit que nos lee la entrada analógica, con lo que tenemos la tensión que le está llegando a la entrada analógica.
Una vez tenemos esto, si recordamos la fórmula del divisor de tensión:
Vemos que tenemos todos los datos a excepción de Rinferior, que es justo la resistencia de la NTC que necesitamos para calcular la temperatura, por lo que despejando nos queda:
Con esto ya tenemos todos los datos para calcular nuestra temperatura a partir de las lecturas de la entrada analógica, de manera que nos quedará de la siguiente manera al plasmarlo en nuestro programa.
Ahora lo único que hacemos es enviarlo como antes he explicado por el puerto serie:
Para mostrar las salidas podéis ver que el código es muy similar al del proyecto del diodo LED, si necesitáis que lo explique no tengo inconveniente, pero no quiero repetir demasiadas cosas en los post, creo que se entienden muy bien las comparaciones.
El delay que hemos puesto al final es para que los mande la temperatura cada medio segundo por el puerto serie.
Y esto es todo!!
Como veis vamos aumentando el nivel progresivamente, espero que no sean demasiado bruscos los cambios, si es así decírmelo!!
Hasta pronto!!
0 comentarios:
Publicar un comentario