Arduino rtc ds1307

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 milisegundos 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 optener 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 Consensadores 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 bateria

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.

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.

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éndolos en la terminal serial como se muestra en la siguiente imagen.

Con este cansillo 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

Referencias

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

Comentarios

Para dejar el comentario solo necesitamos tu correo que registraste en la pagina, pero si aun no te haz registrado se creara el usuario automaticamente.

  • kolin
    kolin
    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.

Detalle contenido

base-arduino-rtc-DS1307
Generic placeholder image
Oscar Fernandez Alzate

02, Julio 2016

3896
Categorías
ARDUINO