¿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).
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!
Esquema
Conecte su módulo de reloj en tiempo real a su Arduino como se muestra en los esquemas a continuación.
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()
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
}
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.
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.
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
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).
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:
- SCL – A5
- SDA – A4
- VCC – 5V
- 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