Hvordan lage en digital klokke ved hjelp av RTC -modul og Arduino Uno

Hvordan lage en digital klokke ved hjelp av RTC -modul og Arduino Uno
Arduino er en diversifisert plattform som gir nybegynnere så vel som eksperter for å lage forskjellige typer prosjekter. Arduino tilbyr en rekke tavler som skiller seg fra hverandre basert på spesifikasjonen til hvert styre. Arduino UNO er ​​en av de mest brukte brettene i Arduino -familien, da den er kompatibel med en rekke periferiutstyr. Vi har laget en sanntidsklokke ved å grensesnitt en sanntidsklokkemodul med Arduino Uno.

Hva er RTC -modul

Dette er sanntidsklokkemodulen som lagrer dataene om tid og dato og også viser den på den tilkoblede visningsskjermen. Denne modulen holder tid og dato oppdatert og har en krystalloscillator som genererer et signal med en konstant frekvens. Videre har RTC -modulen dedikerte pinner av temperatursensoren på baksiden, og det er en spesiell pin som leser utgangen fra sensoren.

Modulen kommer også med et 3V litium-ion-batteri som holder modulen i gang i ganske lang tid hvis hovedforsyningen er koblet fra.

Det er 7 pinner av modulen totalt, men på motsatt side har den de samme 5 pinnene, slik at du kan lodde overskriftene på noen av begge sidene hvis det er batteri plassert på baksiden av modulen, og du don ' T vil bruke SQ -pinnen til RTC -modulen. Tabellen nedenfor viser pinnene i RTC -modulen:

Pinner Beskrivelse
1- (kvadratmeter) PIN for å generere firkantbølgen
2- (DS) PIN som leser utgangen fra temperatursensoren (DS18B20) hvis installert på RTC
2- (SCL) Klokkepinne for Arduino
4- (SDA) Datapin for Arduino
5- (VCC) PIN for å levere spenningen til modulen
6- (GND) PIN for å jordes modulen
7- (flaggermus) PIN for å koble til eksternt batteri som sikkerhetskopi

Å lage en digital klokke ved hjelp av RTC med Arduino Uno

For å designe sanntidsklokke, krever du følgende komponenter:

  • Arduino Uno
  • Jumper ledninger
  • Sanntidsklokkemodul (DS 1307)
  • LCD
  • Potensiometer
  • Brødbrett

Skjemaet for kretsen for den digitale klokken ved hjelp av RTC -modulen er gitt nedenfor . Her i det skjematiske har vi brukt DS (1307) Integrated Chip som nesten lik DS3231 -modulen.

Maskinvareenhet av digital klokke ved bruk av RTC

Vi har også implementert den digitale klokkekretsen i maskinvaren på en slik måte at vi først har plassert alle komponentene i brødtavlen. Neste har vi brukt tilkoblingsledningene for grensesnitt til komponentene med Arduino. Vi har lagt ut et bilde av maskinvarenheten til kretsen der de blå ledningene er datapinnene til LCD -en som er koblet til Arduino. Den gule ledningen er koblet til et potensiometer for kontrastjustering. Dessuten er de grå ledningene klokken og datapinnene til RTC -modulen koblet til Arduino.

Installere biblioteket til RTC

For å grensesnitt RTC -modulen med Arduino først må vi laste ned RTC -modulbiblioteket. Først må du åpne bibliotekansvarlig for Arduino IDE, og skriv etter det nøkkelordet rtclib I søkefeltet til bibliotekansvarlig. Neste må du finne Rtclib av adfruit og klikk deretter på installasjonsikonet i det blå for å installere biblioteket.

Når vi klikker på "Installer" -knappen, vises en ny dialogboks for bekreftelse, så vi må klikke på "Installer alle" -ikonet.

Arduino -kode for digital klokke ved bruk av RTC

Koden for å opprette en sanntidsklokke ved hjelp av Arduino er:

#include "rtclib.h "// Definere bibliotek for RTC -modulen
#include // Definere bibliotek for LCD
LiquidCrystal LCD (12, 11, 5, 4, 3, 2); // Tilordne Arduino -pinner for LCD
RTC_DS3231 RTC; // erklære RTC -modulen
void updatingRTC () // Funksjon for oppdatering av RTC for første gang

LCD.setcursor (0, 0); // Angi stedet for dataene som skal vises
LCD.skrive ut ("Oppdatering ..."); // Vis dataene
// Be brukeren oppgi ny dato og klokkeslett
const char txt [6] [15] = "år", "måned", "dag",
"time", "minutter", "sekunder";
String str = ""; // Opprette en streng
Lang RTC_Array [6]; // Definere en variabel for å lagre inndataene
mens (seriell.tilgjengelig())
Serie.lese(); // å lese seriell inngang

for (int i = 0; i < 6; i++) // loop for taking 6 inputs form the user
Serie.skrive ut ("gjeldende"); // vise dataene på serien
Serie.print (txt [i]);
Serie.skrive ut(": ");
samtidig som (!Serie.tilgjengelig())
// Sjekk om det er innspill fra brukeren

Str = seriell.ReadString (); // Lese strengen med inngang
Rtc_array [i] = str.toint (); // Konvertere brukerinngangen til nummer og lagre den til en matrise
Serie.println (rtc_array [i]); // Skrive ut inngangen til brukeren på serien

// Oppdatering av RTC ved inngangen til brukeren
RTC.Justering (DateTime (RTC_Array [0], RTC_Array [1], RTC_Array [2], RTC_Array [3], RTC_Array [4], RTC_Array [5]));
Serie.println ("tid og dato er oppdatert");

