Módulo Reloj DS3231 con I2C Arduino

Publicado por Victor Arrieta en

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

 

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

 

}

 

 


Compartir esta publicación



← Publicación más antigua Publicación más reciente →