domingo, 1 de diciembre de 2013

Sensor de Temperatura - Keyes KY001, (KY001, KY-001)



El proyecto que presentamos a continuación pretende medir la temperatura ambiente usando un sensor Keyes  KY001.

Existen muchos tipos de sensores de temperatura en el mercado, pero uno de los más populares es el DS18B20 de Dallas. Justo el sensor que monta el primero de los módulos Keyes que podéis encontrar en los Kits KEYES 37-1, o bien por separado.

Todos recordamos cómo antiguamente se medía la temperatura con unos termómetros analógicos de mercurio




y aunque un poco lentos, para nosotros era totalmente funcional. El problema con nuestro Arduino es que es un microcontrolador que gestiona mejor señales digitales que analógicas, así que si tuvieramos que usar cualquier sensor analógico, o bien, tendríamos que procesar la información usando los puertos analógicos de nuestra placa o bien, deberíamos usar un módulo de conversión de señal analógica a digital. Algo que aunque existe, no es tan popular como usar este sensor DS18B20 de Dallas que ya implementa en su propio diseño todo este asunto de la conversión. Si nos fijamos bien. veremos que aparte de la conexión de alimentación y tierra habituales, con un solo terminal, podremos comunicarnos con él. Más simple no nos lo podemos imaginar. 
Los aspectos más relevantes de este sensor DS18B20 de Dallas son los siguientes 

  • Se comunica a través de un solo pin usando el protocolo de comunicación OneWire.
  • No requiere componentes externos
  • Puede operar tanto con 3.0V como con 5.5V
  • No consume energía cuando está en modo espera
  • El rango de temperatura que puede medir va desde los -55ºC hasta los 125ºC
  • Su precisión es de 0.5ºC
  • La resolución del termómetro es programable (desde los 9 a los 12 bits)
  • El tiempo de conversión de la temperatura en la mayor resolución (12bits) es de 750ms
  • Cada sensor tiene un número único de serie (unique silicon serial number), lo que permite tener varios a la vez en nuestro proyecto y no tener problemas de comunicación entre ellos.


Para su construcción necesitaremos los siguientes elementos:


REFERENCIA
CANTIDAD
FOTO

Módulo Keyes KY001


1



Protoboard



1







Cables colores






3









Arduino






1





DIAGRAMA DE CONEXIÓN


FUNCIONAMIENTO

El funcionamiento es el siguiente, cada medio segundo aproximadamente Arduino solicita al módulo KY001 la temperatura ambiente en grado Celsius y la muestra por medio del monitor serie (que recordemos se activa con las teclas Ctrl+Mayúsculas+M).

El aspecto que obtendremos será parecido a éste:




Para ello, primero tendremos que cargar un par de librerías:
  • OneWire que gestionará el protocolo de comunicación entre Arduino y el sensor
  • DallasTemperature, que nos permitirá obtener la información deseada


#include <OneWire.h>

#include <DallasTemperature.h>

Si no recordáis bien, lo que era una librería o para qué servía, podéis acceder a la entrada Escribir una librería para Arduino,donde a partir de un ejemplo simple, podíamos ver claramente como se puede simplificar mucho el código que debemos escribir en nuestro sketch, haciendo uso de ellas.

Una vez cargadas las dos librerías, solo tendremos que instanciarlas para empezar a usarlas. Esto es, si nos imaginamos que vamos a hacer una tarta de bizcocho, una librería podría servirnos para hacer la forma, pero solo cuando usamos el molde (osea nuestra librería de forma) tendremos un objeto sobre el que trabajar.

Pues bien, en nuestro caso, crearemos dos objetos, uno para comunicarnos (tenemos las reglas de comunicación, la librería OneWire, pero no hace falta implementarlas si queremos comunicarnos), y otro para traducir (nos podemos comunicar con un japonés, pero si no tenemos un traductor, no sabremos interpretar lo que escuchamos, para eso usamos el diccionario Arduino-Dallas, que viene dado por la librería DallasTemperature. Y como podríamos tener tantos sensores similares como queramos, tenemos que darle un diccionario a cada uno de ellos. Por eso crearemos tantos objetos como sensores, en nuestro caso solo uno en el Pin 2.

OneWire oneWire(2);
DallasTemperature sensors(&oneWire)

Nota: para que el proyecto sea más flexible, en realidad usaremos un truco, y es usar una palabra comodín "#define" que nos permite definir el pin que queremos usar en un solo sitio y el IDE  antes de compilar el sketch, sustituye este palabra por el número que le hemos asignado. Así si tenemos un sketch muy largo, y estamos cambiando continuamente el PIN donde vamos a colocar la señal de nuestro sensor, solo tendríamos que cambiar esta parte del código en un solo sitio. Y nos quedaría así

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire)

SKETCH


Si queréis descargaros el sketch y usarlo directamente en vuestra placa, el fichero os lo dejo más a bajo o podéis descargarlo directamente aquí, aunque es mejor que intentemos siempre copiarlo a mano, de este modo nos vamos familiarizando con las estructuras de programación, sus funciones y los modos más comunes de error que cometeremos a medida que vayamos desarrollando programas más complejos.


Y ya sabéis, si tenéis alguna sugerencia  de mejora o duda, no tenéis más que mandarnos un correo a



e intentaremos responder a vuestra pregunta lo antes que podamos.



1 comentario: