DS1307 Reloj Calendario

Descripción

 

Este es un reloj de tiempo real con batería de respaldo (RTC – Real Time Clock) que permite al microcontrolador mantener tiempo; hora y fecha, aún si el circuito electrónico en el que se encuentra se queda sin energía. Es perfecto para llevar registro de datos, reloj de capacidad, sellado de tiempo, temporizadores y alarmas, etc. Este RTC se usa en conjunto con un microcontrolador.

 

El DS1307 RTC es el más popular, y funciona mejor con los microcontroladores basados en 5V como el Arduino. Un reloj de tiempo real es básicamente un reloj que funciona con una batería y mantiene la hora, incluso cuando hay un corte de energía. El uso de un RTC, puede realizar un seguimiento de los plazos largos, aunque se reprogramar el microcontrolador al desconectarlo del USB o de un enchufe de alimentación.

ds1307 modulo guatemala electronica electronico arduino

Si bien este tipo de cronometraje básico está bien para algunos proyectos, algunos proyectos tales como registradores de datos, relojes, etc., tendrán que tener cronometraje consistente que no se restablece cuando la batería Arduino muere o se reprograme. Por lo tanto, se incluye un RTC independiente. El circuito integrado RTC se especializa en mantener la noción del tiempo. Se puede contar con años bisiestos y saber cuántos días se encuentran en un mes, pero no hacerse cargo de horario de verano (porque cambia de un lugar a otro, y de un RTC a otro).

ds1307 guatemala electronica practica

En conjunto se utiliza una pila de botón (batería de litio 3V CR2025 o CR2032), el DS1307 se activara lo largo de mucho tiempo, incluso cuando el Arduino se apague o se reprograme.

 

Librería de Arduino

 

Cualquier microcontrolador de 5V con protocolo de comunicación i2c integrado puede utilizar fácilmente el DS1307 y el más usado con este es el Arduino. Para la biblioteca RTC, se debe utilizar la librería RTClib de JeeLab, permite obtener y establecer el tiempo de un DS1307 (originalmente escrito por JeeLab).

 

 

Lo pueden descargar del siguiente link:

https://github.com/adafruit/RTClib

 

Para saber cómo instalar una librería visite el siguiente link

Cableado del módulo a la plataforma Arduino

 

Primero se debe de colocar la batería en el porta batería del módulo, el cual se encuentra en la parte inferior. El modulo posee 6 pines: SQ, DS, SCL, SDA, VCC, GND y BAT. De los cuales para esta práctica, 4 son de vital importancia: SCL, SDA, VCC y GND los cuales corresponden a:

 

  • VCC y GND: Se utilizan 5V para alimentar el circuito integrado RTC cuando se desea “consultar” por el tiempo desde el microcontrolador. Si no hay señal de 5V, el chip se va a “dormir” usando la energía de la batería de litio de 3V para efectuar la copia de seguridad.
  • SCL es el pin de reloj i2c - es necesario para la comunicación con el RTC.
  • SDA es el pin de datos I2C - es necesario para la comunicación con el RTC.

En caso de utilizar Arduino UNO o LEONARDO el cableado deberá de ser de la siguiente manera:

 

arduino uno leonardo ds1307 fecha hora guatemala electronica electronico

En caso de Arduino UNO y LEONARDO los pines de comunicación I2C se encuentran cerca del pulsador de RESET y corresponden a SCL y SDA:

Descripción del código

 

El código consta de la escritura y lectura del horario, pero para una mayor comprensión iniciaremos con la lectura.

 

LECTURA DE HORA

//Ejemplo basico para la lectura de la hora y fecha

//del modulo DS1307

//www.ABCelectronica.net

 

#include <Wire.h> //llamado de libreria

#include "RTClib.h" //llamado de libreria DS1307

 

RTC_DS1307 RTC;

 

void setup() {

  Serial.begin(57600); 

  Serial.println("Inicio de lectura");

  

  Wire.begin();

  RTC.begin();

}

 

void loop() {

    DateTime now = RTC.now();// funcion que regresa tiempo

 

    Serial.print(now.year(), DEC);//año

    Serial.print('/');

    Serial.print(now.month(), DEC);//mes

    Serial.print('/');

    Serial.print(now.day(), DEC);//dia

    Serial.print(' ');

    Serial.print(now.hour(), DEC);//hora

    Serial.print(':');

    Serial.print(now.minute(), DEC);//minuto

    Serial.print(':');

    Serial.print(now.second(), DEC);//segundo

    Serial.println();

    delay(950);

  

   }

 

Utilizando la función callnow() esta nos regresa el objeto DateTime el cual describe el año, mes, día, hora, minuto y segundo. Dentro de la librería se encuentran RTC.year() que proporciona el año, RTC.hour() que proporciona la hora y así sucesivamente.

 

Una vez cargado el código, en el monitor serial (herramientas>monitor serial) se observara algo como lo siguiente:

Esto significa que el RTC no posee la hora, por lo que el tiempo será de 0:0:0, debido a que anteriormente no tenía la batería instalada o no fue “escrita” la hora y fecha. Por lo que una vez instalada la batería se recomienda no quitarla para no “perder” la hora.

ESCRITURA DE HORA

 

El código a continuación corresponde al mismo de lectura pero con tres líneas de programación adicionales:

//Ejemplo basico para la lectura de la hora y fecha

//del modulo DS1307

//www.ABCelectronica.net

 

#include <Wire.h> //llamado de libreria

#include "RTClib.h" //llamado de libreria DS1307

 

RTC_DS1307 RTC;

 

void setup () {

    Serial.begin(57600);

    Wire.begin();

    RTC.begin();

 

  if (! RTC.isrunning()) {

    Serial.println("RTC is NOT running!");  

    RTC.adjust(DateTime(__DATE__, __TIME__));

  }

}

 

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();

   

    delay(950);

}

La función RTC.adjust que se encuentra en la línea de código siguiente:

Permite tomar la fecha y hora según el equipo (PC) en que se encuentra conectado el Arduino y permite programar el RTC. Por lo que se debe tomar en cuenta que la PC tenga la hora correcta.

 

OJO: Una vez abierto el software deberá de cargar inmediatamente el código de escritura, ya que si lo compila y lo carga más tarde, el reloj se apagará y el tiempo se encontrara atrasado.

 

Luego de cargado el código, se observara en el monitor serial (herramientas>monitor serial) lo siguiente:

Una vez realizada la escritura de la hora en el RTC, se recomienda cargar nuevamente el codigo de LECTURA u otro codigo que no posea las tres lineas adicionales ya que puede existir una sobreescritura cada vez que se conecte el arduino a la PC.

Sobre referencia de la información y para conocer más sobre el código: Adafruit

DESCARGA DEL TUTORIAL

TUTORIAL CON ARDUINO
ds1307moduloARDUINO.pdf
Documento Adobe Acrobat 1.6 MB
Hoja de datos DS1307
DS1307hojadatos.rar
Archivo comprimido 508.6 KB
Libreria
Libreria necesaria para programar en Arduino
DS1307libreriaARDUINO.rar
Archivo comprimido 5.3 KB
Codigo
Codigo de LECTURA y ESCRITURA utilizando Arduino
codigoARDUINO.rar
Archivo comprimido 1.1 KB

Escribir comentario

Comentarios: 1
  • #1

    ricardio (martes, 06 mayo 2014 15:53)

    hola oye tienes una lista de las funciones que tiene la libreria, lo que quiero hacer es modificar la hora mediante botones tienes laguna idea?