¿Qué es el módulo KY-001?
El KY-001 es un módulo compatible con Arduino que lleva integrado un sensor de temperatura Dallas 18B20 (DS18B20).
Es un sensor de temperatura digital que utiliza el protocolo 1-Wire para enviar las mediciones al microcontrolador, lo que simplifica notablemente la conexión.
El módulo de temperatura KY-001 viene incluido en el kit de 37 sensores compatible con Arduino, pero también se puede adquirir por separado.
¿Para qué sirve el módulo KY-001?
El módulo KY-001 sirve para medir la temperatura ambiente con una precisión bastante alta.
Dado que el módulo es fácil de usar, preciso y económico, se ha convertido en una opción popular para una amplia gama de aplicaciones en la comunidad de Arduino.
A continuación puedes ver algunos ejemplos de usos comunes de este módulo:
- Termómetros digitales: Es ideal para la construcción de termómetros digitales y termómetros industriales de alta precisión.
- Estaciones meteorológicas: Puede ser utilizado en estaciones meteorológicas para medir la temperatura ambiente y proporcionar datos precisos para su visualización y análisis.
- Control de temperatura: Se utiliza en sistemas de control de temperatura en aplicaciones como sistemas de climatización, calefacción, refrigeración y control de procesos industriales.
- Monitoreo del clima en tiempo real: Es útil para el monitoreo de la temperatura del suelo, del agua o del aire en tiempo real en proyectos agrícolas o de investigación ambiental.
- Automatización del hogar: Puede formar parte de sistemas de automatización del hogar para el control de climatización, sistemas de calefacción y refrigeración, o simplemente para monitorear las condiciones ambientales.
- Terrarios: Permite monitorizar la temperatura del aire y garantizar condiciones óptimas para los animales y plantas.
- Monitoreo de servidores y equipos electrónicos: Puede ser utilizado para monitorear la temperatura de servidores, sistemas informáticos y otros equipos electrónicos para prevenir el sobrecalentamiento.
- Proyectos educativos: Es un componente popular en proyectos educativos y experimentos que involucran la medición y el registro de datos de temperatura.
- Automoción: En aplicaciones automotrices, puede ser utilizado para medir la temperatura del motor, la transmisión u otras partes críticas del vehículo.
- Proyectos de robótica: Se integra en proyectos de robótica para medir la temperatura ambiental y tomar decisiones basadas en esos datos.
Especificaciones del módulo KY-001
Estructura física
El módulo lleva conectado un sensor de temperatura DS18B20:
Y un LED con una resistencia que se ilumina cuando el módulo está encendido:
Dispone de 3 pines, directamente conectados al sensor, que permiten una conexión muy sencilla en placas de prototipado y con microcontroladores, como Arduino:
Los pines del módulo son los siguientes:
- OUT: Salida digital del módulo. Etiquetada con S. Envía una señal con la temperatura medida.
- VCC: Alimentación del módulo Es el pin central sin etiqueta. Soporta voltajes de entre 3V a 5.5V sin necesidad de resistencia.
- GND: Pin de conexión a tierra. Etiquetado como -.
Especificaciones técnicas
Rango de temperatura | -55° C a 125° C |
Tensión de alimentación | 3.0V a 5.5V |
Precisión | ± 0,5° C |
Dimensiones | 18,5 mm x 15 mm |
¿Cómo funciona el módulo KY-001?
El módulo KY-001 utiliza el efecto termoeléctrico del sensor. Es decir, cuando la temperatura cambia, la propiedad eléctrica del semiconductor en el sensor DS18B20 también cambia, lo que se traduce en una variación de voltaje. El sensor convierte esta variación en una señal digital que puede ser interpretada por un microcontrolador, como Arduino, mediante el protocolo 1-Wire. El Arduino puede, posteriormente, procesar la información y realizar acciones basadas en la temperatura medida.
El DS18B20 consta de una sonda que contiene el sensor de temperatura y otros componentes electrónicos necesarios para la medición. La sonda está diseñada para entrar en contacto con la fuente de temperatura que se va a medir (el aire, por ejemplo).
El DS18B20 opera utilizando el principio de que la tensión a través de una unión semiconductor-metal (unión PN) cambia con la temperatura. En el DS18B20, esta unión PN es parte de un semiconductor de silicio.
El sensor convierte la variación de tensión resultante de la temperatura en una señal analógica proporcional a la temperatura.
La comunicación con el DS18B20 se realiza a través del protocolo 1-Wire, desarrollado por Dallas Semiconductor. Este protocolo permite que múltiples dispositivos se comuniquen en un solo bus utilizando un solo cable. El DS18B20 tiene un identificador único de 64 bits que lo distingue de otros dispositivos en el mismo bus.
Los datos de temperatura se leen digitalmente desde el sensor a través del bus 1-Wire. La precisión y resolución de la lectura pueden ser configuradas mediante comandos de configuración.
¿Cómo conectar el módulo KY-001 con Arduino?
Materiales
En la siguiente tabla tienes la lista de materiales necesarios para conectar el módulo KY-001 con Arduino:
Una placa Arduino (Yo usaré Arduino UNO) | ||
Un módulo KY-001 | ||
Cables | ||
Una protoboard | ||
Un ordenador con el IDE de Arduino instalado |
Conexiones
Gracias a la estructura del módulo las conexiones con Arduino son muy sencillas. Puedes verlas en la siguiente imagen:
El pin izquierdo (marcado como -) va conectado a tierra. Como puedes ver en la imagen estoy utilizando una protoboard. La línea negativa (marcada en azul) la he conectado con el pin GND de Arduino (cable negro). Por eso he conectado en esa línea el pin izquierdo del módulo.
El pin central del módulo es la alimentación. Lo he conectado a 5V. La línea positiva de la protoboard la he conectado al pin de 5V del Arduino, por eso he conectado el pin de alimentación del sensor ahí (cable rojo).
Con estas dos conexiones tan simples conseguimos alimentar el módulo.
Ahora solo falta la conexión de la señal digital que utilizaremos para leer la temperatura. Es el último pin del módulo que nos queda por conectar (el que está marcado con una S). Como puedes ver en la imagen lo estoy conectando al pin digital 2 del Arduino con un cable azul. Si prefieres utilizar otro pin digital puedes hacerlo sin problema, pero debes tenerlo en cuenta cuando programes el sketch.
Si no quieres usar una protoboard puedes hacer las conexiones directamente con los pines de Arduino ayudándote de cables dupont macho-hembra:
¿Cómo programar el módulo KY-001 con Arduino?
Librerías
Vamos a necesitar dos librerías para programar este módulo:
Si instalas la librería Dallas Temperature desde el Library Manager del IDE de Arduino y no has instalado previamente la librería OneWire, tendrás la opción de instalar las dos a la vez, puesto que Dallas Temperature depende de OneWire para funcionar:
Si prefieres instalar OneWire por separado también puedes hacerlo desde el Library Manager del IDE de Arduino:
Sketch
Una vez tengas las dos librerías instaladas podrás programar el sketch. El código es el siguiente:
#include <OneWire.h>
#include <DallasTemperature.h>
// DECLARACIONES
const int KY001 = 2;
OneWire oneWire(KY001);
DallasTemperature sensor(&oneWire);
//CONFIGURACIÓN
void setup() {
Serial.begin(9600);
sensor.begin();
}
//FUNCIÓN LOOP
void loop() {
sensor.requestTemperatures();
float temp = sensor.getTempCByIndex(0);
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.println(" °C");
delay(1000);
}
Librerías
Lo primero que debes hacer es incluir las dos librerías en tu sketch (recuerda que debes instalarlas primero):
#include <OneWire.h>
#include <DallasTemperature.h>
Declaraciones
En el bloque de declaraciones necesitamos 3 elementos:
const int KY001 = 2;
OneWire oneWire(KY001);
DallasTemperature sensor(&oneWire);
La primera constante, a la que he llamado KY001, es el pin digital del Arduino en el que he conectado el módulo. En mi caso es el pin 2. Si tú lo has conectado a otro pin digital debes cambiar este valor por el que corresponda en tu caso.
El siguiente elemento es un objeto de tipo OneWire al que he llamado oneWire. Este objeto es necesario para que la librería Dallas Temperature pueda usar el protocolo 1-Wire para hacer la lectura de temperatura. Si te fijas, entre paréntesis he puesto la constante anterior (KY001), porque le debemos indicar el pin digital en el que se va a aplicar el protocolo.
Por último, tenemos un objeto llamado sensor de tipo DallasTemperature. Este objeto es el que usaremos para hacer las lecturas. Tal y como he dicho antes este objeto necesita el objeto anterior oneWire, por eso se le pasa como parámetro. Verás que lleva un & delante. Esto es así para indicar a DallasTemperature la dirección de memoria del objeto oneWire, de lo contrario no funcionará.
Configuración
Dentro de la función setup tenemos 2 instrucciones:
void setup() {
Serial.begin(9600);
sensor.begin();
}
Con la primera (Serial.begin(9600)) iniciamos el puerto serie que usaremos posteriormente para mostrar en el monitor serie la temperatura medida.
La segunda instrucción (sensor.begin()) sirve para iniciar el bus 1-Wire, que hemos configurado en el pin digital 2.
Ya ves que la configuración no tiene más misterio.
Función loop
Ha llegado el momento de realizar las lecturas de temperatura. Las implementaremos dentro de la función loop.
Con la primera instrucción enviamos un comando al sensor para indicarle que vamos a leer la temperatura:
sensor.requestTemperatures();
Con la siguiente instrucción realizamos la lectura en grados Celsius y almacenamos el resultado en la variable temp:
float temp = sensor.getTempCByIndex(0);
El resultado puede tener decimales, por eso la variable temp es de tipo float.
Te preguntarás por qué le paso un 0 a getTempCByIndex. Pues muy fácil. Estamos usando el protocolo 1-Wire que permite conectar varios sensores en serie con un único cable. A cada sensor que se conecta se le asigna un índice secuencial (empezando en 0). Si tuviésemos, por ejemplo, 3 sensores, los índices serían 0, 1 y 2. Como solo tenemos uno, tiene asignado el primer índice, es decir, el 0. Este indice es lo que debemos pasar a getTempCByIndex, para que sepa de qué sensor debe hacer la lectura.
La lectura estaría hecha y almacenada en la variable temp. Las siguientes instrucciones que tenemos en el código solo sirven para visualizar el resultado en el monitor serie:
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.println(" °C");
El resultado será algo como: «Temperatura: 26 ºC».
Y por último, nos queda una instrucción que ya hemos usando en múltiples ocasiones anteriormente:
delay(1000);
Un retardo de un segundo antes de realizar una nueva lectura. Recuerda que la función loop se repite de forma indefinida, por lo que se realizará una lectura de temperatura cada segundo y se visualizará en el monitor serie.
Y con esto estaría el sketch completo. Cárgalo en tu Arduino y comprueba los resultados obtenidos.
¡Suscríbete a la newsletter y no te pierdas nada!
Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).