INFORMACIÓN
El DS3231 Reloj de Tiempo Real (RTC) es un módulo de reloj de alta precisión que permite mantener un registro exacto del tiempo y la fecha, incluso cuando el dispositivo principal está apagado. Funciona mediante un oscilador interno compensado por temperatura (TCXO) y un cristal de cuarzo integrado, lo que le permite reducir los errores de medición provocados por los cambios de temperatura; este módulo es la evolución del clásico RTC DS1307.
El DS3231 Reloj de Tiempo Real (RTC) se utiliza en proyectos que requieren mantener la hora y fecha exactas, como sistemas de registro de datos (data loggers), relojes digitales, alarmas programadas, sistemas de automatización, y controladores de procesos. También es común en proyectos IoT, donde es necesario sincronizar eventos o recopilar información en intervalos precisos. Gracias a su comunicación mediante interfaz I2C, es compatible con una amplia variedad de tarjetas de desarrollo, incluyendo Arduino, ESP32, ESP8266, Raspberry Pi, STM32, y PIC, entre otras.
Nota: La batería CR2032 sirve para que el módulo pueda mantener la fecha y hora actual cuando este no tenga energía, NO sirve como alimentación auxiliar.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Voltaje de Alimentación: 3.3 a 5 VDC.
- Interfaz de comunicación: I2C.
- Exactitud Reloj: 2 ppm.
- Dirección I2C del DS3132: Read(11010001), Write (11010000).
- Puede ser usado en cascada con otro dispositivo I2C, la dirección del AT24C32 puede ser modificada (por defecto es 0x57).
- Oscilador interno: Integrado.
- Memoria EEPROM: AT24C32 (4K * 8 bit = 32 Kbit = 4 KByte).
- Salidas vía pin:
- SQW: Programable de 1 Hz, 1 Khz, 4 Khz, 8 Khz.
- 32K : Oscilador interno de 32.768 Khz.
- Pila: Batería CR2032.
- Dimensiones: 40 mm x 25 mm x 15 mm.
- Peso: 6 g.
DOCUMENTACIÓN Y RECURSOS
- Librerías
INFORMACIÓN ADICIONAL
Funciones RTC.
- Fecha con segundos, minutos, horas, número día, día de la semana, mes y año.
- Compensación de año bisiesto.
- Formato de hora configurable en 12 o 24 horas.
- 2 Alarmas configurables.
- Circuito compensador de temperatura para el voltaje de referencia interno.
Test de prueba.
El siguiente diagrama de conexión y código es para corroborar el funcionamiento del módulo DS3231, se realizarán las conexiones para tener una comunicación vía I2C usando un Arduino UNO:

Código.
El siguiente programa nos ayudará a visualizar los datos en el monitor serial del IDE Arduino a 9600 baudios, mostrando la fecha actual en formato: AÑO, MES, DÍA, DÍA DE SEMANA, HORA, MINUTO, SEGUNDO y adicional incluye una función para programar la hora y minuto en donde se desee encender el LED 13 del Arduino.
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
String semana[7] = { "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado" };
String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
bool alarma = true;
void setup() {
Serial.begin(9600); //Habilitamos el puerto serie de Arduino IDE a 9600 bps
delay(1000);
if (!rtc.begin()) {
Serial.println(F("Couldn't find RTC"));
while (1);
} // Si se ha perdido la corriente, fijar fecha y hora
if (rtc.lostPower()) { // Fijar a fecha y hora de compilacion
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Fijar a fecha y hora específica. En el ejemplo, 21 de Enero de 2023 a las 03:00:00 //
rtc.adjust(DateTime(2023, 1, 21, 3, 0, 0));
}
pinMode(LED_BUILTIN, OUTPUT);
}
void fecha(DateTime date) {
Serial.print(date.year(), DEC);
Serial.print('/');
Serial.print(date.month(), DEC);
Serial.print('/');
Serial.print(date.month(), DEC);
Serial.print('/');
Serial.print(date.day(), DEC);
Serial.print("(");
Serial.print(date.hour(), DEC);
Serial.print(':');
Serial.print(date.minute(), DEC);
Serial.print(':');
if (date.hour() == 16 && date.minute() == 21) {
if (alarma = true) {
Serial.println("Alarma");
digitalWrite(LED_BUILTIN, HIGH);
alarma = false; //desactiva alarma
}
delay(1000); //configuración desactivación de alarma a las 14hr y 49 min
if (date.hour() == 16 && date.minute() == 22)
digitalWrite(LED_BUILTIN, LOW);
alarma = true;
}
}
void loop()
{
DateTime now = rtc.now();
fecha(now);
delay(3000);
}
La batería nos sirve para que el módulo pueda mantener la fecha y hora actual cuando el módulo o el Arduino se quedan sin energía, la batería No va a hacer que el módulo siga encendido, para hacer que siga haciendo el conteo del tiempo, hay que comentar la siguiente línea de código y volver a cargar el programa:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));



























Valoraciones
No hay valoraciones aún.