Ejercicio No. 2 – Reloj en Tiempo Real con Arduino y DS3231

En este ejercicio desarrollamos un sistema de referencia temporal para sistemas embebidos utilizando un módulo de reloj en tiempo real. El objetivo es aprender a integrar un RTC en un sistema basado en Arduino UNO R4 WiFi para obtener fecha y hora precisas de forma continua, incluso cuando el sistema se apaga.

Para lograrlo utilizamos el módulo DS3231 RTC Module, uno de los relojes en tiempo real más utilizados en sistemas embebidos debido a su alta precisión y estabilidad térmica. Este circuito integrado incluye un cristal compensado por temperatura (TCXO) y una batería de respaldo que permite mantener la hora durante meses o años sin alimentación externa.

El programa inicializa el módulo RTC, verifica su funcionamiento y posteriormente muestra en el monitor serial la fecha completa y la hora en formato HH:MM:SS, actualizando la información cada segundo.

Este tipo de componente es fundamental en aplicaciones donde se requiere marcar temporalmente eventos, como sistemas de monitoreo ambiental, registro de datos, automatización industrial o dispositivos IoT.


Módulo utilizado en el ejercicio

Reloj en tiempo real – DS3231 RTC Module

El DS3231 es un circuito integrado diseñado específicamente para mantener la hora con alta precisión. A diferencia de otros RTC más simples, este dispositivo incluye un oscilador compensado por temperatura, lo que reduce considerablemente el error en la medición del tiempo.

Características principales:

  • Comunicación mediante protocolo I2C
  • Precisión aproximada de ±2 ppm
  • Batería de respaldo para mantener la hora
  • Registro de fecha completa (día, mes, año)
  • Registro de hora (horas, minutos, segundos)

Gracias a estas características, el DS3231 es ampliamente utilizado en:

  • Registradores de datos (data loggers)
  • Sistemas de monitoreo ambiental
  • Dispositivos IoT
  • Automatización industrial
  • Sistemas de control embebidos

Arquitectura del sistema

El sistema es relativamente simple pero introduce un componente fundamental en muchas aplicaciones embebidas: la gestión del tiempo real.

Comunicación I2C

El módulo RTC se comunica con el microcontrolador utilizando el bus I2C.

Este protocolo utiliza únicamente dos líneas:

  • SDA → línea de datos
  • SCL → línea de reloj

Esto permite conectar varios dispositivos al mismo bus sin aumentar el número de pines utilizados en el microcontrolador.

En el caso del sistema basado en el Arduino UNO R4 WiFi, el bus I2C se inicializa utilizando la librería Wire.


Estructura del programa

El código del ejercicio está organizado en varias secciones que facilitan su comprensión y reutilización en otros proyectos.


1. Inclusión de librerías

El programa utiliza dos librerías principales:

  • Wire.h para gestionar la comunicación I2C
  • RTClib.h para controlar el módulo RTC

La librería RTClib proporciona funciones de alto nivel para acceder a la fecha y hora almacenadas en el dispositivo.


2. Inicialización del RTC

Durante la función setup() se realizan las siguientes operaciones:

  1. Inicialización de la comunicación serial a 115200 baudios
  2. Activación del bus I2C
  3. Verificación de que el módulo RTC está conectado
  4. Comprobación de pérdida de alimentación

Si el RTC detecta que ha perdido energía (por ejemplo, si se retiró la batería), el programa ajusta automáticamente la fecha y hora utilizando la información de compilación del programa.

Esto permite sincronizar rápidamente el reloj sin necesidad de introducir la hora manualmente.


3. Formato de fecha y hora

El programa utiliza dos arreglos de texto para mostrar la fecha de manera más legible:

  • diasSemana[]
  • mesesAnio[]

De esta forma la salida serial no muestra solo números, sino una representación completa como:

Fecha: 5 de Marzo de 2026 (Jueves)
Hora: 14:03:01

4. Función para formatear números

Se implementa una función auxiliar llamada:

imprimirDosDigitos()

Esta función asegura que los valores de hora, minuto y segundo siempre se muestren con dos dígitos, lo que permite obtener un formato estándar de reloj digital:

09:05:02

5. Bucle principal del sistema

Dentro de la función loop() el sistema realiza tres pasos principales:

  1. Leer la fecha y hora actual desde el RTC
  2. Formatear los datos para su visualización
  3. Mostrar la información en el monitor serial

Este proceso se repite cada segundo, lo que permite observar el avance del tiempo en tiempo real.


Funcionamiento del ejercicio

Cuando el programa se ejecuta, el sistema realiza las siguientes operaciones:

  1. Inicializa el bus I2C
  2. Verifica la presencia del módulo RTC
  3. Ajusta la hora si el dispositivo perdió energía
  4. Comienza a leer la fecha y hora continuamente

El monitor serial muestra una salida similar a:

====== FECHA Y HORA ACTUAL ======

Fecha: 6 de Marzo de 2026 (Viernes)
Hora: 09:41:12

Este tipo de información es esencial en sistemas que requieren registro temporal de eventos, por ejemplo:

  • Almacenar datos de sensores con marca de tiempo
  • Programar acciones automáticas
  • Registrar eventos en sistemas industriales
  • Sincronizar nodos en redes de sensores

Repositorio del proyecto

El código completo de este ejercicio está disponible en el repositorio oficial de SysOnChip.

Repositorio:

En el repositorio encontrarás:

  • Código fuente completo
  • Ejercicios adicionales de Arduino
  • Ejemplos con Raspberry Pi y FPGA
  • Material educativo para sistemas embebidos

Prompt recomendado para generar este ejercicio con IA

Si deseas generar este programa utilizando herramientas de inteligencia artificial, puedes utilizar un prompt estructurado como el siguiente:

Escribe un programa para Arduino UNO R4 WiFi que utilice un módulo de reloj en tiempo real DS3231.

Requisitos del sistema:

- Usar comunicación I2C
- Inicializar el RTC y verificar que esté conectado
- Detectar si el reloj perdió alimentación
- Ajustar la fecha y hora usando la fecha de compilación
- Mostrar fecha completa (día, mes y año)
- Mostrar hora en formato HH:MM:SS
- Actualizar la información cada segundo
- Incluir comentarios detallados en español
- Utilizar nombres de variables descriptivos

Este tipo de prompt permite generar código bien documentado y estructurado, ideal para proyectos educativos y sistemas embebidos.


Conclusión

El uso de un reloj en tiempo real como el DS3231 es un componente fundamental en muchas aplicaciones de sistemas embebidos. Incorporar una referencia temporal confiable permite evolucionar proyectos simples hacia sistemas más avanzados como:

  • Data loggers ambientales
  • Redes de sensores IoT
  • Sistemas de monitoreo industrial
  • Plataformas de agricultura inteligente

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio