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:
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:
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:
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.