Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on May 28, 2015 in Arduino, Comunicación | 13 comments

RTC DS1307 I2C+ Arduino + Display LCD 16×2

RTC DS1307 I2C+ Arduino + Display LCD 16×2

 Módulo RTC DS1307 (Reloj de tiempo real)

Este proyecto nos servirá en todas aquellas aplicaciones donde necesitemos conocer el tiempo actual (fecha y hora). Aprenderemos a usar y configurar el módulo RTC DS1307 con arduino. El módulo incorpora reloj de tiempo real DS1307 y una batería para guardar los datos. Para hacerlo más práctico dispondremos de un display LCD 16×2 para visualizar en pantalla el tiempo actual.
Dicho módulo se comunica con arduino a través del bus I2C.

Material

  • LCD 16×2
  • Potenciómetro 1K
  • Arduino UNO
  • Módulo RTC DS1307
  • Protoboard
  • Cables macho-macho, hembra-macho

En la tienda virtual de HeTPro puedes encontrar todos los materiales:  www.hetpro-store.com

Conexiones

El bus I2C utiliza solo 2 cables para establecer la comunicación entre dispositivos, SDA y SCL. En el bus debe configurarse un dispositivo como MAESTRO y uno o varios dispositivos como ESCLAVO.

fig1

Bus I2C

En la plataforma arduino existen varias librerías que podemos usar para ahorrarnos todo el trabajo de configuración.

En arduino los pines correspondientes a dicho bus son:

A4(SDA)

A5(SCL)

En las siguientes imágenes podemos ver los pines correspondientes al módulo RTC DS1307 y su conexión con arduino, así como la conexión del ya conocido display LCD  16×2, si es la primera vez que se utiliza este display recomiendo ver los tutoriales correspondientes para hacerlo funcionar disponibles en esta misma página.

fig2 RTC DS1307

Pines del Módulo RTC DS1307

 

Diagrama de conexión entre arduino, display lcd y RTC DS1307

Terminadas las conexiones, procederemos a añadir la librería RTClib a la IDE de Arduino. La descargaremos y la descomprimiremos en C:/diretorio arduino/libraries.

Link para descargar la librería: https://github.com/adafruit/RTClib

Dirección donde copiar la librería

Esta librería se apoya en la librería Wire para la comunicación I2C, por lo que tendremos que hacer referencia a ella he incluirla en nuestro código, al igual que la librería LiquidCrystal para poder hacer funcionar el display LCD. Estas dos últimas librerías ya vienen añadidas por defecto al IDE arduino por lo que no será necesario descargarlas. RTClib es compatible con cualquier módulo que use el chip RTC DS1307.

 

Código


// 21/04/2015 Remodificado y probado por Roberto Chacón Diaz
// Pin Sda al pin A4 del arduino
// Pin Scl al pin A5 del arduino
// Tambien como en cualquier modulo, se deben conectar VCC y GND.
// Se aceptan sugerencias y/o modificaciones.

#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);//pines del arduino al LCD (RS E D4 D5 D6 D7) RESPECTIVAMENTE
RTC_DS1307 RTC;

void setup()
{
Wire.begin(); //configura el bus I2C estableciendo arduino como MASTER
RTC.begin();
if (! RTC.isrunning()) // se verifica si el modulo rtc esta en funcionamiento, de lo contrario, se imprime: RTC is NOT running!
{
lcd.println("RTC is NOT running!");
delay(10000);
}
RTC.adjust(DateTime(__DATE__, __TIME__)); //esta funcion establecera en el modulo la fecha de creación del archivo .hex generado al compilar el sketch.

lcd.begin(16,2);
lcd.clear();
}

void loop()
{
mostrarRTCLCD(); //Se manda a llamar la funcion "mostrarRTCLCD" y despues se espera un tienpo de 1seg
delay(1000);
}

void mostrarRTCLCD() //Funcion que lee los datos de modulo RTC y despues los imprime en el display
{
DateTime now = RTC.now(); //obtiene datos del modulo RTC
lcd.clear();
lcd.setCursor(0,0);
if(now.day() < 10)
{
lcd.print("0");
}
lcd.print(now.day(), DEC); //imprime dia
lcd.print('/');
if(now.month() < 10)
{
lcd.print("0");
}
lcd.print(now.month(), DEC); //imprime mes
lcd.print('/');
lcd.print(now.year(), DEC);  //imprime el año
lcd.setCursor(0,1);
if(now.hour() < 10)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC); //imprime hora
lcd.print(':');
if(now.minute() < 10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC); //imprime minutos
lcd.print(':');
if(now.second() < 10)
{
lcd.print("0");
}
lcd.print(now.second(), DEC); //imprime segundos
}

Finalmente unas imágenes del proyecto funcionando.

fig5

RTC DS1307

 

RTC DS1307

RTC DS1307

RTC DS1307

RTC DS1307

 

13 Comments

  1. hola amigo
    es un muy buen post
    yo estoy usando el mismo modulo pero tengo un problema y no se si a ti te sucedio lo mismo
    el problema es que cargo la hora y todo va bien hasta que oprimo el boton de reset de mi arduino o cierro y vuelvo a abrir el monitor serial y la todo regresa a la hora y fecha que fue cargado el programa.
    espero y me puedas ayudar.

    • Ulises, eso suele pasar si tienes una inicialización en tu programa para fecha y hora. Lo más fácil es simplemente hacer un programa para lectura y otro para configuración.

  2. tengo un problema, muetsra todo pero se queda estática los segundos no cambian

    • Christian, revisa tus conexiones, puede ser que dejo de leer la información. Este es un error común en I2C.

      • hola el problema es tu ds1307, revisa las conexiones mas seguro es el oscilador cambialo ami me paso lo mismo.

        • Gracias por tu ayuda :) saludos

  3. Tengo el 1602 conectado por un dispositivo FC-113, que ya trae incorporado potenciómetro y cuenta salida SDA y SCL, que van conectadas a A4 yA5, funciona perfecto. Necesito agregarle el RTC DS1307, que también debe ir conectado a A4 y A5. Como resuelvo esto?
    Gracias por su colaboracion

    • Puedes conectarlos sin problemas, ya que cada dispositivo i2c tiene dirección distinta. Solo conéctalos y realiza tus pruebas.

  4. Hola, si quisiera establecer el encendido de un led en un periodo de tiempo y la variable que necesito evaluar es la hora, ¿solo pongo “now.hour()” en la condicional? disculpa si la pregunta es tonta pero me estoy mudando a ardiuno apenas.

    • asi es
      if (now.hour()==18 && now.minute()==54
      )
      {
      digitalWrite(7,HIGH);
      delay(5000);
      }

  5. hola una pregunta como hago para programar un timbre de colegio ya instale la LCD RTC con arduino en una protoboard Y NO LO HE PODIDO PROGRAMAR POR QUE ME FALTA UN CODIGO por favor espero pronto su respuesta
    GRACIAS

    • Hola si quieres utilizar un timbre o un dispositivo que genere el sonido puedes utilizar el codigo que usamos aqui pero en el lugar de la LCD puedes agregar lo que llegues a necesitar para el dispositivo final

  6. para el arduino mega, se conecta igual a los pines A4 y A5 o a los 20,21 que se denominan, sda y scl ?

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Cheap Big Tits Cam Sex Girls