Descripción
Un Reloj de Tiempo Real (RTC) es un chip que nos permite conservar la hora y obtener su valor cuando lo deseemos. Este modelo RTC DS3231 (DS-3231 / MW-084) es la versión mejorada del RTC DS1307 además, cuenta con una pila botón para seguir manteniendo la hora cuando se quita la alimentación del circuito principal. La precisión de este modelo alcanza valores de desviación de 1-2 segundos cada 6 días, al estar compensado en temperatura internamente.
La comunicación desde el Arduino se realiza mediante el bus i2c, de manera sencilla y con muy pocos conductores. Adicionalmente, este módulo incorpora una memoria EEPROM i2c 24C32 de 32K que permite almacenar algunos valores para registros y mediciones.
Incluye portapilas para pila CR2032 (pila no incluida), que permite conservar la hora durante grandes periodos de tiempo (meses o años). Sus dimensiones son de 27 x 28 x 8.4 mm (aproximadamente)
- Compensación automática de meses de 31 días y años bisiestos
- Número de alarmas configurables: 2
- Incluye memoria AT24C32 (32Kb) – dirección por defecto: 0x57
- Interfaz i2c 400kHz
- Portapilas: CR2032
- Dimensiones: 38 x 22 x 14 mm
- Peso: 8g
- Tensión de funcionamiento: 3,3 – 5,5 V
- Temperatura: 0 – 40 ºC
Más información: Hoja de datos 24C32
Conexionado:
- Pin SCL: al pin A5 de Arduino UNO/nano
- Pin SDA: AL pin A4 de Arduino UNO/nano
- Pin Vcc: A 5V de Arduino
- Pin GND: A masa de Arduino
Código de ejemplo (basado en la librería RTClib):
#include <Wire.h> #include "RTClib.h" RTC_DS3231 rtc; String DiasDeLaSemana[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" }; // *** CONFIGURACIÓN *** void setup() { Serial.begin(9600); // Configuración Monitor Serie delay(1000); if (!rtc.begin()) { // Inicializa RTC Serial.println(F("Error de conexion")); while (1); } // Si se ha perdido la corriente, fijar fecha y hora if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Datos de fecha y hora de compilación del código // La línea siguiente permite fijar la fecha y hora a mano // 14 de Enero de 2016 a las 23:00:00 // rtc.adjust(DateTime(2016, 1, 21, 23, 0, 0)); } } // *** Función para imprimir datos por pantalla *** void printDate(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(DiasDeLaSemana[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(); } // *** CÓDIGO PRINCIPAL *** void loop() { DateTime now = rtc.now(); // Lee datos del RTC printDate(now); delay(5000); }
Valoraciones
No hay valoraciones aún.