Jak zrobić zegar cyfrowy za pomocą modułu RTC i Arduino Uno

Jak zrobić zegar cyfrowy za pomocą modułu RTC i Arduino Uno
Arduino to zróżnicowana platforma, która zapewnia zarówno początkujących, jak i ekspertów do tworzenia różnych rodzajów projektów. Arduino oferuje różnorodne płyty, które różnią się od siebie w zależności od specyfikacji każdej płyty. Arduino Uno jest jedną z najczęściej używanych tablic rodziny Arduino, ponieważ są kompatybilne z wieloma peryferyjami. Zrobiliśmy zegar w czasie rzeczywistym, łącząc moduł zegara w czasie rzeczywistym z Arduino Uno.

Co to jest moduł RTC

Jest to moduł zegara w czasie rzeczywistym, który zapisuje dane czasu i daty, a także wyświetla je na podłączonym ekranie wyświetlania. Ten moduł jest aktualizowany czas i datę i ma kryształowy oscylator, który generuje sygnał o stałej częstotliwości. Ponadto moduł RTC ma dedykowane szpilki czujnika temperatury z tyłu i istnieje specjalny szpilka, która odczytuje wyjście czujnika.

Moduł jest również wyposażony w akumulator litowo-jonowy 3V, który utrzymuje moduł działający przez długi czas, jeśli główny zasilanie zostanie odłączone.

W sumie jest 7 pinów modułu, ale po przeciwnej stronie ma on te same 5 pinów, dzięki czemu możesz lutować nagłówki po obu stronach, jeśli na tylnej stronie modułu umieszcza baterię, a ty nie t chcesz użyć pin SQ modułu RTC. Poniższa tabela pokazuje szpilki modułu RTC:

Szpilki Opis
1- (sq) PIN do generowania fali kwadratowej
2- (DS) Pin, który odczytuje wyjście czujnika temperatury (DS18B20), jeśli zostanie zainstalowany w RTC
2- (SCL) Pin ze zegarem dla Arduino
4- (SDA) Pin do danych dla Arduino
5- (VCC) PIN do dostarczania napięcia do modułu
6- (GND) Pin do uziemienia modułu
7- (nietoperz) PIN do podłączenia zewnętrznej baterii jako kopii zapasowej

Tworzenie cyfrowego zegara za pomocą RTC z Arduino Uno

Aby zaprojektować zegar w czasie rzeczywistym, będziesz wymagać następujących komponentów:

  • Arduino Uno
  • Przewody zworki
  • Moduł zegara w czasie rzeczywistym (DS 1307)
  • LCD
  • Potencjometr
  • Tablica chleba

Schemat obwodu dla zegara cyfrowego za pomocą modułu RTC podano poniżej . Tutaj, na schemacie, użyliśmy zintegrowanego układu DS (1307), który jest prawie podobny do modułu DS3231.

Montaż sprzętu cyfrowego zegara za pomocą RTC

Wdrożyliśmy również cyfrowy obwód zegara w sprzęcie w taki sposób, że najpierw umieściliśmy wszystkie komponenty na tablicy chleba. Następnie użyliśmy przewodów łączących do interfejsu komponentów z Arduino. Opublikowaliśmy obraz zespołu sprzętowego obwodu, w którym niebieskie przewody są szpilkami danych LCD podłączonymi do Arduino. Żółty drut jest połączony potencjometrem do regulacji kontrastu. Ponadto szare przewody to zegar i styki danych modułu RTC połączone z Arduino.

Instalowanie biblioteki RTC

Aby połączyć moduł RTC z Arduino najpierw musimy pobrać bibliotekę modułu RTC. Najpierw musisz otworzyć menedżera biblioteki Arduino IDE, a następnie napisać słowo kluczowe rtclib w pasku wyszukiwania menedżera biblioteki. Następnie musisz znaleźć RTCLIB przez adfruit a następnie kliknij ikonę instaluj na niebiesko, aby zainstalować bibliotekę.

Po kliknięciu przycisku „Zainstaluj” pojawi się nowe okno dialogowe do potwierdzenia, więc musimy kliknąć ikonę „Zainstaluj wszystko”.

Kod Arduino dla zegara cyfrowego za pomocą RTC

Kod tworzenia zegara w czasie rzeczywistym za pomocą Arduino jest:

#include "rtclib.h "// definiowanie biblioteki modułu RTC
#include // definiowanie biblioteki dla LCD
Płyncrystal LCD (12, 11, 5, 4, 3, 2); // Przypisanie pinów Arduino do LCD
RTC_DS3231 RTC; // deklarowanie modułu RTC
void aktualizatertc () // funkcja do aktualizacji RTC po raz pierwszy

LCD.setCursor (0, 0); // Ustawienie miejsca dla wyświetlania danych
LCD.drukuj („Aktualizacja…”); // Wyświetlanie danych
// Poproś użytkownika o wprowadzenie nowej daty i godziny
const char txt [6] [15] = „rok”, „miesiąc”, „dzień”,
„Hour”, „Minute”, „Seconds”;
String str = ""; // tworzenie ciągu
długi RTC_Array [6]; // definiowanie zmiennej do przechowywania danych wejściowych
When (serial.dostępny())
Seryjny.Czytać(); // Odczytanie wejścia szeregowego

dla (int i = 0; i < 6; i++) // loop for taking 6 inputs form the user
Seryjny.drukuj („bieżący”); // Wyświetlanie danych na temat serialu
Seryjny.print (txt [i]);
Seryjny.print („:”);
chwila (!Seryjny.dostępny())
// Sprawdzanie, czy jest wprowadzanie danych od użytkownika

str = serial.ReadString (); // Odczytanie ciągów wejściowych
Rtc_array [i] = str.toint (); // Konwertowanie danych wejściowych użytkownika na liczbę i zapisanie go w tablicy
Seryjny.println (rtc_array [i]); // Drukowanie wejścia użytkownika w serialu

// aktualizacja RTC przez wejście użytkownika
RTC.Dostosuj (dateTime (rtc_array [0], rtc_array [1], rtc_array [2], rtc_array [3], rtc_array [4], rtc_array [5]));
Seryjny.println („godzina i data jest aktualizowana”);

void displayUpdate () // funkcja do aktualizacji wyświetlania LCD
// tworzenie i tablica do konwersji cyfry na słowa zaczynające się od 0 do 6
const Char Dayinwords [7] [4] = „Sun”, „Mon”, „Tue”, „Wed”, „Thu”, „pt”, „sat”;
// przekształcanie cyfr miesięcy słowami zaczynającymi się od 1 do 12
const char miesiącinwords [13] [4] = "", „Jan”, „Feb”, „Mar”, „Apr”, „May”, „Jun”, „Jul”, „Aug”, „Sep”, „Oct”, „Nov”, „dec”;
// godzina czytania i datę i zapisywanie ich w zmiennych
DateTime Rtctime = RTC.Teraz();
int sec = rtctime.drugi (); // sekundy
int mins = rtctime.minute (); // minuty
int hrs = rtctime.Dwanaście lat (); // godzin
int dzień = rtctime.Dayoftheweek (); // dzień w słowie
int dd = rtctime.dzień (); // dzień
int mth = rtctime.miesiąc (); // miesiąc
int yr = rtctime.rok (); // rok
LCD.setCursor (0, 0);/ *Ustawienie miejsca do wyświetlania daty i dnia tygodnia słowami */
// Wyświetlanie daty w formacie DD-MM-YYYY i dni tygodnia
if (dd < 10) lcd.print("0");
LCD.druk (dd);
LCD.wydrukować("-");
LCD.drukuj (miesiącInwords [MTH]);
LCD.wydrukować("-");
LCD.wydrukować (rok);
LCD.druk („”);
LCD.drukuj (DayInwords [dzień]);
LCD.setCursor (0, 1);/ *Ustawienie miejsca do wyświetlania czasu */
// Wyświetlanie czasu na LCD
if (HR < 10) lcd.print("0");
LCD.wydruku (HRS);
LCD.wydrukować(':');
if (min < 10) lcd.print("0");
LCD.druk (mins);
LCD.wydrukować(':');
if (s < 10) lcd.print("0");
LCD.druk (s);
if (rtctime.ISPM ()) LCD.druk („PM”); // Wyświetlanie AM/PM
W przeciwnym razie LCD.druk („AM”);

void Setup ()

