
Tutorial RTC: Parte I – Configurar con RTClib
Parece algo sencillo e inconsecuente pero muchas veces necesitaremos tomar el tiempo o ejecutar tareas basadas en el tiempo “real”. Esto se refiere a la hora verdadera usada por la humanidad y no en base a un timer que iniciamos arbitrariamente hace tantos minutos o segundos. Para esto usamos un modulo RTC.
Requisitos:
- Computadora (mac)
- Arduino UNO
- Modulo RTC DS1307
- Breadboard
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
El modulo DS1307 RTC es este:

Este modulo debe ser programado para asignar la hora “real” humana. Una vez se hace esto, mientras tenga la batería CR2032 que trae atras, el modulo mantendrá la hora.
Primero lo que vamos a hacer es configurar el RTC para que obtenga la hora correcta. En este caso obtendrá la hora de nuestra computadora.
Las conexiones son:
SDA(rtc) – Pin Analogo 4 Uno
SCL(rtc) – Pin Analogo 5 Uno
VCC(rtc) – 5V Uno
GND(rtc) – GND Uno
Al final debería verse así:

El código:
[code]
// Fecha y hora para DS1307 RTC conectado via I2C & Wire lib
#include <Wire.h>
#include “RTClib.h”
#if defined(ARDUINO_ARCH_SAMD) // para la Zero
#define Serial SerialUSB
#endif
RTC_DS1307 rtc;
void setup () {
while (!Serial); // para Leonardo/Micro/Zero
Serial.begin(57600);
Wire.begin();
rtc.begin();
if (! rtc.isrunning()) {
Serial.println(“RTC no esta configurada!”);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// O si prefiere configurar una hora y fecha específica:
// Enero 21, 2014 a 3am:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print(‘/’);
Serial.print(now.month(), DEC);
Serial.print(‘/’);
Serial.print(now.day(), DEC);
Serial.print(‘ ‘);
Serial.print(now.hour(), DEC);
Serial.print(‘:’);
Serial.print(now.minute(), DEC);
Serial.print(‘:’);
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(” desde medianoche 1/1/1970 = “);
Serial.print(now.unixtime());
Serial.print(“s = “);
Serial.print(now.unixtime() / 86400L);
Serial.println(“d”);
// calcular una ida 7 días y 30 segundos en el futuro
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print(” now + 7d + 30s: “);
Serial.print(future.year(), DEC);
Serial.print(‘/’);
Serial.print(future.month(), DEC);
Serial.print(‘/’);
Serial.print(future.day(), DEC);
Serial.print(‘ ‘);
Serial.print(future.hour(), DEC);
Serial.print(‘:’);
Serial.print(future.minute(), DEC);
Serial.print(‘:’);
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
[/code]
Ese proyecto se puede ver aquí:

Para mayor información sobre este modulo, podemos estudiar esta referencia:
http://www.elecrow.com/wiki/index.php?title=Tiny_RTC
Veamos que utilidad le podemos dar a esto. En la siguiente parte analizamos el uso de las alarmas!