Select Page

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:

¿Cómo se conecta un termistor NTC con arduino?

Las conexiones que se deben realizar para el funcionamiento del componente son las siguientes:

Conexión Arduino con termistor NTC

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.

Curva temperatura resistencia típica termistor ntc 10k

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.

/**
   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.

shares