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.


RTC controla a un rele | RincónIngenieril

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);
}

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en enrique.rinconingenieril.es
Suscribete
Notificame
guest
14 Comments
Nuevos
Antiguos Más votados
Inline Feedbacks
View all comments
Ernestocastillo
Ernestocastillo
8 meses hace tiempo

hola buenas tardes yo quisiera que el relay se prendiera con el reloj por ejemplo a las 10:00h pero que se apague con sensor de luz o sensor de sonido

Naysha
Naysha
1 año hace tiempo

hola,conecte un relay, un rtc con mi arduino, puse todo la programacion como indicas pero me sale al reves, cuando tiene que prender se apaga y cuando se tiene que apagar se prende. Psdt: estoy usando un protoboard

Sergio
Sergio
1 año hace tiempo

Hola buenas querria saber si puedo programar en un modulo de 4 reles , 4 horarios diferentes ya que cada rele funciona en horas diferentes, es decir:
1 RELE : ELECTROVALVULA DE AGUA
2 RELE: BOMBA DESINFECTANTE
3 RELE: BOMBA AMBIENTADOR
4 RELE : BOMBA LIBRE
FUNCIONAN TODAS DE LUNES A DOMINGO PERO EN DIFERENTES HORARIOS SE TIENEN QUE ACTIVAR.

puedo hacerlo?

tomas t
tomas t
Reply to  Enrique Gómez
1 año hace tiempo

hola podrias hacer un ejemplo con esta idea que propone Sergio?

Fran
Fran
1 año hace tiempo

hola!! Queria activar un rele de 22.00H hasta las 23:00H. La siguiente estructura me valdria
if(now.hour() >= 22 && now.hour() <= 23){
digitalWrite(6,HIGH);
}else{digitalWrite(6,LOW);}
Gracias, un saludo

pepin
pepin
1 año hace tiempo

hola habria alguna diferencia de codigo si usamos el rtc ds3132?

el taper
el taper
1 año hace tiempo

hola mi intención seria utilizarlo en una pecera, para que a las 7:00 de la mañana encienda la luz de día ( blanca)y al mismo tiempo apague la luz noche(azul) y a las 8:00 de la tarde haga lo contrario, es decir que apague la blanca y encienda la azul, creando asi el efecto dia y noche , seria mejor utilizar una placa de un rele o mejor una de dos?
gracias

Andres
Andres
1 año hace tiempo

Se puede hacer esto mismo con RTC DS1302?