Seryjny.rozpocząć (9600); // Inicjowanie komunikacji szeregowej
LCD.rozpocząć (16,2); // Inicjowanie LCD
RTC.zaczynać(); // Inicjowanie modułu RTC

Void Loop ()

DisplayUpdate (); // wywoływanie funkcji do aktualizacji LCD
if (serial.Dostępne ()) // sprawdzanie, czy jest jakieś dane wejściowe od użytkownika
Char Input = szeregowy.odczyt (); // odczyt wejściu od użytkownika
if (input == 'r') aktualizacjaRtc (); // Jeśli r jest wejście podane podane funkcję aktualizacji dla RTC

Kod Arduino do tworzenia zegara jest kompilowany w taki sposób, że najpierw zdefiniowaliśmy bibliotekę modułu RTC. Następnie zdefiniowaliśmy bibliotekę LCD i przypisaliśmy szpilki Arduino do LCD i oświadczyliśmy, że aby używać funkcji RTC.

Utworzyliśmy dwie funkcje, jedną do aktualizacji modułu RTC po połączeniu po raz pierwszy, a drugą funkcję aktualizacji LCD.

w aktualizacjaRtc Funkcja Najpierw zadeklarowaliśmy postać dla daty i godziny tygodnia i stworzyliśmy pusty ciąg, w którym wszystkie dane wejściowe od użytkownika będą przechowywane. Ponieważ użytkownika wymagane jest 6 danych wejściowych do aktualizacji godziny i daty, użyliśmy pętli, aby uzyskać dane wejściowe od użytkownika za pomocą monitora szeregowego Arduino IDE.

Następnie użyliśmy RTC.regulować() funkcja, aby zapisać bieżącą datę i godzinę w module RTC.

Przybycie do DisplayUpdate () Funkcja na początku przekonwertowaliśmy dane wejściowe liczby na dni tygodnia i miesiąc roku na wejście znaków, a następnie zdefiniowaliśmy format daty, jaką jest DD-MM-yyyy.

Następnie wyświetliśmy datę i godzinę na LCD za pomocą LCD.wydrukować() funkcjonować.

W funkcji konfiguracji po zainicjowaniu komunikacji szeregowej moduły RTC, jak i LCD są inicjowane za pomocą funkcji początkowej.

Podobnie, przychodząc do funkcji pętli, pierwsza DisplayUpdate () Funkcja jest wywoływana, która wyświetla bieżącą zapisaną datę i godzinę w module RTC. Aby zaktualizować datę i godzinę, której użyliśmy i jeśli stan, gdy Znak R jest wprowadzany jako wejście szeregowe Następnie zadzwoń do funkcji aktualizowaniaRTC i zaktualizuj datę i godzinę modułu.

Pamiętaj, że moduł RTC oszczędza godzinę i datę, biorąc pod uwagę pierwszy raz i aktualizuje tę datę i godzinę, nawet jeśli zasilanie jest wyłączone, ponieważ ma wbudowaną baterię, która utrzymuje działanie modułu. Stąd data i godzina wprowadza się tylko po raz pierwszy i utrzymuje zapis czasu, aż zostanie zmieniony ręcznie.

Wdrożenie sprzętowe dla zegara cyfrowego za pomocą RTC z Arduino Uno

Aby zaktualizować godzinę i datę, musimy wprowadzić znak „R” w monitor szeregowych, naciskając Ctrl+Enter, a kod Arduino będzie wymagał danych na bieżącą datę i godzinę. Opublikowaliśmy poniższy obraz, abyś mógł być wyraźnym obrazem wymaganych danych wejściowych:

Po wprowadzeniu wszystkich danych program informuje, że moduł RTC zostanie zaktualizowany. Podczas aktualizacji czasu i daty wyświetla wyświetlanie LCD, że RTC jest aktualizowany:

Po zaktualizowaniu daty i godziny zostanie wyświetlona na LCD:

Wniosek

Board Arduino UNO to zaawansowana forma mikrokontrolera, która ułatwia interfejsy urządzeń z mikrokontrolerem. Korzystając z Arduino UNO, możemy budować różne odmiany projektów. W tym zapisie zaprojektowaliśmy zegar czasu rzeczywistego za pomocą modułu RTC, a procedura jest krótko wyjaśniona za pomocą kodu Arduino i symulacji.