InicioTarjetas de DesarrolloArduinoSensores de Temperatura KY-028 y KY-013

Sensores de Temperatura KY-028 y KY-013

En este tutorial usaremos los sensores de temperatura KY-028 y KY-013; ambos son transductores normalmente llamados termistores, los cuales tienen variación de su resistencia dependiendo de la temperatura.

INTRODUCCIÓN

Comportamiento y características de un termistor

La relación resistencia-temperatura no es directamente lineal, ya que depende del material existe diferencia del comportamiento entre transductores:

Comportamiento de algunos termistores dependiendo el material de fabricación

Donde:

  • RTD: Detector Resistivo de Temperatura
  • NTC: Coeficiente de Temperatura Negativo
  • PTC: Coeficiente de Temperatura Positivo

Los módulos KY-013 y KY-028 son NTC (Negative Temperature Coefficient), por lo que disminuirá su valor óhmico a medida que aumenta la temperatura, por lo tanto presentarán un coeficiente de temperatura negativo. Pero ¿qué diferencias existen entre estos dos módulos?

Comparación entre KY-013 y KY-028

Los sensores de temperatura KY-028 y KY-013 tienen la misma funcionalidad pero con algunas diferencias. A continuación un resumen de sus características:

Ahora que ya conocemos un poco del comportamiento de los termistores y sus diferencias cabe mencionar que estos sensores no arroja datos directamente en grados Celsius, ambos nos darán lecturas de valores entre 0 y 1023. Para tener los valores de temperatura (°C,°K o °F) se tendrán que usar la ecuación de Steinhart-Hart:

