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