Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

¿Quieres aprender a utilizar un módulo de reloj en tiempo real con Arduino? En este artículo te daremos todas las instrucciones que necesitas para poder trabajar con los módulos DS1307 y DS3231. Desde cómo conectarlos hasta cómo programarlos, ¡no te pierdas esta guía completa para mejorar tus proyectos con Arduino!

En esta publicación, aprenderá a utilizar el módulo de reloj en tiempo real (RTC) DS1307 con Arduino. También puede seguir esta guía para otros módulos similares como el DS3231 RTC.

Presentamos el módulo de reloj en tiempo real

El módulo de reloj en tiempo real es el de la imagen siguiente (vistas frontal y posterior).

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Si es la primera vez que utiliza este módulo, necesitará soldar algunos cabezales de pines.

Como puede ver en la imagen de arriba, hay una batería de respaldo instalada en el módulo. Esto permite que el módulo mantenga el tiempo incluso cuando no está alimentado por Arduino. De esta manera, la hora no se restablecerá cada vez que enciendas y apagues el módulo.

Este módulo utiliza comunicación I2C. Esto significa que se comunica con Arduino a través de sólo 2 pines.

¿Donde comprar?

El reloj en tiempo real es un módulo rentable. tu puedes el Módulo de reloj en tiempo real DS1307 en Maker Advisor y encuentra el mejor precio.

Asignación de pines

¡Cablear el módulo RTC es bastante sencillo!

Bolígrafo Cableado con Arduino Uno
SCL A5
ASD A4
VCC 5V
Dimensiones Dimensiones

Si está utilizando otra placa Arduino en lugar de Uno, verifique qué pines SCL y SDA tiene.

  • Nano: SDA (A4);
  • MEGA: ASD (20);
  • Leonardo: ASD (20); SCL (21)

Ejemplo: mostrar fecha y hora en el monitor serie

Este ejemplo muestra la fecha y la hora en el monitor serie.

Piezas requeridas

Para este ejemplo, necesitará las siguientes piezas (haga clic en los enlaces a continuación para encontrar el mejor precio en Asesor de creadores):

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Esquema

Conecte su módulo de reloj en tiempo real a su Arduino como se muestra en los esquemas a continuación.

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

código

Trabajar con el RTC requiere dos pasos importantes:

  • Configurar la hora actualpara que el RTC sepa qué hora es
  • aférrate al tiempo, para que el RTC siempre muestre la hora correcta incluso cuando esté apagado

Establecer la hora actual en el reloj de tiempo real

Para configurar la hora actual, debe cambiar el código especificado.

  • Establezca su hora actual en la función establecerDS3231time()

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Los parámetros de la función están resaltados en rojo: segundos, minutos, horas, día de la semana, fecha, mes y año (en ese orden). El domingo es el primer día de la semana y el sábado es el séptimo. No olvides comentar esta línea de código.

Después de configurar la hora actual, puede cargar el código proporcionado con los cambios deseados.

El código proporcionado fue escrito por John Boxall de tronixstuff. Puedes leer su tutorial. Aquí.

// Written by John Boxall from http://tronixstuff.com

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}
void setup(){
  Wire.begin();
  Serial.begin(9600);
  // set the initial time here:
  // DS3231 seconds, minutes, hours, day, date, month, year
  setDS3231time(30,42,16,5,13,10,16);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year){
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0x0E); // select register
  Wire.write(0b00011100); // write register bitmap, bit 7 is /EOS
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year){
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}
void displayTime(){
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10){
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print(":");
  if (second<10){
    Serial.print("0");
  }
  Serial.print(second, DEC);
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print(" Day of week: ");
  switch(dayOfWeek){
  case 1:
    Serial.println("Sunday");
    break;
  case 2:
    Serial.println("Monday");
    break;
  case 3:
    Serial.println("Tuesday");
    break;
  case 4:
    Serial.println("Wednesday");
    break;
  case 5:
    Serial.println("Thursday");
    break;
  case 6:
    Serial.println("Friday");
    break;
  case 7:
    Serial.println("Saturday");
    break;
  }
}
void loop(){
  displayTime(); // display the real-time clock data on the Serial Monitor,
  delay(1000); // every second
}