Esta expresión nos ayudara a determinar la relación entre resistencia-temperatura, en donde:

  • T: Temperatura( °Kelvin)
  • A,B y C: Coeficientes de Steinhart-Hart, que varían dependiendo el termistor y el rango de temperatura
  • R: Resistencia del termistor
  • En nuestro caso los coeficientes para el termistor NTC (R: 10 kΩ) que trabaja para una temperatura ambiente de -55°C a +125°C, así que sus coeficientes serán:
  • A = 0.001129148
  • B = 0.000234125
  • C = 0.0000000876741
  • Ahora procederemos a realizar nuestro proyectos con los sensores de temperatura. Para ello necesitaremos:

    Diagrama de Conexión para KY-028

    Realizaremos la siguiente conexión entre el Arduino UNO, el módulo de temperatura KY-013 y para visualizar las variaciones por medio de un LED Bicolor KY-029, como se muestra en la siguiente imagen:

    Código en Arduino IDE y KY-013

    Para el siguiente programa declararemos los pines para el LED Bicolor KY-029 y variables para realizar los cálculos con la ecuación de Steinhart-Hart. Nótese que antes de realizar dicha operación trabajaremos con la función map, la cual nos ayudará a tener una relación lineal entre los valores de resistencia-temperatura.

    La función map nos ayuda a realiza un mapeo entre los valores de entrada y los requeridos, para poder tener una relación directamente proporcional entre temperatura y resistencia del termistor, es decir, si la resistencia aumenta la temperatura también. Esta operación se conforman por 5 elementos, en nuestro caso serán los siguientes valores:

    • valor: el número a mapear, es decir, lectura del KY-013
    • 0: el límite inferior del valor leído por el sensor, teniendo en cuenta que va de 0 a 1023.
    • 270: el límite superior del valor leído por el sensor, este puede variar dependiendo el termistor.
    • 0: el límite inferior de temperatura
    • 50: el límite superior de temperatura
    int ledR = 10;       //Led Rojo del KY-029
    int ledV = 9;        //Led Verde del KY-029
    int ky013 = A0;     //Valores de entrada analógicos por el termistor
    int valor;         //Variable que guardara los datos de entrada del KY-013
    
    //Variables para realizar la ecuación Steinhart-Hart
    
    float R1 = 10000;                                               // Valor de R1 de la PCB 10k
    float logR2, R2, TK, TC;                                             //Elementos para realizar la ecuación
    float A = 0.001129148, B= 0.000234125, C = 0.0000000876741; //Valores constantes considerando NTC de 10K y trabajando a una temperatura entre -55°C a +125°C
    
    void setup() {
    Serial.begin(9600);             //Inicialización del Puerto Serial
    pinMode (ledR, OUTPUT) ;        //Declaración del Led Rojo del KY-029
    pinMode (ledV, OUTPUT) ;        //Declaración del Led Verde del KY-029
    }
    
    void loop() {
    valor = analogRead(ky013);                                //Se asigna los valores leídos a la variable valor
    Serial.print("Valor Analógico:");                         //Se imprimirá los valores del sensor
    Serial.println(valor);                                    // que va de 0-1023, esto para saber que que valores esta teniendo en reposo en termistor
                                                              
    valor = map (valor, 0, 270, 0, 50);                       //para evitar la exponencial, usaremos la función map
                                                              //en donde 0-270, serán los valores de entrada analógico vs 0-50 el valor de temperatura
    //Conversión de valores analógicos a grados Celsius
    R2 = R1 * (1023.0 / (float)valor - 1.0);                   //Calculo de la resistencia del termistor
    logR2 = log(R2);                                            //Calculo del logaritmo de la resistencia del termistor
    TK = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2)); // Temperatura en Kelvin
    TC = TK - 273.15;                                             //Conversión a Temperatura Celsius
    TC=TC*(-1);
    Serial.print("Temperatura es:"); 
    Serial.println(TK);                                          //Impresión de temperatura en Celsius
    delay(500);                                                  //Duración del proceso, medio minuto 
    
    digitalWrite(ledR, LOW);                                    //Antes de cualquier función los LED estarán en nivel BAJO/0
    digitalWrite(ledV, LOW);
    if (T >= 22) {                                               //Si la temperatura es por arriba de 22° 
    digitalWrite(ledR, HIGH);                                   //Se encenderá el LED ROJO del KY-029
    }
    else {                                                       //De lo contrario T<22°C
    digitalWrite(ledV, HIGH);                                    //Se encenderá el LED VERDE del KY-029
    }
    }
    

    Una vez que es obtenido el valor de temperatura, el programa evalúa si es mayor a 22°C , en caso de ser afirmativa esta condición el LED Bicolor prenderá con luz roja y de lo contrario (si se mantiene por debajo de esta temperatura) su luz será verde. Tal como se muestra en el siguiente video:

    Diagrama de conexión para KY-028

    Ahora probaremos el mismo funcionamiento pero con el KY-028, el cual cuenta con un potenciómetro para ajustar la sensibilidad de nuestro sensor. Solo conectaremos la salida analógica de KY-028 al Arduino, ya que el LED 2 encenderá cuando salida digital(D0) detecte la temperatura configurada por el potenciómetro.

    Código en IDE Arduino para Sensor de Temperatura Digital

    Nos apoyaremos del código del ejercicio anterior, solo que variaremos algunos datos de la función map; ahora serán lo siguientes valores:

    • valor: el número a mapear, es decir, lectura del KY-013
    • 0: el límite inferior del valor leído por el sensor, teniendo en cuenta que va de 0 a 1023.
    • 650: el límite superior del valor leído por el sensor, este se ajusto por medio del potenciometro para obtener la temperatura de comparación deseada.
    • -55: el límite inferior de temperatura, ahora lo modificaremos respecto al datasheet de KY
    • 125: el límite superior de temperatura
    int ledR = 10;       //Led Rojo del KY-029
    int ledV = 9;        //Led Verde del KY-029
    int ky013 = A0;     //Valores de entrada analógicos por el termistor
    int valor;         //Variable que guardara los datos de entrada del KY-013
    
    //Variables para realizar la ecuación Steinhart-Hart
    
    float R1 = 10000;                                               // Valor de R1 de la PCB 10k
    float logR2, R2, TK, TC;                                             //Elementos para realizar la ecuación
    float A = 0.001129148, B= 0.000234125, C = 0.0000000876741; //Valores constantes considerando NTC de 10K y trabajando a una temperatura entre -55°C a +125°C
    
    void setup() {
    Serial.begin(9600);             //Inicialización del Puerto Serial
    pinMode (ledR, OUTPUT) ;        //Declaración del Led Rojo del KY-029
    pinMode (ledV, OUTPUT) ;        //Declaración del Led Verde del KY-029
    }
    
    void loop() { 
    valor = analogRead(ky013);                                 //Se asigna los valores leídos a la variable valor
    Serial.print("Valor Analógico:");                           //Se imprimirá los valores del sensor
    Serial.println(valor);                                      // que va de 0-1023, esto para saber que que valores esta teniendo en reposo en termistor
                                                              
    valor = map (valor, 0, 650, -55, 125);                       //para evitar la exponencial, usaremos la función map
                                                                 //en donde 0-650, serán los valores de entrada analógico vs -55-125 el valor de temperatura
    //Conversión de valores analógicos a grados Celsius
    R2 = R1 * (1023.0 / (float)valor - 1.0);                      //Calculo de la resistencia del termistor
    logR2 = log(R2);                                              //Calculo del logaritmo de la resistencia del termistor
    TK = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));  // Temperatura en Kelvin
    TC = TK - 273.15;                                             //Conversión a Temperatura Celsius
    TC = TC * (-1);
    Serial.print("Temperatura es:"); 
    Serial.println(TK);                                          //Impresión de temperatura en Celsius
    delay(500);                                                  //Duración del proceso, medio minuto 
    
    digitalWrite(ledR, LOW);                                    //Antes de cualquier función los LED estarán en nivel BAJO/0
    digitalWrite(ledV, LOW);
    if (T >= 23) {                                               //Si la temperatura es por arriba de 22° 
    digitalWrite(ledR, HIGH);                                   //Se encenderá el LED ROJO del KY-029
    }
    else {                                                       //De lo contrario T<22°C
    digitalWrite(ledV, HIGH);                                    //Se encenderá el LED VERDE del KY-029
    }
    }
    

    Al igual que el código anterior, realizará una comparación de la temperatura para poder cambiar el color del LED Bicolor dependiendo a la condición IF.

    Como se pudo observar, la configuración de la sensibilidad al KY nos ayuda a tener una señal en alto en el LED cuando supera el umbral configurado por el potenciómetro.

    Si te gustaría mas ejemplos respecto a la medición de temperatura, te recomendamos el tutorial ¿Cómo visualizar los datos del sensor de Humedad y Temperatura KY-015?.

    Bibliografía

    Glosario

    Transductor: es un dispositivo capaz de transformar o convertir una determinada manifestación de energía de entrada, en otra diferente de salida.

    TUTORIALES RELACIONADOS

    2 COMENTARIOS

      • Hola Alberto!
        Las constantes que se utilizaron en el programa son producto del muestreo de la variación de resistencia y temperatura del termistor. En la bibliografía incluida en el articulo (al final de esta) incluye una hoja de Excel la cual se aproxima a los valores utilizados en el programa.
        Saludos