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

Display Oled Azul 128x64 1.3 " I2C SH1106
Sensor de Impacto KY-031
2N3904 Transistor BJT NPN 40V TO-92
Controlador de Motor a Pasos 5V-12V DC
ET828 Multímetro Osciloscopio 2 en 1 AC DC
Transistor IRF840
Matriz LED 8x8 3mm 1088AS
Bateria 18650 3.7V 2200mAh ±5%
Raspberry Pi Pico W
UNIT Starter Kit – Nivel Intermedio con 20 Prácticas
Conector Estéreo de 3.5mm 90 grados Niquelado Negro
Lector de Memorias Micro SD para Arduino
MAX4466 Amplificador de Microfono Electret
UShieldX Shield de Expansión para Arduino UNO
Sensor Interruptor Magnético KY-021
Placa Perforada Tipo Protoboard 48 x 133 mm
XL4015 Modulo Regulador Step Down 50W 5A
Led RGB Catodo Comun KY-016
S2M Diodo 1000V 2A SMB
Cable Dúplex para Bocina 22 AWG 2 Vías Bicolor 1 Metro
TPA3110 Amplificador de Audio 30W
46122 Clavijas Planas de Hule Volteck
BTS7960 Driver Puente H 43A
Malla Desoldadora de Cobre 2mm 1.5m CP-2015
























Valoraciones
No hay valoraciones aún.