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 (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 minutos al día. En caso de necesitar más precisión es posible utilizar el RTC DC3231, de características muy similares a este pero con mejor precisión.
La comunicación desde el Arduino se realiza mediante el bus i2c, de manera sencilla y con muy pocos conductores. Este módulo se alimenta a 5V y puede conectarse directamente a Arduino. 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)
Más información: Hoja de datos DS1307 / 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_DS1307 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.