Cómo hacer el reloj de infinito Arduino usando el módulo RTC

Cómo hacer el reloj de infinito Arduino usando el módulo RTC

En los modernos circuitos de sincronización mundial electrónicos son muy importantes. Lo mismo es el caso con Arduino, Arduino tiene un reloj de temporizador incorporado que cuenta con aproximadamente 49 días, pero después de eso se restablece. En segundo lugar, el reloj interno Arduino no es 100% preciso; Siempre hay un cierto porcentaje de tiempo de retraso entre el reloj Arduino y un reloj externo. Entonces, si uno quiere crear un reloj preciso usando Arduino, debemos confiar en un módulo externo conocido como RTC (reloj en tiempo real). Veamos cómo interactuar este módulo RTC con Arduino y crear un reloj digital preciso.

Módulo RTC con Arduino

A veces, trabajar en proyectos de Arduino necesita un reloj de tiempo preciso para mantener a Arduino trabajando y ejecutar instrucciones y comandos especiales en algún tiempo específico. Arduino tiene un reloj incorporado, sin embargo, no podemos confiar en él debido a las siguientes dos razones:

    • El reloj Arduino es inexacto con un error porcentual de 0.5-1%.
    • El reloj de Arduino se restablecerá automáticamente una vez que se reinicie la placa.
    • Los relojes Arduino no tienen una copia de seguridad de energía si Arduino pierde la energía, su reloj se restablecerá automáticamente.

Teniendo en cuenta las razones mencionadas anteriormente, los usuarios prefieren usar un reloj de hardware externo o un módulo RTC. Entonces, un módulo muy barato y súper preciso ampliamente utilizado es DS1307. Veamos cómo conectar este RTC con Arduino.

Configuración del módulo RTC Biblioteca Arduino

Para interactuar Arduino con el módulo RTC, necesitamos instalar algunas bibliotecas necesarias que puedan leer datos del módulo RTC. Siga los pasos para instalar bibliotecas RTC:

    1. Abierto IDE
    2. Ir a Sección de la biblioteca
    3. Buscar "Rtclib"
    4. Instala el DS3231_RTC y Rtclib por Adafruit.

Módulo RTC DS1307

El módulo RTC DS1307 se basa en el pequeño chip de reloj DS1307 que también admite el protocolo de comunicación I2C. En la parte posterior del módulo RTC tenemos una batería de celda de litio. Este módulo puede brindar información precisa de segundos, actas, horas, día, fecha, mes y año. También tiene la capacidad del ajuste de tiempo automático durante 31 días al mes junto con el soporte de error de año bisiesto. El reloj puede funcionar en un reloj de 12 horas o las 24 horas.


Algunos aspectos destacados principales de este módulo RTC:

    • Puede trabajar en 5V DC Supply
    • Salida de onda cuadrada que se puede programar
    • Detección de falla de energía
    • Consumir muy menor cantidad de corriente (500 mA)
    • Ram no volátil de 56 bytes
    • Batería de reserva

Pinout del módulo RTC

Nombre Descripción
SCL Pin de entrada del reloj para la interfaz de comunicación I2C
SDA Salida de entrada de datos para la comunicación serie I2C
VCC Rango de alfiler de potencia de 3.3V a 5V
Gnd Alfiler
Ds Uso para la entrada del sensor de temperatura
Sqw Este pasador puede generar cuatro ondas cuadradas con frecuencia de 1Hz, 4kHz, 8 kHz o 32 kHz
MURCIÉLAGO Pin para la batería de respaldo si el suministro principal se interrumpe

Diagrama de circuito

Conecte la placa Arduino con el módulo RTC como se muestra en el diagrama a continuación. Aquí los pines A4 y A5 de Arduino se utilizarán para la comunicación I2C con los módulos RTC, mientras que los pines de 5V y GND le darán la potencia requerida al módulo RTC.

Pin RTC DS 1307 Alfiler de arduino
Empuje 5V
Gnd Gnd
SDA A4
SCL A5

Código

#incluir
#incluir
Rtc_ds3231 real_time_clock;
tiempo de char [32]; /*La matriz de char se define*/
Configuración vacía ()

De serie.comenzar (9600); /*Comienza la comunicación en serie*/
Cable.comenzar(); /*Archivo de biblioteca para comenzar la comunicación*/
reloj en tiempo real.comenzar();
reloj en tiempo real.ajustar (dateTime (f (__ fecha __), f (__ tiempo__)));
/*reloj en tiempo real.Ajustar (DateTime (2022, 09, 26, 1, 58, 0))*/

bucle vacío ()

DateTime ahora = real_time_clock.ahora();
sprintf (tiempo, "%02d:%02d:%02d%02d/%02d/%02d", ahora.hora (), ahora.minuto (), ahora.segundo (), ahora.día (), ahora.mes (), ahora.año());
De serie.imprimir (f ("fecha/hora:")); /*Esto imprimirá fecha y hora*/
De serie.println (tiempo);
retraso (1000); /*Retraso de 1 seg*/


Al comienzo del código primero incluimos cable.H Y Rtclib para comunicación con dispositivos. Luego creamos un objeto RTCLIB con el nombre reloj en tiempo real. A continuación, definimos una matriz de char tiempo de longitud 32, que almacenará información de fecha y hora.

En la función de configuración y bucle utilizamos el siguiente comando para asegurarnos de que se establezca la comunicación I2C entre los módulos Arduino y RTC.

Cable.comenzar y reloj en tiempo real.comenzar asegurará y verificará la conexión RTC.

ajustar() es una función sobrecargada que establece la fecha y la hora.

DateTime (F (__ Date__), F (__ Time__))


Esta función establecerá la fecha y la hora en que se compiló el boceto.

El ahora() Funciones Fecha y hora de retorno, y su valor se almacenará en variable "tiempo".

La próxima hora, minuto, segundo, día, mes, año calculará la fecha exacta e la imprimirá en el monitor en serie con un retraso de 1 segundo.

Hardware

Producción

Serial Monitor comenzará a imprimir la hora y la fecha en que el código se carga en la placa Arduino.

Conclusión

Arduino mismo tiene algunas funciones relacionadas con el tiempo como Millis (), micros (). Sin embargo, estas funciones no dan tiempo exacto; Siempre hay una posibilidad de retraso de milisegundos. Para evitar esto mientras se usa módulos externos Arduino RTC. Estos módulos, como DS1307, nos dan tiempo exacto con una batería de respaldo que puede durar muchos años. Esta guía cubre cómo interactuar estos módulos RTC con una placa Arduino.