Este
módulo de reloj es capaz de llevar la hora de forma precisa y mantenerla
durante un tiempo indefinido aún si se desconecta su alimentación, debido a su pila
interna CR2032 de 3V, capaz de permanecer en funcionamiento hasta por 10 años.
Funciona con un oscilador de cristal compensado por temperatura, de ahí su
gran precisión. Tiene también un módulo interno de memoria EEPROM que le
permite almacenar alarmas y ciertas funciones especiales.
Se
comunica por medio de protocolo I2C, lo cual le da la ventaja de necesitar un mínimo de
sólo 4 pines para su funcionamiento y control, un pin para señal de reloj, uno
para datos y dos para alimentación. Cuenta también con un pin con una señal de
reloj de 32KHz para usos varios y un pin (SQW) que emite una onda cuadrada
cuyas características puedes ser modificadas por medio de la comunicación por
I2C; ambos pines requieren un pull up para funcionar correctamente y en caso de
no usarlos se pueden dejar desconectados.
Para
hacer uso del conjunto se hace necesaria la librería “Wire.h”, que nos permite
la comunicación por I2C y la librería “DS3231.h” que controla al reloj. A
continuación te facilitamos el enlace para que descargues la librería:
https://github.com/NorthernWidget/DS3231
https://github.com/NorthernWidget/DS3231
Los pines del conjunto son:
VCC = Alimentación de 5 Voltios
GND = Referencia negativa
SDA =
Pin de datos
SCL =
Pin de señal de reloj
32K =
Señal de reloj 32K / se puede no
conectar
SQW
= Señal de onda cuadrada / se puede no
conectar
Esquema de conexión
Arduino UNO:
Código y comandos básicos para
configurar y obtener hora:
Grabar:
#include
<DS3231.h> // se incluye la librería del módulo
#include
<Wire.h> // se incluye la librería del I2C
//
fecha y hora a guardar
int
year = 17;
int month = 8;
int date = 19;
int hour = 12;
int
minute = 0;
int
second = 0;
DS3231
Clock; // se direcciona automáticamente el hardware
void
setup() {
// Se inicial la interfaz I2c
Wire.begin();
//Se establece el modo horario en 24 horas
(true = 12h)
Clock.setClockMode(false);
//Se establece el año
Clock.setYear((byte)year);
//Mes
Clock.setMonth((byte)month);
//Día
Clock.setDate((byte)date);
//Hora
Clock.setHour((byte)hour);
//Minutos
Clock.setMinute((byte)minute);
//Segundos
Clock.setSecond((byte)second);
}
void loop() {
}
Obtener:
#include <DS3231.h>
#include <Wire.h>
DS3231
Clock; // Direccionamiento del hardware
RTClib
RTC; // Declaración de la función RTC
int year, month, date, hour, minute, second;
//se
declaran variables para guardar fecha y hora obtenida
void
setup() {
//se
inicia la comunicación por I2C
Wire.begin();
// Se inicia la Comunicación Serial
Serial.begin(9600);
}
void
loop() {
//Se llama la función que permite obtener la
fecha y la hora
DateTime now = RTC.now();
//Se obtiene la fecha y la hora y se guarda en su respectiva variable
year = now.year();
month =
now.month();
date =
now.day();
hour =
now.hour();
minute =
now.minute();
second =
now.second();
//Se imprime en le puerto serial
Serial.print(year,DEC);
Serial.print("/");
Serial.print(month);
Serial.print("/");
Serial.print(date);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
delay(1000); //retardo de un segundo
}
0 comentarios:
Publicar un comentario