Arduino rtc ds1307


Deseas obtener y trabajar con la fecha y hora en tu arduino, o tener un calendario, en este post te explicaremos las bases del reloj de tiempo real

oscar Escrito por oscar 02 July 2016 13709 1

Alguna vez has querido hacer un proyecto que incorpore un reloj de tiempo real y conectarlo a tus proyectos para que controlen procesos u otros mecanismos en una hora determinada o hacer solamente visualizar la hora como hobby

Vídeo

A continuación, encontrara el vídeo en donde se explica el funcionamiento del circuito.

Existe una gran variedad de formas de poder medir y controlar el tiempo desde arduino, como usar el contador de mili-segundos que incorpora, cargar la librería de time o usar un componente externo como un reloj de tiempo real, el cual por su precisión y por incorporar una batería puede mantener la hora que sea configurada[1].

Reloj de tiempo real

El reloj de tiempo real o real time clock es un circuito integrado que permite mantener la hora en un sistema de hardware, aun si este no se encuentra en funcionamiento o encendido, es usado con el propósito de mantener un contador para hacer el cálculo de la hora.

Instrucciones

La librería del reloj maneja las siguientes instrucciones:

RTC_DS1307 rtc

Crea el objeto del rtc

RTC_DS1307 rtc;

rtc.begin()

Inicializa el reloj

rtc.begin();

rtc.isrunning()

Verifica si el reloj inicio correctamente

Retorna

  • true: el reloj inicio correctamente
  • false: el reloj no pudo iniciar
rtc.isrunning();

DateTime(año, mes, dia, hora, minuto, segundo)

Permite establecer el tiempo en formato que el arduino lo pueda entender.

Parámetros

  • año: establece el año
  • mes: establece el mes
  • dia: establece el día
  • hora: establece el hora
  • minuto: establece el minuto
  • segundo: establece el segundo
DateTime(2015, 1, 1, 3, 0, 0)

rtc.adjust

Permite establecer la hora en el reloj para poderla usarla.

Parámetros

  • DateTime: Se pasa la hora al reloj
rtc.adjust(DateTime(2015, 1, 1, 3, 0, 0));

rtc.now()

Crea un objeto con la última fecha y hora

DateTime now = rtc.now();

now.year()

Con esta función retornamos el año

now.year()

now.month()

Con esta función retornamos el mes

now.month()

now.day()

Con esta función retornamos el día

now.day()

now.hour()

Con esta función retornamos la hora

now.hour()

now.minute()

Con esta función retornamos los minutos

now.minute()

now.second()

Con esta función retornamos los segundos

now.second()

now.unixtime()

Permite obtener la fecha en formato unix

now.unixtime()

Materiales

Material Cantidad Descripción
Arduino 1 Cualquier funciona
CI ds1307 1 Modulo reloj
Cristal de 32.768Khz 1 Cristal para el reloj
Condensadores 22pf 2 Condensadores para el cristal
Resistencias de 10KΩ 2 Resistencias de conexión I2C.
Batería de 3V 1 Batería para mantener la hora y fecha del reloj
Siporte de batería 1 Soporte para poder colocar la batería
Modulo ds1307 1 Modulo reloj con la batería

Conexión

Tenemos dos formas de realizar la conexión, uno es por medio de circuito integrado en paquete DIP y el otro es por medio de modulo que ya trae integrado todas las conexiones a continuación tenemos las dos formas.

Circuito integrado

Es circuito integrado cuenta con 8 pines, en el datasheet esta mas detalle; para la conexión tenemos que tener en cuanta el cristal que es de 32.768Khz y las resistencias de 10K conectadas al SCL y SDA.

RTC DS1307 circuito
RTC DS1307 circuito
RTC DS1307 imagen
RTC DS1307 imagen

Modulo

Lo único que debemos hacer es conectar nuestro módulo de reloj a nuestro arduino por medio de la comunicación I2C, la donde la librería RTClib se encarga de hacer el resto de trabajo, en la siguiente imagen podemos ver como es la conexión del circuito.

Circuito arduino rtc ds1307

Código

El código que usaremos es el mismo que está en el ejemplo de la librería, ya que solo tenemos que establecer la fecha hora y solo leer los valores de cada parámetro como lo explique en las instrucciones.

/*Reloj de tiempo real con DS1307 en arduino
*
* Copyright: codigoelectronica.com
* Author: Oscar Fernandez
* License: MIT
*/

//Cargamos librerias
#include <Wire.h>
#include "RTClib.h"

//Instanciamos el rtc
RTC_DS1307 rtc;

//Iniciamos el programa
void setup () {
  Serial.begin(9600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); 
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    //La siguiente linea es para establecer la fecha y hora al ds1307 al momento de compilar
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    String s = DateTime(2015, 1, 1, 3, 0, 0);
    Serial.println(s);
    //Para establecer la fecha y hora manualmente
    // rtc.adjust(DateTime(2015, 1, 1, 3, 0, 0));
  }
}

void loop () {
  //Cargamos los valores de fecha, hora en variable now
  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(" since midnight 1/1/1970 = ");
  Serial.print(now.unixtime());
  Serial.print("s = ");
  Serial.print(now.unixtime() / 86400L);
  Serial.println("d");
    
  Serial.println();
  delay(3000);
}

Observemos que al iniciar nuestro código lo que hacemos en llamar la librería wire, encargada de la comunicación I2C, luego cargamos la librería del reloj RTClib y creamos el objeto del rtc, luego procedemos a verificar si el rtc esta funcionando con rtc.isrunning para poder setearle la hora actualizada.

Cuando ya tengamos el circuito conectado, procedemos leer la fecha y hora como se demuestra en el loop cargando un valor nuevo con rtc.now y luego extrayendo cada uno de los parámetros del reloj e imprimiéndoles en la terminal serial como se muestra en la siguiente imagen.

Imagen reloj ds1307 ejemplo

Con este sencillo ejemplo podemos obtener la hora y la fecha en nuestros proyectos, si te gusto este ejercicio cometa comparte con tus amigos y síguenos en nuestras redes sociales.

Referencias

[1] maximintegrated https://datasheets.maximintegrated.com/en/ds/DS1307.pdf, Consultado junio 2019


Comentario

Debe aceptar antes de enviar
kolin
kolin

05 January 2017 16:06

solo quiero preguntarte , al instalar el programa este me dara la hora en formato 12 horas? , segun el articulo al conpilar toma la hora del pc y la transmite,,,es asi?,,,mil gracias.