Arduino UNO R4 - RTC

Este tutorial le enseña a usar Arduino UNO R4 con RTC (reloj en tiempo real). En detalle, aprenderemos:

Arduino UNO R4 RTC Reloj de tiempo real

Acerca del reloj en tiempo real en Arduino UNO R4

Ambos, el Arduino UNO R4 Minima y la versión WiFi, cuentan con un reloj en tiempo real (RTC) integrado en su microcontrolador principal. Este RTC permite que tus proyectos de Arduino lleven un registro de la fecha y la hora, incluso cuando la placa se apaga momentáneamente. Puedes acceder y controlar el RTC usando la biblioteca RTC incluida en el IDE de Arduino cuando instalas el paquete de placas para tu Arduino UNO R4. La biblioteca te permite establecer la fecha y la hora actuales, leer la fecha y la hora actuales y configurar alarmas para momentos específicos.

Sin embargo, hay un punto crucial a considerar con respecto a la energía de respaldo:

  • Arduino UNO R4 Minima: Arduino UNO R4 Minima no tiene una batería de respaldo dedicada para el RTC. Esto significa que si la placa pierde completamente la energía, el RTC se reinicia y tendrás que volver a configurar la hora cuando la vuelvas a encender.
  • Arduino UNO R4 WiFi: Arduino UNO R4 WiFi no incluye una batería de respaldo para el RTC. Sin embargo, ofrece una solución para usar una batería de respaldo externa para el RTC. Puedes conectar una batería externa para alimentar el RTC en Arduino UNO R3 WiFi a través del pin VRTC (Voltaje para el Reloj en Tiempo Real). Al suministrar una tensión externa (entre 1.6 V y 3.6 V) a este pin, puedes proporcionar energía de respaldo al RTC. Esto garantiza que el reloj siga funcionando incluso cuando la fuente de alimentación principal esté apagada, permitiendo conservar los ajustes de hora.

Puede proporcionar energía de reserva para el RTC utilizando dos pilas AA con un soporte para pilas, como se muestra en el diagrama de cableado siguiente.

Diagrama de cableado de la batería de respaldo RTC para Arduino UNO R4 WiFi

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Uno R4 y otros componentes.

※ Nota:

Esa fuente de energía de la batería es solo para el RTC. Debes alimentar el Arduino UNO R4 con una fuente de alimentación independiente.

Cómo programar para RTC en Arduino UNO R4

  • Agregar la biblioteca:
#include "RTC.h"
  • Inicializar el reloj en tiempo real:
RTC.begin();
  • Verifique si el RTC está configurado o no; si no, configure la fecha y la hora.
// Tries to retrieve time RTCTime savedTime; RTC.getTime(savedTime); if (!RTC.isRunning()) { // this means the RTC is waking up "as new" if (savedTime.getYear() == 2000) { Serial.println("RTC is NOT running, let's set the time!"); // Set current time, modify it to match the time you upload the code RTCTime startTime(22, Month::JULY, 2024, 16, 52, 00, DayOfWeek::MONDAY, SaveLight::SAVING_TIME_ACTIVE); RTC.setTime(startTime); } else { RTC.setTime(savedTime); } }
  • Muestra la fecha y la hora del módulo de reloj
RTCTime currentTime; // Get current time from RTC RTC.getTime(currentTime); // Print out date (YYYY/MM/DD) Serial.print("Date & Time: "); Serial.print(currentTime.getYear()); Serial.print("/"); Serial.print(Month2int(currentTime.getMonth())); Serial.print("/"); Serial.print(currentTime.getDayOfMonth()); Serial.print(" - "); // Print time (HH/MM/SS) Serial.print(currentTime.getHour()); Serial.print(":"); Serial.print(currentTime.getMinutes()); Serial.print(":"); Serial.println(currentTime.getSeconds());

Código Arduino UNO R4 – Cómo obtener la fecha y la hora

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-rtc-real-time-clock */ #include "RTC.h" void setup() { Serial.begin(9600); //delay(1000); RTC.begin(); // Tries to retrieve time RTCTime savedTime; RTC.getTime(savedTime); if (!RTC.isRunning()) { // this means the RTC is waking up "as new" if (savedTime.getYear() == 2000) { Serial.println("RTC is NOT running, let's set the time!"); // Set current time, modify it to match the time you upload the code RTCTime startTime(22, Month::JULY, 2024, 16, 52, 00, DayOfWeek::MONDAY, SaveLight::SAVING_TIME_ACTIVE); RTC.setTime(startTime); } else { RTC.setTime(savedTime); } } } void loop() { RTCTime currentTime; // Get current time from RTC RTC.getTime(currentTime); // Print out date (YYYY/MM/DD) Serial.print("Date & Time: "); Serial.print(currentTime.getYear()); Serial.print("/"); Serial.print(Month2int(currentTime.getMonth())); Serial.print("/"); Serial.print(currentTime.getDayOfMonth()); Serial.print(" - "); // Print time (HH/MM/SS) Serial.print(currentTime.getHour()); Serial.print(":"); Serial.print(currentTime.getMinutes()); Serial.print(":"); Serial.println(currentTime.getSeconds()); delay(1000); }

Pasos R\u00e1pidos

