Jak zrobić zegar Infinity Arduino za pomocą modułu RTC

Jak zrobić zegar Infinity Arduino za pomocą modułu RTC

W nowoczesnych elektronicznych obwodach czasowych jest bardzo ważne. To samo dotyczy Arduino, Arduino ma wbudowany zegar timera, który liczy się do około 49 dni, ale po tym resetuje. Po drugie, wewnętrzny zegar Arduino nie jest w 100% dokładny; Zawsze istnieje pewien procent opóźnienia między zegariem Arduino a zegariem zewnętrznym. Tak więc, jeśli ktoś chce utworzyć dokładny zegar za pomocą Arduino, musimy polegać na module zewnętrznym znanym jako RTC (zegar w czasie rzeczywistym). Zobaczmy, jak połączyć ten moduł RTC z Arduino i utworzyć dokładny zegar cyfrowy.

Moduł RTC z Arduino

Czasami praca nad projektami Arduino potrzebuje dokładnego zegara czasu, aby Arduino działał i wykonał specjalne instrukcje i polecenia w określonym czasie. Arduino ma wbudowany zegar, jednak nie możemy na nim polegać z dwóch powodów:

    • Zegar Arduino jest niedokładny z błędem procentowym 0.5-1%.
    • Zegar Arduino zresetuje się automatycznie po zresetowaniu płyty.
    • Zegary Arduino nie mają kopii zapasowej zasilania, jeśli Arduino straci zasilanie, zegar zostanie zresetowany automatycznie.

Biorąc pod uwagę wyżej wymienione powody, użytkownicy wolą korzystać z zewnętrznego zegara sprzętowego lub modułu RTC. Tak więc jednym bardzo tanim i bardzo dokładnym modułem szeroko stosowanym jest DS1307. Zobaczmy, jak połączyć ten RTC z Arduino.

Moduł RTC biblioteka Arduino biblioteka Arduino

Aby połączyć Arduino z modułem RTC, musimy zainstalować niektóre niezbędne biblioteki, które mogą odczytać dane z modułu RTC. Wykonaj kroki, aby zainstalować biblioteki RTC:

    1. otwarty IDE
    2. Iść do Sekcja biblioteki
    3. Szukaj „RTclib”
    4. Zainstaluj DS3231_RTC I Rtclib przez Adafruit.

Moduł RTC DS1307

Moduł RTC DS1307 oparty jest na niewielkim chipie zegara DS1307, który obsługuje również protokół komunikacji I2C. Z tyłu modułu RTC mamy akumulator litowy. Ten moduł może dać dokładne informacje o sekundach, minutach, godzinach, dniu, datach, miesiącu i roku. Ma również możliwość automatycznej regulacji czasowej przez 31 dni w miesiącu wraz z obsługą błędów w roku Leap Year. Zegar może działać w ciągu 12 godzin lub 24-godzinnego czasu.


Niektóre główne najważniejsze informacje o tym module RTC:

    • Może pracować na dostawach 5V DC
    • Wyjście fali kwadratowej, które można zaprogramować
    • Wykrywanie awarii zasilania
    • Spożywaj bardzo mniejszą ilość prądu (500 mA)
    • 56-bajtowa nielotna pamięć RAM
    • Zapas baterii

Pinout modułu RTC

Nazwa pin Opis
Scl Pin wejściowy zegara dla interfejsu komunikacyjnego I2C
SDA Wyjście wejściowe danych dla komunikacji szeregowej I2C
VCC Zakres pinów mocy od 3.3 V do 5 V
GND Pin GND
Ds Zastosowanie do wejścia do czujnika temperatury
SQW Ten pin może generować cztery kwadratowe fale z częstotliwością 1Hz, 4 kHz, 8 kHz lub 32 kHz
NIETOPERZ Pin do zapasowania baterii, jeśli przerwano zasilanie główne

Schemat obwodu

Podłącz płytę Arduino z modułem RTC, jak pokazano na schemacie poniżej. Tutaj A4 i A5 Pins Arduino będą używane do komunikacji I2C z modułami RTC, a pingi 5 V i GND nadają wymaganą moc modułu RTC.

DS 1307 RTC PIN PIN Arduino
Vin 5v
GND GND
SDA A4
Scl A5

Kod

#włączać
#włączać
RTC_DS3231 real_time_clock;
czas charytatywny [32]; /*Charray jest zdefiniowany*/
void Setup ()

Seryjny.rozpocząć (9600); /*Rozpoczyna się komunikacja szeregowa*/
Drut.zaczynać(); /*Plik biblioteki, aby rozpocząć komunikację*/
zegar czasu rzeczywistego.zaczynać();
zegar czasu rzeczywistego.Dostosuj (DateTime (f (__ data __), f (__ time__)));
/*zegar czasu rzeczywistego.Dostosuj (DateTime (2022, 09, 26, 1, 58, 0))*/

Void Loop ()

DateTime teraz = real_time_clock.Teraz();
Sprintf (czas, "%02d:%02d:%02d%02d/%02d/%02d", teraz.Hour (), teraz.minute (), teraz.drugi (), teraz.Day (), teraz.miesiąc (), teraz.rok());
Seryjny.print (f („data/godzina:”)); /*To wydrukuje datę i godzinę*/
Seryjny.println (czas);
opóźnienie (1000); /*Opóźnienie 1 sekundy*/


Na początku kodu najpierw uwzględniliśmy drut.H I Rtclib do komunikacji z urządzeniami. Następnie utworzyliśmy obiekt RTCLIB o nazwie zegar czasu rzeczywistego. Następnie zdefiniowaliśmy tablicę char czas długości 32, które będą przechowywać informacje o datach i godzinie.

W funkcji konfiguracji i pętli użyliśmy następującego polecenia, aby upewnić się, że komunikacja I2C jest ustalona między modułami Arduino i RTC.

Drut.zaczynać I zegar czasu rzeczywistego.zaczynać Zapewni i sprawdzi połączenie RTC.

regulować() to przeciążona funkcja, która ustanawia datę i godzinę.

DateTime (f (__ data__), f (__ time__))


Ta funkcja ustawi datę i godzinę, w której skompilowano szkic.

Teraz() Funkcje zwracają datę i godzinę, a jej wartość będzie przechowywać w zmiennej "czas".

Następna godzina, minuta, drugi dzień, miesiąc, rok będzie obliczyć dokładną datę i wydrukować ją na monitorze szeregowym z opóźnieniem 1 sekund.

Sprzęt komputerowy

Wyjście

Monitor szeregowy zacznie drukować godzinę i datę, w której kod jest przesyłany na płytę Arduino.

Wniosek

Sam Arduino ma pewne funkcje związane z czasem Millis (), micros (). Jednak funkcje te nie dają dokładnego czasu; Zawsze istnieje szansa na opóźnienie niektórych milisekund. Aby tego uniknąć podczas korzystania z zewnętrznych modułów Arduino RTC. Te moduły, takie jak DS1307, dają nam dokładny czas z kopią zapasową baterii, która może trwać przez wiele lat. Ten przewodnik obejmuje sposób interfejsu tych modułów RTC z płytą Arduino.