En este post aprenderá a usar el reloj de tiempo real DS3231, el cual permite almacenar y llevar la cuanta de la fecha y hora de manera automática sin que el circuito este con alimentación eléctrica. Adicionalmente veremos la librería que se encargara de realizar todo el trabajo, solo tendremos que llamar los datos y usarlos en donde los necesitemos.
Vídeo
A continuación, encontrará el vídeo en donde se explica el funcionamiento del circuito.
Acerca del proyecto
En este post vamos a trabajar con el modulo DS3231, reloj de tiempo real, donde vamos a conocer su funcionamiento y como conectarlo al arduino, el modulo que se va a trabajar es el diseñado para la raspberry py, pero nos sirve para nuestro proposito.
Conocimiento previo
Para este proyecto recomiendo revisar los siguientes post para que tengas los conocimientos base para poder realizar el circuito.
Proyecto | Descripción |
---|---|
Hoja de datos DS3231 | Se encuentra las características, conexión y demás información del circuito integrado. |
¿Que es el DS3231?
El DS3231 es un reloj I2C en tiempo real (RTC) extremadamente preciso y de bajo costo con un oscilador de cristal (TCXO) y cristal integrados compensados por temperatura.
El RTC mantiene información sobre segundos, minutos, horas, día, fecha, mes y año. La fecha al final del mes se ajusta automáticamente a los meses con menos de 31 días, incluidas las correcciones del año bisiesto. El reloj funciona en formato de 24 horas o de 12 horas con un indicador AM / PM. Dos horas del día programables.
Para mas detalles del ds3231 como sus características o la definición de cada uno de los pines en la hoja de datos podrás encontrar mas información.
Materiales
A continuación dejo la lista de los materiales que se necesitan.
Material | Cantidad | Descripción |
---|---|---|
Arduino leonardo | 1 | Controlador del proyecto |
Modulo ds3231 | 1 | Reloj de tiempo real |
Cables macho a macho | 4 | Cables para conectar el circuito |
Conexión
Para esta practica trabajaremos con el modulo ds3231, el cual tiene todas las conexiones del chip integrada, solo debemos hacer la conexión del modulo I2C que son dos simples cables.
Modulo raspberry pi
DS3231 | Arduino |
---|---|
Data | SDA |
Clock | SCL |
VCC | 5V |
GND | GND |
Modulo genérico
Librería
Para realizar el proyecto estamos usando la librería RTClib.h
la cual contiene las funciones básicas y necesaria para poder almacenar y obtener la hora y la fecha. Para mas detalles del funcionamiento de la librería en este post esta que hace cada instrucción y como se utiliza.
Si necesitas descargar la librería este es el repositorio de adafruit donde esta el código.
Código
Para programas este reloj y como se menciona en este post es muy sencillo ya que la librería nos proporciona todas las funciones que necesitamos. A continuación se deja el código y se explica paso a paso que es lo que se hace en cada linea.
//Paso 1
#include <Wire.h>
#include "RTClib.h"
//Paso 2
RTC_DS3231 rtc;
void setup () {
//Paso 3
Serial.begin(9600);
Wire.begin();
rtc.begin();
//Paso 4
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
//Paso 5
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(2015, 1, 1, 3, 0, 0));
}
}
void loop () {
//Paso 6
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.println();
delay(3000);
}
- Cargamos las librerías de
RTClib.h
la cual contiene la funcionalidad y las instrucciones del reloj, ademas cargamosWire.h
quien es la que permite hacer la comunicación con dispositivos I2C. - Creamos una instancia del objeto de
RTC_DS3231
a la cual llamaremosrtc
. - Inicializamos el reloj, la comunicación con
wire
y la terminal serial para visualizar los datos. - Verificamos si el reloj esta conectado correctamente, de lo contrario mostramos un error en la terminal.
- Validamos con
lostPower
si el reloj tiene configurada las horas y fechas de lo contrario las configuramos conrtc.adjust()
. - Con
DateTime now = rtc.now()
obtenemos el objeto con el cual podemos acceder a cada una de las funciones que nos retornara el dato que necesitemos, por ejemplonow.year()
,now.hour()
entre otros. - Imprimimos por la terminal los valores para ver la hora y fecha.
Funcionamiento
Observemos la salida de la terminal serial en donde nos muestra la fecha y hora que tiene el reloj, mostrada en el formato que le indicamos.
Comentario
casique
29 October 2021 23:10