Domina el Tiempo con Arduino: Un Tutorial Paso a Paso para Configurar y Utilizar el Módulo de Real Time Clock DS3231

Introducción

En este tutorial, te mostraremos cómo utilizar el módulo de reloj en tiempo real DS3231 con la plataforma Arduino. No te preocupes, te guiaremos a través de cada paso del proceso. Al final, serás capaz de configurar la fecha y la hora, y visualizarlos en el monitor serial de Arduino.

 

¿Qué es el DS3231?

El DS3231 es un reloj en tiempo real (RTC) de bajo costo y alta precisión que opera a través del protocolo I2C. Este dispositivo incluye un oscilador de cristal con compensación de temperatura (TCXO) y un cristal integrado, lo que mejora la precisión a largo plazo. Puede seguir manteniendo una hora precisa incluso cuando se interrumpe la alimentación principal, gracias a una entrada para batería de respaldo.

Este RTC es capaz de mantener información sobre segundos, minutos, horas, día, fecha, mes y año, ajustando automáticamente la fecha al final de cada mes y teniendo en cuenta los años bisiestos. Puede operar en formato de 24 horas o de 12 horas con un indicador de AM/PM, y ofrece dos alarmas programables y una salida de onda cuadrada programable.

Los datos y las direcciones se transfieren de forma bidireccional a través del protocolo I2C. Además, el DS3231 monitoriza el estado de VCC para detectar fallos de alimentación, proporcionar una salida de reset y cambiar automáticamente a la alimentación de respaldo cuando sea necesario. 

También puedes ver el datasheet completo aquí.

Diagrama

Gracias a que el DS3231 utiliza el protocolo I2C solo necesita dos cables para comunicarse.

  1. Conecta el pin VCC del DS3231 al pin 5V del Arduino.
  2. Conecta el pin GND del DS3231 al pin GND del Arduino.
  3. Conecta el pin SDA del DS3231 al pin A4 del Arduino.
  4. Conecta el pin SCL del DS3231 al pin A5 del Arduino.

Puedes descargar el diagrama esquemático en PDF aquí.

 Configuración del Software

Primero, deberás instalar la biblioteca "DS3231" en el IDE de Arduino. Ve a Sketch -> Include Library -> Manage Libraries, luego busca "DS3231" en la barra de búsqueda y haz clic en "Install".

Configuración de Fecha y Hora

Ahora vamos a configurar la fecha y hora en nuestro RTC. Este proceso solo necesitas hacerlo una vez. Después de configurar la fecha y hora, el módulo DS3231 mantendrá la hora, incluso si se interrumpe la alimentación de Arduino.

El primer paso es importar la libreria Wire que se usa para la comunicación I2C y la librería DS3231.

#include <DS3231.h>
#include <Wire.h>

 

Se declara un objeto DS3231.

DS3231 myRTC; 

Declaramos variables tipo byte cuyo contenido se movera a los registros donde el dispositivo guarda la fecha y hora, les damos los valores de hora y fecha actualizados.

byte year = 23;            

byte mes = 12;              

byte dia = 28;              

byte dia_de_la_semana = 4;  

byte hora = 15;           

byte minuto = 24;           

byte segundo = 0;  

Declaramos una variable tipo booleano que usaremos como argumento de una función después, el valor debe ser true para configurar el formato a 12Hrs o false para poner el RTC en formato de 24Hrs.

bool Modo_Hrs = true; 

En la función setup iniciamos la comunicación I2C y configuramos el formato del RTC.

  Wire.begin();                 

  myRTC.setClockMode(Modo_Hrs);

 Con las siguientes funciones configuramos fecha y hora:

  myRTC.setYear(year);             

  myRTC.setMonth(mes);             

  myRTC.setDate(dia);              

  myRTC.setDoW(dia_de_la_semana);  

  myRTC.setHour(hora);        

  myRTC.setMinute(minuto);   

  myRTC.setSecond(segundo);  

En la función void solo agregamos un retardo.
El código completo esta a continuación:
Código

Visualización de Fecha y Hora en el Monitor Serial

Una vez configurada la hora, podemos recuperarla y mostrarla en el Monitor Serial.

Abriremos un nuevo sketch y después de importar librerías y declarar el objeto DS3231 agregamos dos variables tipo bool que nos serviran como banderas para saber si esta configurado el formato de 12Hrs y en caso de que si, imprimir PM o AM.

bool h12;       

bool hPM;

 

Agregamos otra bandera que nos indicara si el contador de años del RTC desbordo porque se paso el valor 99.

bool centurie;

 

En la función setup() iniciamos la comunicacion I2C y el monitor serial.

En el loop() llamaremos las funciones para saber fecha y hora e imprimirlas.

A la función para saber la hora se le pasan de argumento las banderas que declaramos antes:

myRTC.getHour(h12, hPM)

Para obtener minutos y segundos se usan las funciones:

myRTC.getMinute()
myRTC.getSecond()

 

Por último con un if comparamos las banderas h12 y hPM para imprimir con el formato correcto, quedando el código completo de la siguiente forma:

Código
Con este código, tu Arduino leerá la fecha y hora del módulo DS3231 cada medio segundo, y la mostrará en el Monitor Serial del IDE de Arduino.
¡Y ahí lo tienes! Ahora deberías ser capaz de utilizar el módulo de reloj en tiempo real DS3231 en tus propios proyectos de Arduino. Esperamos que este tutorial te sea útil y te ayude a familiarizarte con el DS3231. ¡Feliz codificación!

Productos Relacionados

Ver artículo

Ver artículo

Rtc

Deja un comentario