INFORMACIÓN
Módulo RTC DS3231 Reloj de Tiempo Real podrás integrarlo a tus proyectos para que tengan la capacidad de almacenar y llevar la cuenta de fecha y hora por medio de la interfaz de comunicación I2C.
El módulo está basado en el RTC DS3231 de MAXIM y la EEPROM AT24C32 de ATMEL. Ambos circuitos integrados comparten el mismo bus comunicación con el Protocolo I2C. El RTC DS3231 es la evolución del clásico RTC DS1307. La principal diferencia con el DS1307 es el oscilador interno compensado por temperatura, lo que hace que su precisión sea muy alta. La memoria EEPROM AT24C32 permite almacenar 32Kbits (4K Bytes) de datos de manera permanente.
*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 DC: 3.3V ~ 5V
- Tipo de Comunicación: I2C
- Bajo consumo de energía
- Compatible con Arduino, Raspberry Pi y otras tarjetas.
- Exactitud Reloj: 2ppm
- Dirección I2C del DS3132: Read(11010001) Write(11010000)
- Memoria EEPROM AT24C32 (4K * 8bit = 32Kbit = 4KByte)
- RTC de alta precisión DS3231 con oscilador interno
- Puede ser usado en cascada con otro dispositivo I2C, la dirección del AT24C32 puede ser modificada (por defecto es 0x57)
- No incluye Batería CR2032
- Dimensiones: 38 mm x 22 mm x 12 mm
Funciones RTC:
- Fecha con segundos, minutos, horas, numero 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
DOCUMENTACIÓN Y RECURSOS
INFORMACION ADICIONAL
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, DIA, DIA 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); //Esperamos 1 segundo 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.day(), DEC); Serial.print("(");
Serial
.print(semana[date.dayOfTheWeek()]); Serial.print(")");
Serial
.print(date.hour(), DEC); Serial.print(':');
Serial
.print(date.minute(), DEC); Serial.print(':');
Serial
.print(date.second(), DEC); Serial.println(); 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 linea de código y volver a cargar el programa:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Valoraciones
No hay valoraciones aún.