En este artículo trataremos la conexión de otro sensor analógico a un arduino, en este caso un termistor NTC (resistencia variable con coeficiente de temperatura negativo).
El termistor NTC es un sensor de temperatura resistivo, el cual al cambiar su temperatura, varía su resistencia eléctrica. Podemos aprovechar este efecto para realizar mediciones de temperatura utilizando un divisor resistivo y las entradas analógicas de nuestra placa Arduino.
En este tutorial desarrollaremos un circuito y el software correspondiente que nos permite obtener lecturas de temperatura utilizando un termistor NTC.
En la foto de principal de este artículo observamos el circuito montado para medir temperatura con un termistor o NTC.
Materiales necesarios para las prácticas.
Para completar los ejercicios propuestos en esta página recomendamos adquirir los siguientes materiales:
- Arduino UNO R3 o similar.
- Protoboard miniatura.
- Cables o jumpers para protoboard.
- Termistor (Resistencia de coeficiente de temperatura negativo).
- Resistencia de 10 Kohm 1/4 W 1% de precisión
¿Cómo se conecta un termistor NTC con arduino?
Las conexiones que se deben realizar para el funcionamiento del componente son las siguientes:
Teoría de funcionamiento del termistor NTC.
El termistor en un sensor que varía su resistencia eléctrica de manera dependiente a la temperatura. Su funcionamiento se basa en el cambio de resistividad de un material semiconductor de acuerdo a la temperatura.
El nombre “termistor” proviene del ingles: “Thermally Sensitive Resistor”.
De acuerdo al comportamiento del componente los termistores se dividen en dos grupos:
- NTC (Negative Temperature Coefficient) o de coeficiente de temperatura positivo
- PTC (Positive Temperature Coefficient) o de coeficiente de temperatura negativo
Los termistores de coeficiente de temperatura negativo (NTC) disminuyen su resistencia cuando su temperatura aumenta, mientras que los termistores de coeficiente de temperatura positivo aumentan su resistencia conforme aumenta su temperatura.
Para poder determinar la temperatura utilizando un NTC, lo primero que debemos realizar es conocer el valor de su resistencia eléctrica. La siguiente imagen nos muestra la respuesta típica del termistor a las variaciones de temperatura.
Una vez que conocemos la resistencia del termistor NTC podemos resolver la ecuación de Steinhart-Hart que permite relacionar la resistencia eléctrica de un semiconductor en diferentes temperaturas.
Desarrollaremos entonces un pequeño programa que permita resolver la ecuación y obtener la temperatura a partir de la resistencia eléctrica del termistor NTC.
Programación para leer la temperatura con Arduino y termistor NTC
A continuación se muestra el código para medir temperatura con un termistor NTC. Hemos procurado comentar el código bastante para que sea fácil entender lo que estamos realizando.
Los parámetros del termistor (0.001129148, 0.000234125 y 0.0000000876741) normalmente se determinan por el fabricante del dispositivo o bien pueden calcularse a mediante 3 mediciones precisas de temperatura y resistencia del dispositivo en cuestión.
- Calculador de parámetros Steinhart-Hart.
- Página de wikipedia donde se explica como calcular los parámetros.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /** GeekFactory - "INNOVATING TOGETHER" Distribucion de materiales para el desarrollo e innovacion tecnologica www.geekfactory.mx EJEMPLO SENCILLO PARA LECTURA DE TEMPERATURA CON TERMISTOR NTC. EL PROGRAMA ESTÁ DISENADO PARA TERMISTORES NTC DE 10K NOMINALES A 25 GRADOS CENTIGRADOS. EL TERMISTOR DEBE SER CONECTADO A LA ENTRADA DEL ADC MEDIANTE UN ARREGLO DE DIVISOR RESISTIVO REALIZADO CON RESISTENCIA DE 10K Y EL TERMISTOR EN SERIE. EL ALGORITMO UTILIZADO PARA OBTENER LA TEMPERATURA A PARTIR DE LA RESISTENCIA DEL TERMISTOR ES UNA IMPLEMENTACIÓN DE LA ECUACIÓN DE STEINHART-HART */ #include <Arduino.h> #include <math.h> // configurar el pin utilizado para la medicion de voltaje del divisor resistivo del NTC #define CONFIG_THERMISTOR_ADC_PIN A0 // configurar el valor de la resistencia que va en serie con el termistor NTC en ohms #define CONFIG_THERMISTOR_RESISTOR 9900l /** * @brief Obtiene la resistencia del termistor resolviendo el divisor resistivo. * * @param adcval Valor medido por el convertidor analógico a digital. * @return int32_t Resistencia electrica del termistor. */ int32_t thermistor_get_resistance(uint16_t adcval) { // calculamos la resistencia del NTC a partir del valor del ADC return (CONFIG_THERMISTOR_RESISTOR * ((1023.0 / adcval) - 1)); } /** * @brief Obtiene la temperatura en grados centigrados a partir de la resistencia * actual del componente. * * @param resistance Resistencia actual del termistor. * @return float Temperatura en grados centigrados. */ float thermistor_get_temperature(int32_t resistance) { // variable de almacenamiento temporal, evita realizar varias veces el calculo de log float temp; // calculamos logaritmo natural, se almacena en variable para varios calculos temp = log(resistance); // resolvemos la ecuacion de STEINHART-HART // http://en.wikipedia.org/wiki/Steinhart–Hart_equation temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); // convertir el resultado de kelvin a centigrados y retornar return temp - 273.15; } void setup() { // preparar serial Serial.begin(115200); while (!Serial) ; Serial.println(F("----------------------------------------------------")); Serial.println(F("EJEMPLO DE LECTURA DE TEMPERATURA CON TERMISTOR NTC ")); Serial.println(F(" https://www.geekfactory.mx ")); Serial.println(F("----------------------------------------------------")); } void loop() { // variable para almacenar la temperatura y resistencia float temperatura; uint32_t resistencia; // calcular la resistencia electrica del termistor usando la lectura del ADC resistencia = thermistor_get_resistance(analogRead(CONFIG_THERMISTOR_ADC_PIN)); // luego calcular la temperatura segun dicha resistencia temperatura = thermistor_get_temperature(resistencia); // imprimir resistencia y temperatura al monitor serial Serial.print(F("Resistencia del NTC: ")); Serial.print(resistencia); Serial.print(" Temperatura: "); Serial.println(temperatura, 1); // esperar 5 segundos entre las lecturas delay(5000); } |
Conclusión
En este tutorial hemos aprendido sobre los sensores de temperatura de tipo NTC y como pueden ser conectados con Arduino de forma sencilla para obtener mediciones de temperatura.
Aunque los sensores de temperatura de tipo termistor NTC no son extremadamente precisos, si tienen la enorme ventaja de ser sumamente económicos, por lo que pueden servirnos en algún proyecto donde el costo sea un factor importante.