Sigue estas instrucciones paso a paso:

  • Si es la primera vez que usa el Arduino UNO R4 WiFi/Minima, consulte el tutorial sobre configurar el entorno para Arduino UNO R4 WiFi/Minima en el IDE de Arduino.
  • Si usa Arduino UNO R4 WiFi, conecte la placa Arduino UNO R4 WiFi a la batería de respaldo de acuerdo con el diagrama proporcionado.
  • Conecte la placa Arduino UNO R4 a su computadora mediante un cable USB.
  • Inicie el IDE de Arduino en su computadora.
  • Seleccione la placa adecuada Arduino UNO R4 (p. ej., Arduino UNO R4 WiFi) y el puerto COM.
  • Copie el código y péguelo en el IDE de Arduino.
  • Ajuste la hora en el código para que coincida con su hora actual.
  • Presione el botón Subir en el IDE de Arduino para enviar el código a Arduino UNO R4.
  • Abra el Monitor serie.
  • Verifique el resultado en el Monitor serie.
COM6
Send
Date & Time: 2024/7/22 - 16:52:1 Date & Time: 2024/7/22 - 16:52:2 Date & Time: 2024/7/22 - 16:52:3 Date & Time: 2024/7/22 - 16:52:4 Date & Time: 2024/7/22 - 16:52:5 Date & Time: 2024/7/22 - 16:52:6 Date & Time: 2024/7/22 - 16:52:7 Date & Time: 2024/7/22 - 16:52:8 Date & Time: 2024/7/22 - 16:52:9 Date & Time: 2024/7/22 - 16:52:10 Date & Time: 2024/7/22 - 16:52:11 Date & Time: 2024/7/22 - 16:52:12 Date & Time: 2024/7/22 - 16:52:13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Todo parece estar bien, pero ¡Espera! Podría haber un problema en los siguientes escenarios:

  • Utilizas un Arduino UNO R4 WiFi sin una batería de respaldo ni un Arduino UNO R4 Minima.
  • El Arduino pierde energía temporalmente y se reinicia. Luego, configura la hora actual a la hora especificada en el código, pero ha pasado el tiempo real. Esto provoca información de hora incorrecta.

Soluciones para esto:

  • Utiliza una fuente de alimentación estable para el Arduino.
  • Utiliza una batería de respaldo estable (solo funciona para el UNO R4 WiFi).
  • Actualiza la hora de la RTC desde Internet mediante el Network Time Protocol (NTP) cada vez que el Arduino se reinicia (requiere conexión a Internet).

Veamos cómo usar NTP para actualizar la hora en el RTC del Arduino UNO R4:

Código Arduino UNO R4 – Actualizar la hora del RTC mediante NTP

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-rtc-real-time-clock */ #include "RTC.h" void setup() { Serial.begin(9600); //delay(1000); RTC.begin(); // Tries to retrieve time RTCTime savedTime; RTC.getTime(savedTime); if (!RTC.isRunning()) { // this means the RTC is waking up "as new" if (savedTime.getYear() == 2000) { Serial.println("RTC is NOT running, let's set the time!"); // Set current time, modify it to match the time you upload the code RTCTime startTime(22, Month::JULY, 2024, 16, 52, 00, DayOfWeek::MONDAY, SaveLight::SAVING_TIME_ACTIVE); RTC.setTime(startTime); } else { RTC.setTime(savedTime); } } } void loop() { RTCTime currentTime; // Get current time from RTC RTC.getTime(currentTime); // Print out date (YYYY/MM/DD) Serial.print("Date & Time: "); Serial.print(currentTime.getYear()); Serial.print("/"); Serial.print(Month2int(currentTime.getMonth())); Serial.print("/"); Serial.print(currentTime.getDayOfMonth()); Serial.print(" - "); // Print time (HH/MM/SS) Serial.print(currentTime.getHour()); Serial.print(":"); Serial.print(currentTime.getMinutes()); Serial.print(":"); Serial.println(currentTime.getSeconds()); delay(1000); }

Pasos R\u00e1pidos

  • Abra el Administrador de Bibliotecas haciendo clic en el icono del Administrador de Bibliotecas en el lado izquierdo del IDE de Arduino.
  • Busque “NTPClient” y localice NTPClient de Fabrice Weinberg.
  • Haga clic en el botón Instalar para agregar la biblioteca NTPClient.
Biblioteca NTPClient para Arduino UNO R4
  • Copia el código y pégalo en el IDE de Arduino.
  • Modifica el SSID y la contraseña de WiFi en el código para que coincidan con las credenciales de tu red.
  • Presiona el botón Subir en el IDE de Arduino para enviar el código al Arduino UNO R4.
  • Abre el Monitor Serial.
  • Verifica el resultado en el Monitor Serial.
COM6
Send
Attempting to connect to SSID: YOUR_WIFI_SSID Connected to WiFi IP Address: 192.168.0.8 Starting connection to NTP server... Unix time = 1721671335 The RTC was updated to: 2024-07-22T18:02:15 RTC Date & Time: 2024/7/22 - 18:2:15 RTC Date & Time: 2024/7/22 - 18:2:16 RTC Date & Time: 2024/7/22 - 18:2:17 RTC Date & Time: 2024/7/22 - 18:2:18 RTC Date & Time: 2024/7/22 - 18:2:19 RTC Date & Time: 2024/7/22 - 18:2:20 RTC Date & Time: 2024/7/22 - 18:2:21
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!