Hvordan lage Arduino Infinity Clock ved hjelp av RTC -modul

Hvordan lage Arduino Infinity Clock ved hjelp av RTC -modul

I den moderne elektroniske verden er timingskretser veldig viktige. Det samme er tilfellet med Arduino, Arduino har en innebygd timerklokke som teller til omtrent 49 dager, men etter det tilbakestilles den. For det andre er ikke den interne klokken Arduino 100% nøyaktig; Det er alltid en viss prosentandel av tidsforsinkelse mellom Arduino -klokken og en ekstern klokke. Så hvis man vil lage en nøyaktig klokke ved hjelp av Arduino, må vi stole på en ekstern modul kjent som RTC (sanntidsklokke). La oss se hvordan du kan grensesnitt denne RTC -modulen med Arduino og lage en nøyaktig digital klokke.

RTC -modul med Arduino

Noen ganger trenger det å jobbe med Arduino -prosjekter en nøyaktig tidsklokke for å holde Arduino i arbeid og utføre spesielle instruksjoner og kommandoer på en bestemt tid. Arduino har innebygd klokke, men vi kan ikke stole på den på grunn av å følge to grunner:

    • Arduino -klokken er unøyaktig med en prosentvis feil på 0.5-1%.
    • Arduino -klokken vil tilbakestilles automatisk når brettet er tilbakestilt.
    • Arduino -klokker har ingen sikkerhetskopiering hvis Arduino mister strømmen, vil tilbakestillingen tilbakestilles automatisk.

Tatt i betraktning de ovennevnte grunnene, foretrekker brukere å bruke en ekstern maskinvareklokke eller en RTC-modul. Så en veldig billig og super nøyaktig modul som er mye brukt er DS1307. La oss se hvordan du kobler denne RTC med Arduino.

Oppsett RTC -modul Arduino Library

For å grensesnitt Arduino med RTC -modulen må vi installere noen nødvendige biblioteker som kan lese data fra RTC -modulen. Følg trinnene for å installere RTC -biblioteker:

    1. Åpen Ide
    2. Gå til Bibliotekseksjon
    3. Søk “RTCLIB”
    4. Installer Ds3231_rtc og Rtclib av Adafruit.

DS1307 RTC -modul

DS1307 RTC -modulen er basert på den lille klokkebrikken DS1307 som også støtter I2C -kommunikasjonsprotokoll. På baksiden av RTC -modulen har vi et litiumcellebatteri. Denne modulen kan gi nøyaktig informasjon om sekunder, minutter, timer, dag, dato, måned og år. Det har også muligheten til automatisk tidsjustering i 31 dager i måneden sammen med feilstøtte for Leap Year. Klokke kan enten fungere på 12 timer eller 24-timers klokketid.


Noen hovedhøydepunkter i denne RTC -modulen:

    • Kan jobbe med 5V DC -forsyning
    • Firkantet bølgeutgang som kan programmeres
    • Påvisning av strømbrudd
    • Forbruker veldig mindre mengde strøm (500mA)
    • 56-byte ikke-flyktig RAM
    • Reserve batteri

Pinout av RTC -modulen

PIN -navn Beskrivelse
SCL Klokkeinngangspinne for I2C kommunikasjonsgrensesnitt
SDA Datainngangsutgang for I2C seriell kommunikasjon
VCC Power Pin varierer fra 3.3V til 5V
GND GND -pinne
Ds Brukes til temperatursensorinngang
SQW Denne tappen kan generere fire kvadratbølger med frekvens 1Hz, 4kHz, 8kHz eller 32kHz
FLAGGERMUS PIN for batteribackup hvis hovedforsyningen avbrutt

Kretsdiagram

Koble Arduino -styret med RTC -modulen som vist i diagram nedenfor. Her vil A4- og A5 -pinner av Arduino bli brukt til I2C -kommunikasjon med RTC -moduler mens 5V og GND -pinner vil gi den nødvendige kraften til RTC -modulen.

DS 1307 RTC Pin Arduino Pin
Vin 5v
GND GND
SDA A4
SCL A5

Kode

#inkludere
#inkludere
RTC_DS3231 Real_Time_Clock;
Char Time [32]; /*Char -matrise er definert*/
ugyldig oppsett ()

Serie.Begynn (9600); /*Seriell kommunikasjon begynner*/
Metalltråd.begynne(); /*Bibliotekfil for å begynne kommunikasjon*/
real_time_clock.begynne();
real_time_clock.Justere (DateTime (F (__ Dato __), F (__ TID__)));
/*real_time_clock.Justere (DateTime (2022, 09, 26, 1, 58, 0))*//

ugyldig sløyfe ()

DateTime Now = real_time_clock.nå();
Sprintf (tid, "%02d:%02d:%02d%02d/%02d/%02d", nå.time (), nå.minutt (), nå.andre (), nå.dag (), nå.måned (), nå.år());
Serie.print (f ("dato/tid:")); /*Dette vil skrive ut dato og tid*/
Serie.println (tid);
forsinkelse (1000); /*Forsinkelse på 1 sek*/


I begynnelsen av koden først inkluderte vi metalltråd.h Og Rtclib For kommunikasjon med enheter. Vi opprettet deretter et RTCLIB -objekt med navnet real_time_clock. Deretter definerte vi en char -matrise tid av lengde 32, som vil lagre informasjon om dato og klokkeslett.

I oppsett- og loopfunksjonen brukte vi følgende kommando for å sikre at I2C -kommunikasjon er etablert mellom Arduino og RTC -moduler.

Metalltråd.begynne og real_time_clock.begynne vil sikre og sjekke for RTC -tilkobling.

justere() er en overbelastet funksjon som angir dato og tid.

DATETIME (F (__ DATO__), F (__ TID__))


Denne funksjonen vil angi dato og klokkeslett som skisse ble samlet.

De nå() Funksjoner for returdato og tid, og verdien vil lagres i variabel "tid".

Neste time, minutt, andre, dag, måned, år vil beregne den nøyaktige datoen og skrive den ut på seriemonitoren med en forsinkelse på 1 sek.

Maskinvare

Produksjon

Seriell monitor vil begynne å skrive ut tidspunktet og datoen som koden lastes opp til Arduino -styret.

Konklusjon

Arduino har i seg selv noen funksjoner relatert til tid som Millis (), Micros (). Imidlertid gir ikke disse funksjonene nøyaktig tid; Det er alltid en sjanse for at noen millisekunder forsinkelse. For å unngå dette mens du bruker Arduino RTC, brukes eksterne moduler. Disse modulene som DS1307 gir oss nøyaktig tid med batteribackup som kan vare i mange år. Denne guiden dekker hvordan du kan grensesnitt disse RTC -modulene med et Arduino -brett.