Arduino UNO R4 - RTC

Deze tutorial leert u hoe u de Arduino UNO R4 met RTC (Real-Time Clock) gebruikt. In detail zullen we leren:

Arduino UNO R4 RTC Real-Time Clock

Over Real-Time Clock op Arduino UNO R4

Zowel de Arduino UNO R4 Minima als de WiFi-versie hebben een ingebouwde Real-Time Clock (RTC) ingebed in hun hoofdmicrocontroller. Deze RTC stelt uw Arduino-projecten in staat om datum en tijd bij te houden, zelfs wanneer het board tijdelijk wordt uitgeschakeld. U kunt de RTC benaderen en besturen met behulp van de RTC-bibliotheek die is opgenomen in de Arduino IDE wanneer u het boardpakket voor uw Arduino UNO R4 installeert. De bibliotheek stelt u in staat om de huidige datum en tijd in te stellen, de huidige datum en tijd te lezen, en alarmen in te stellen voor specifieke tijden.

Er is echter een cruciaal punt om te overwegen betreffende backup-voeding:

  • Arduino UNO R4 Minima: Arduino UNO R4 Minima heeft geen speciale backup-batterij voor de RTC. Dit betekent dat als het board volledig stroom verliest, de RTC reset wordt en u de tijd opnieuw moet instellen wanneer u het weer inschakelt.
  • Arduino UNO R4 WiFi: Arduino UNO R4 WiFi bevat geen backup-batterij voor de RTC. Het biedt echter een oplossing om een externe backup-batterij voor de RTC te gebruiken. U kunt een externe batterij verbinden om de RTC van de Arduino UNO R3 WiFi van stroom te voorzien via de VRTC (Voltage for Real-Time Clock) pin. Door een externe spanning (tussen 1.6V en 3.6V) aan deze pin te leveren, kunt u backup-voeding aan de RTC verstrekken. Dit zorgt ervoor dat de klok blijft lopen zelfs wanneer de hoofdvoeding uit staat, waardoor u de tijdinstellingen kunt behouden.

U kunt backup-voeding voor de RTC verstrekken met behulp van twee AA-batterijen met een batterijhouder, zoals getoond in het volgende bedradingsdiagram

Arduino UNO R4 WiFi RTC backup battery Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Zie De beste manier om Arduino Uno R4 en andere componenten van stroom te voorzien.

※ Notiz:

Die batterijvoeding is alleen voor de RTC. U moet de Arduino UNO R4 via een aparte voeding van stroom voorzien.

Hoe te Programmeren voor RTC op Arduino UNO R4

  • Voeg de bibliotheek toe:
#include "RTC.h"
  • Initialiseer de RTC:
RTC.begin();
  • Controleer of de RTC geconfigureerd is of niet, zo niet, stel dan de datum en tijd in.
// 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); } }
  • Toont datum en tijd van de klokmodule
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());

Arduino UNO R4 Code – Hoe datum en tijd op te halen

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

Snelle Stappen

Volg deze instructies stap voor stap:

  • Als dit de eerste keer is dat u de Arduino UNO R4 WiFi/Minima gebruikt, raadpleeg dan de tutorial over het opzetten van de omgeving voor Arduino UNO R4 WiFi/Minima in de Arduino IDE.
  • Als u Arduino UNO R4 WiFi gebruikt, verbind dan de Arduino UNO R4 WiFi met de backup-batterij volgens het geleverde diagram.
  • Verbind het Arduino UNO R4 board met uw computer via een USB-kabel.
  • Start de Arduino IDE op uw computer.
  • Selecteer het juiste Arduino UNO R4 board (bijv. Arduino UNO R4 WiFi) en COM-poort.
  • Kopieer de code en plak deze in Arduino IDE.
  • Pas de tijd in de code aan zodat deze overeenkomt met uw huidige tijd
  • Druk op de Upload knop in Arduino IDE om de code naar Arduino UNO R4 te sturen.
  • Open de Seriële Monitor.
  • Controleer het resultaat in de Seriële Monitor.
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  

Alles ziet er goed uit, maar wacht! Er kan een probleem zijn in de volgende scenario's:

  • U gebruikt een Arduino UNO R4 WiFi zonder backup-batterij of een Arduino UNO R4 Minima.
  • De Arduino verliest tijdelijk stroom en start opnieuw op. De Arduino stelt dan de huidige tijd in op de tijd gespecificeerd in de code, maar er is real-time verstreken. Dit leidt tot onjuiste tijdinformatie.

Oplossingen hiervoor:

  • Gebruik een stabiele voeding voor de Arduino.
  • Gebruik een stabiele backup-batterij (werkt alleen voor de UNO R4 WiFi).
  • Update de RTC-tijd vanaf het internet via Network Time Protocol (NTP) elke keer dat de Arduino opstart (vereist een internetverbinding).

Laten we zien hoe u NTP gebruikt om de tijd op de RTC van de Arduino UNO R4 bij te werken:

Arduino UNO R4 Code – Update RTC-tijd via NTP

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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); }

Snelle Stappen

  • Open de Library Manager door te klikken op het Library Manager icoon aan de linkerkant van de Arduino IDE.
  • Zoek naar "NTPClient" en zoek de NTPClient door Fabrice Weinberg.
  • Klik op de Install knop om de NTPClient bibliotheek toe te voegen.
Arduino UNO R4 NTPClient library
  • Kopieer de code en plak deze in Arduino IDE.
  • Pas de WiFi SSID en het wachtwoord in de code aan zodat deze overeenkomen met uw netwerkreferenties
  • Druk op de Upload knop in Arduino IDE om de code naar Arduino UNO R4 te sturen.
  • Open de Seriële Monitor.
  • Controleer het resultaat in de Seriële Monitor.
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

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Gerelateerde Tutorials

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!