PortadaReloj

Cuando queremos tener la hora actual en cualquier momento este proyecto nos servirá en todos los proyectos donde necesitemos conocer el tiempo actual, la fecha y hora. Usaremos  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.
El módulo RTC DS1307 se comunica con Arduino a través del bus I2C.

Elementos Necesarios

  • Arduino UNO u otro de similares características
  • LCD 16×2
  • Módulo RTC DS1307
  • Protoboard
  • Potenciómetro 1K
  • Cables macho-macho, hembra-macho

Diagrama y Conexiones

Podemos ver los pines correspondientes al módulo RTC DS1307 y su conexión con Arduino, la conexión del  display LCD  16×2.

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.En la plataforma arduino existen varias librerías que podemos usar para ahorrarnos todo el trabajo de configuración.

En el microcontrolador Arduino los pines correspondientes a dicho bus son el SDA -> A4 y el SCL->A5

El DS1307  de Maxim/Dallas es un circuito integrado reloj en tiempo real (RTC) capaz de almacenar y llevar la cuenta de la fecha y hora de manera autónoma, además disponemos de unos cuantos bytes de memoria RAM no volátil (NVRAM) para almacenar datos arbitrarios.

El módulo Tiny RTC, además de todo el circuito de soporte para el DS1307, incluye también una memoria EEPROM I2C para almacenar datos en ella y un zócalo para soldar de manera opcional un sensor de temperatura DS18B20 (one-wire),  sin embargo en esta ocasión trataremos únicamente el uso del DS1307.

Código

Lo primero que tenemos que hacer es incluir la librería RTClib  al IDE de Arduino. La descargaremos y la descomprimiremos en el directorio libraries del IDE de Arduino .

Enlace para descargar RTClib: https://github.com/adafruit/RTClib

La 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.La librería RTClib es compatible con cualquier módulo que use el chip RTC DS1307.

//Modulo RTC 1307
// 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.

 
#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: No esta ejecutando RTC 
{
lcd.println("No esta ejecutando RTC");
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
}

Ahora no hay excusas para incluir la hora y la fecha en tus proyectos.

Saludos Maqui

views
40

ElectroMercado

  • : tutorial_
  • arduino
2 Comentarios
  1. German
    German 1 mes

    Ahora si, cuando se necesite la hora o la fecha en algún proyecto esta es la forma. Saludos

    0

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account