miércoles, 6 de diciembre de 2017

Módulo Reloj DS3231 con I2C Arduino




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

}







FIN DEL POST

0 comentarios:

Publicar un comentario

Display matricial 8x8 con Arduino SPI y MAX7219

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. ...