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:
![](https://blog.uelectronics.com/wp-content/uploads/2021/06/Coef-de-Temperatura-V2.jpg)
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:
![](https://blog.uelectronics.com/wp-content/uploads/2021/06/Coef-de-Temperatura-v6-1024x662.jpg)
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:
![](https://blog.uelectronics.com/wp-content/uploads/2021/06/Coef-de-Temperatura-v3.jpg)
Esta expresión nos ayudara a determinar la relación entre resistencia-temperatura, en donde:
Ahora procederemos a realizar nuestro proyectos con los sensores de temperatura. Para ello necesitaremos:
- Sensores de Temperatura KY-028 y KY-013
- Sensor 3mm Led Bicolor Cátodo Común KY-029
- Tarjeta de Desarrollo Arduino UNO
- Resistencias de 220 ohm
- Cables Dupont
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:
![](https://blog.uelectronics.com/wp-content/uploads/2021/06/AR0032-KY-013-TEMPERATURA-SENSOR-v3.jpg)
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.
![](https://blog.uelectronics.com/wp-content/uploads/2021/06/Coef-de-Temperatura-v4.jpg)
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?.
Hola buenas, estoy realizando un trabajo y me gustaría saber como has obtenido los valores de las constante para la ecuación de Steinhart-Hart
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