Ver código sin formato

Mantener el tiempo en el reloj de tiempo real.

Si no deseas restablecer la hora cada vez que se apaga el RTC, debes hacer lo siguiente:

  • Después de configurar la hora, debe comentar sobre la función de configuración de la hora y cargar el código nuevamente.

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Este es un paso muy importante para configurar la hora en su RTC. Si no hace esto, cada vez que reinicie su RTC, mostrará la hora configurada anteriormente y no la hora actual.

demostración

Abra el monitor serie con una velocidad de 9600 baudios y verá los resultados.

Aquí el monitor serie muestra la fecha y hora actuales.

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Envolver

Espero que encuentres útil esta guía.

El módulo RTC es realmente útil y puedes usarlo como reloj, temporizador, etc.

Si desea mostrar la fecha y la hora en la pantalla OLED usando el módulo RTC, lea la siguiente publicación:

  • Instrucciones para pantalla OLED de 0,96 pulgadas con Arduino

¿Qué proyectos has realizado o planeas trabajar con este módulo?

Dejeme saber dejando un comentario abajo.

Gracias por leer,

rui y sara

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Introducción al Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Este artículo se trata de cómo utilizar el módulo DS1307 Real Time Clock (RTC) con Arduino. También puedes seguir esta guía para otros módulos similares como el DS3231 RTC.

Presentación del módulo de Reloj en Tiempo Real

El módulo de reloj en tiempo real se muestra en la siguiente imagen (vista frontal y trasera).

Instrucciones para el Módulo de Reloj en Tiempo Real (RTC) con Arduino (DS1307 y DS3231)

Cuando utilices este módulo por primera vez, necesitarás soldar algunos pines de conexión.

Como puedes ver en la imagen anterior, el módulo tiene una batería de respaldo instalada. Esto permite que el módulo conserve la hora, incluso cuando no está siendo alimentado por Arduino. De esta manera, cada vez que enciendes y apagas tu módulo, la hora no se reinicia.

Este módulo utiliza comunicación I2C. Esto significa que se comunica con Arduino utilizando solo 2 pines.

¿Dónde comprar?

El módulo de Reloj en Tiempo Real es un componente asequible. Puedes revisar el módulo DS1307 Real Time Clock en Maker Advisor y encontrar el mejor precio.

Conexión de pines

Conectar el módulo RTC es bastante sencillo. Aquí está la disposición de los pines:

  1. SCL – A5
  2. SDA – A4
  3. VCC – 5V
  4. GND – GND

Si estás utilizando una placa de Arduino diferente al Uno, verifica cuáles son sus pines SCL y SDA.

Ejemplo: Mostrando fecha y hora en el monitor serial

Este ejemplo muestra la fecha y hora en el monitor serial.

Partes requeridas:

  • Arduino UNO
  • Módulo DS1307 RTC
  • Cables jumper

Puedes utilizar los enlaces anteriores o ir directamente a MakerAdvisor.com/tools para encontrar todas las partes para tus proyectos al mejor precio.

Esquemático

Conecta tu módulo de Reloj en Tiempo Real a tu Arduino como se muestra en el esquema.

Código

Trabajar con el RTC requiere dos pasos importantes: establecer la hora actual y retener la hora.

Haz clic aquí para acceder al código proporcionado por John Boxall de tronixstuff.

Retener la hora en el Reloj en Tiempo Real

Si no deseas restablecer la hora cada vez que se apague el RTC, debes comentar la función que establece la hora después de configurarla y cargar el código nuevamente.

Demostración

Abre el monitor serial a una velocidad de baudios de 9600 y verás los resultados.

Gracias por leer,

Rui y Sara

Deja un comentario