void displayUpdate () // funksjon for å oppdatere visningen av LCD
// Opprette og matrise for å konvertere sifferet til ord som starter fra 0 til 6
const char dayinwords [7] [4] = "sol", "man", "tirs", "ons", "thu", "fre", "lør";
// Konvertere siffermåneder med ord som starter fra 1 til 12
const char månedinwords [13] [4] = "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oktober", "nov", "des";
// Lesetid og dato og lagre dem i variabler
DateTime RTCTime = RTC.nå();
int sec = rtctime.andre (); // sekunder
int mins = rtctime.minutt (); // minutter
Int HRS = RTCTIME.tolvehour (); // timer
Int Day = RTCTime.DayOFtheweek (); // Dag i Word
int dd = rtctime.dag (); // dag i antall
int mth = rtctime.måned (); // måned
int yr = rtctime.år (); // år
LCD.setcursor (0, 0);/ *Angi stedet for å vise dato og ukedag med ord */
// Viser datoen i DD-MM-YYYY-format og ukedager
if (dd < 10) lcd.print("0");
LCD.trykk (DD);
LCD.skrive ut("-");
LCD.print (MonthinWords [Mth]);
LCD.skrive ut("-");
LCD.trykk (år);
LCD.skrive ut(" ");
LCD.print (dayinwords [dag]);
LCD.setcursor (0, 1);/ *Angi stedet for å vise tiden */
// Viser tiden på LCD
if (Hrs < 10) lcd.print("0");
LCD.trykk (HRS);
LCD.skrive ut(':');
hvis (min < 10) lcd.print("0");
LCD.trykk (min);
LCD.skrive ut(':');
hvis (sek < 10) lcd.print("0");
LCD.trykk (sek);
if (rtctime.ISPM ()) LCD.print ("pm"); // Viser AM/PM
annet LCD.print ("am");

ugyldig oppsett ()

Serie.Begynn (9600); // initialisere seriell kommunikasjon
LCD.Begynn (16,2); // initialisere LCD
RTC.begynne(); // initialisere RTC -modulen

ugyldig sløyfe ()

DisplayUpDate (); // å ringe funksjonen for å oppdatere LCD
hvis (seriell.tilgjengelig ()) // Sjekk om det er noen innspill fra brukeren
Char Input = Serial.Les (); // Lese inndata fra brukeren
if (input == 'r') updatingRtc (); // Hvis r er inngangen som er gitt, ring oppdateringsfunksjonen for RTC

Arduino -koden for å lage en klokke er samlet på en slik måte at vi først har definert biblioteket for RTC -modulen. Etter det har vi definert biblioteket for LCD og tildelt pinnene til Arduino til LCD og erklært at for å bruke funksjoner til RTC vil vi bruke nøkkelordet RTC.

Vi har opprettet to funksjoner, en for å oppdatere RTC -modulen når den er koblet til for første gang og den andre funksjonen for å oppdatere LCD.

I OppdateringRTC Funksjon Først har vi erklært et tegn for datoen og klokkeslettet og opprettet en tom streng der alle inngangene fra brukeren vil bli lagret. Siden det er 6 innganger som kreves fra brukeren for å oppdatere tid og dato, har vi brukt en for loop for å få inngangen fra brukeren ved å bruke seriell monitor til Arduino IDE.

Neste har vi brukt RTC.justere() Funksjon for å lagre gjeldende dato og klokkeslett i RTC -modulen.

Kommer til DisplayUpDate () Funksjon I starten har vi konvertert nummerinngangen for ukedagene og årets måned til karakterinngang og definert deretter formatet for datoen som er DD-MM-YYYY.

Neste har vi vist dato og klokkeslett på LCD -en ved hjelp av LCD.skrive ut() funksjon.

I installasjonsfunksjonen etter initialisering av seriell kommunikasjon blir både RTC- og LCD -modulene initialisert ved å bruke BEGIN -funksjonen.

Tilsvarende å komme til sløyfefunksjonen, den første DisplayUpDate () Funksjon kalles som viser gjeldende lagret dato og klokkeslett i RTC -modulen. For å oppdatere datoen og klokkeslettet vi har brukt og hvis tilstand når Karakter R legges inn som en seriell inngang Ring deretter UpdatingRTC -funksjonen og oppdater datoen og klokkeslettet for modulen.

Husk at RTC-modulen sparer tid og dato gitt første gang og fortsetter å oppdatere den datoen og klokkeslettet, selv om forsyningen er slått av fordi den har et innebygd batteri som holder modulen i gang. Derfor er datoen og klokkeslettet gitt for bare første gang, og den holder tiden til tid til den endres manuelt.

Maskinvareimplementering for digital klokke ved bruk av RTC med Arduino Uno

For å oppdatere tid og dato må vi oppgi tegnet “R” i seriemonitoren ved å trykke på CTRL+Enter og Arduino -koden vil kreve dataene for gjeldende dato og klokkeslett. Vi har lagt ut bildet nedenfor, slik at du kan være et klart bilde av de nødvendige inngangene:

Etter at du har lagt inn alle dataene, vil programmet fortelle at RTC -modulen er oppdatert. Mens du oppdaterer tiden og datoen, vises LCD at RTC blir oppdatert:

Når du har oppdatert datoen og klokkeslettet, vises den på LCD:

Konklusjon

Arduino UNO -styret er en avansert form for en mikrokontroller som har gjort grensesnitt av enheter med mikrokontrollere enkelt. Ved hjelp av Arduino Uno kan vi bygge forskjellige varianter av prosjekter. I denne oppskrivningen har vi designet en sanntidsklokke ved hjelp av RTC-modulen, og prosedyren blir kort forklart ved hjelp av Arduino-kode og simulering.