En ciertas ocasiones necesitamos realizar acciones de forma coordinada o a una hora determinada. Es en estos casos cuando necesitamos conocer la fecha y hora actualizada, cosa que podemos hacer con un RTC. Ese dispositivo desconocido para muchos y adorado por otros que permite a nuestro microcontrolador conocer la fecha y la hora en base al área de tiempo en el que te encuentres.
Por ejemplo podemos llegar a necesitar activar un relé a una hora concreta. Imagina despertarte a las 07:00 de la mañana y justo cuando llegues a la cocina acabe de caer a tu taza de la suerte la ultima gota de tu café favorito. Esta es una de las míticas e infinitas aplicaciones para las cuales puedes necesitar un RTC. Así que ya sabes, pon un RTC en tu vida.
Cuando se trata de que el microcontrolador sepa que hora exacta es, podemos recurrir a distintas técnicas, pero la reina indiscutible es usar un reloj de tiempo real.
Podemos conectar un dispositivo a Internet y obtener la hora desde un servidor NTP, sin embargo, el RTC sigue siendo una alternativa muy interesante para aquellos dispositivos que no están conectados. Otra opción puede ser combinar estas dos tecnologías, podemos tener un RTC que una vez al día se sincroniza con un servidor NTP.
Controlar un relé con un RTC
En este caso vamos a ver un ejemplo que nos permitirá activar un pin digital a una hora concreta y desactivarlo a otra hora también definida. Usaremos la librería RTClib.h la cual puedes descargar desde aquí.
La conexión entre el RTC y Arduino se suele realizar por medio de I2C o de SPI.
En el caso del I2C conectaremos el pin SDA del módulo RTC con el pin SDA de Arduino y lo mismo para el SCL.
En caso de usar SPI, las conexiones son idénticas, solo que con los nombres MISO, MOSI, SCK y CS, lo conectaremos siguiendo los nombres.
Las líneas I2C deben estar unidas a Vcc mediante dos resistencias PullUp, sin embargo esto es algo que no te debe preocupar en exceso, probablemente la resistencia PullUp esté ya integrada en el propio módulo del RTC.
Puedes ver el vídeo explicativo y obtener los códigos que uso en el tutorial a continuación.
Código para Arduino
El uso de este tipo de dispositivos de tiempo real en Arduino es muy sencillo ya que a estas alturas, alguien a solucionado el problema creando librerías para ello.
Lo primero será importar las librerías y crear el objeto RTC con el cual accederemos a la información del reloj de tiempo real.
En el setup simplemente inicializamos el RTC y en loop recuperamos los valores de tiempo con el método now y el objeto de tipo DateTime.
Primero creamos el objeto now y lo asociamos con el contenido que devuelve el método now();
Para acceder a la hora usaremos now.hour(), es decir, accedemos al método hour del objeto now. De manera análoga haremos con el resto de valores como con los minutos.
#include <Wire.h> #include "RTClib.h" RTC_DS1307 RTC; void setup () { pinMode(13,OUTPUT); Wire.begin(); RTC.begin(); } void loop () { DateTime now = RTC.now(); if(now.hour() == 15 && now.minute() == 01){ digitalWrite(13,HIGH); } else if(now.hour() == 15 && now.minute() == 02){ digitalWrite(13,LOW); } delay(3000); }