Reloj Real

con Arduino
pic

A veces nuestros proyectos necesitan utilizar la fecha y la hora actual. Ya sea para hacer saltar eventos (alarmas, un riego automatico, encender luces... etc.), para mostrarla (cómo en el caso de un reloj) o para guardar un registro de eventos que incluya el día y la hora a la que sucedió un determinado cambio o evento.

Para todos estos casos, la mejor opción es utilizar un chip de reloj de tiempo real, que sepa en todo momento la hora y la fecha en la que nos encontremos. Uno de los más baratos y sencillos es el DS1307, que incluyen modulos muy economicos cómo el Tiny RTC I2C son fáciles de encontrar en Internet y es el que emplearemos para este tutorial.

Este módulo se comunica vía I2C, lo que fácilita mucho su uso con Arduino. La forma de emplear estos módulos es muy sencilla, cuando necesitemos saber la hora y la fecha le diremos a Arduino que "se lo pregunte" al módulo. Este estará siempre en hora, incluso aunque hayamos retirado la alimentación de Arduino en algún momento, ya que lleva una pila de botón de litio CR2032.

La conexión de este módulo con Arduino es muy sencilla, simplemente tenemos que conectar el SCL y el SDA a los pines analogicos 4 y 5 de Arduino, que son los que están preparados para la conectividad I2C:

Pin del móduloPin del Arduino
SCLA5
SDAA4
Vcc5V
GNDGND

Ahora podemos probar el módulo utilizando este código que hace uso de la librería RTClib.h

						
					    #include <Wire.h>
					    #include "RTClib.h"
					    RTC_DS1307 RTC;
					     
					    void setup () {
					      
					        Serial.begin(9600);//Iniciamos la comunicacion por serie
					        Wire.begin();//Inicializamos la librería wire
					        RTC.begin();//Inicializamos el módulo reloj
					        
					        /*Descomentando esta linea, enviamos la hora y fecha 
					        del ordenador al módulo para ponerlo en hora*/
					        //RTC.adjust(DateTime(__DATE__, __TIME__));
					    }
					     
					    void loop () {
					        DateTime now = RTC.now();//Creamos un objeto que contiene la hora y fecha actual
					        
					        Serial.print(now.day(), DEC);//Mostramos por consola el dia
					        Serial.print('/');
					        
					        Serial.print(now.month(), DEC);//Mostramos por consola el mes
					        Serial.print('/');
					        
					        Serial.print(now.year(), DEC);//Mostramos por consola el año.
					        Serial.print(' ');
					        
					        Serial.print(now.hour(), DEC);//Mostramos por consola la hora
					        Serial.print(':');
					        
					        Serial.print(now.minute(), DEC);//Mostramos por consola los minutos
					        Serial.print(':');
					        
					        Serial.print(now.second(), DEC);//Mostramos por consola los segundos
					        Serial.println();
					        
					        delay(5000);//Esperamos 5 segundos y volvemos a empezar
					    }
					

Si abrimos la consola de Arduino (utilizando este botón ) veremos que se nos muestra la hora y la fecha:

Plantilla Basada en la obra de © 2011 Ansimuz.