RgNt5Mfc9aHvi
Zdjęcie przedstawia płytkę Arduino z podłączonymi kabelkami w wyświetlaczem pokazującym godzinę, temperaturę, dzień tygodnia oraz datę. Nad wyświetlaczem widoczne są kolorowe kabelki z wtyczkami wpięte w panel.

I_R_W15_M03 Przykładowe projekty

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Budowa modułu czasu

Moduł DS3231 to bardzo precyzyjny w odmierzaniu czasu rzeczywistego zegar RTC, który komunikuje się po szynie I2C. Wyposażony jest w układ kompensacji temperaturowej oscylatora (TCX0) i w zintegrowany kwarc, dzięki czemu nie ma już konieczności podpięcia zewnętrznego generatora kwarcowego. Do tego posiada większy zakres napięcia (2.3 V - 5.5 V) oraz baterię podtrzymującą pamięć.

RD4U42MVVBKXA
Moduł DS3231
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Na płytce mieści się także pamięć EEPROM AT24C32, która daje 32K pamięci, a zapisane w niej dane nie są usuwane w przypadku braku zasilania. Pozwala to na stworzenie np. prostego rejestratora zdarzeń.

Jeśli nie chcemy ingerować w strukturę modułu, najlepiej zastosować akumulator LIR2032. Możemy też użyć zwykłej baterii CR2032, ale w takiej sytuacji musimy pamiętać o kwestii jej ładowania. W przypadku, gdy moduł ma być zasilany napięciem 5V, należy odlutować diodę przy układzie DS3231 lub przeciąć ścieżkę pomiędzy diodą a rezystorem (chodzi o ścieżkę biegnącą na lewo od litery S w oznaczeniu SCL). Natomiast przy zasilaniu modułu napięciem 3.3 V nie ma takiej potrzeby. Spadek napięcia na diodzie sprawia, że dopóki napięcie ładowania nie jest większe od napięcia baterii – ta nie będzie ładowana, a dioda zapobiegnie rozładowywaniu baterii.

***Specyfikacja modułu:***

Funkcje

  • Zegar RTC z podtrzymaniem pamięci (wbudowana bateria):

    • odmierza sekundy, minuty, godziny, dni miesiąca, miesiące, dni tygodnia, lata;

    • zawiera dwa alarmy do ustawienia (z wieloma możliwymi interwałami do wyboru);

    • wyznacza lata przestępne do roku 2100;

    • dokonuje pomiary temperatury.

  • Pamięć EEPROM (konfigurowalny adres na magistrali I2C za pomocą zworek A0, A1 i A2).

Przykłady pracy z modułem DS3231

Wyświetlanie daty i czasu

Co nam będzie potrzebne:

  • moduł DS3231,

  • płytka Arduino Uno,

  • przewody połączeniowe męsko‑żeńskie.

Do poprawnego działania moduł DS3231 potrzebujesz zainstalowanej biblioteki DS3231.h. Można ją pobrać, klikając w odnośnik:

RjNf3CsD74RBV

Przycisk z plikiem biblioteki DS3231 wykorzystanej w projekcie

Plik ZIP o rozmiarze 380.03 KB w języku polskim

Po pobraniu bibliotekę należy zainstalować w Arduino IDE.

Podłączamy moduł DS3231 według następującego schematu:

RU3NGTP8K154P
Schemat ideowy
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Teraz przechodzimy do programowania.

Najpierw dołączamy bibliotekę.

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny.

Następnie inicjujemy DS3231 za pomocą interfejsu sprzętowego.

Linia 1. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik.

W pętli setup() ustawiamy prędkość połączenia z monitorem portu szeregowego na 115 200 bodów.

Linia 1. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik.

Ustawiamy ręcznie datę i godzinę.

Czas i datę wpisujemy według poniższego kodu. Ustawiamy dzień tygodnia, czas (HH:MM:SS) oraz datę (DD:MM:YYYY).

Linia 1. rtc kropka setDOW otwórz nawias okrągły WEDNESDAY zamknij nawias okrągły średnik. Linia 2. rtc kropka setTime otwórz nawias okrągły 11 przecinek 05 przecinek 0 zamknij nawias okrągły średnik. Linia 3. rtc kropka setDate otwórz nawias okrągły 25 przecinek 1 przecinek 2021 zamknij nawias okrągły średnik.

W pętli loop() deklarujemy, jakie informacje będą wyświetlane w monitorze portu szeregowego.

Linia 1. Serial kropka print otwórz nawias okrągły rtc kropka getDOWStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły cudzysłów cudzysłów zamknij nawias okrągły średnik. Linia 4. Serial kropka print otwórz nawias okrągły rtc kropka getDateStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 5. Serial kropka print otwórz nawias okrągły cudzysłów minus minus cudzysłów zamknij nawias okrągły średnik. Linia 7. Serial kropka println otwórz nawias okrągły rtc kropka getTimeStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik.

Kod

Całość kodu wygląda następująco:

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny. Linia 3. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik. Linia 5. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik. Linia 9. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. prawy ukośnik prawy ukośnik rtc kropka setDOW otwórz nawias okrągły WEDNESDAY zamknij nawias okrągły średnik. Linia 12. prawy ukośnik prawy ukośnik rtc kropka setTime otwórz nawias okrągły 11 przecinek 20 przecinek 00 zamknij nawias okrągły średnik. Linia 13. prawy ukośnik prawy ukośnik rtc kropka setDate otwórz nawias okrągły 25 przecinek 01 przecinek 2021 zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy. Linia 16. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. Serial kropka print otwórz nawias okrągły rtc kropka getDOWStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 18. Serial kropka print otwórz nawias okrągły cudzysłów cudzysłów zamknij nawias okrągły średnik. Linia 20. Serial kropka print otwórz nawias okrągły rtc kropka getDateStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 21. Serial kropka print otwórz nawias okrągły cudzysłów minus minus cudzysłów zamknij nawias okrągły średnik. Linia 23. Serial kropka println otwórz nawias okrągły rtc kropka getTimeStr otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 25. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 26. zamknij nawias klamrowy.

Teraz wgrajmy kod do Arduino Uno i sprawdźmy, co pojawi nam się w monitorze portu szeregowego.

RM8FQEQJPF2CG
Wyniki wyświetlane na konsoli
Źródło: Contentplus.pl Sp. z o.o, licencja: CC BY 3.0.

Wyświetlanie temperatury

Co nam będzie potrzebne:

  • moduł DS3231,

  • płytka Arduino Uno,

  • przewody połączeniowe męsko‑żeńskie.

Połączenie jest identyczne jak w przypadku wyświetlania daty i czasu, więc nie musimy niczego przepinać.

Przejdźmy zatem do pisania programu.

Najpierw dołączamy bibliotekę.

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny.

Następnie inicjujemy DS3231 za pomocą interfejsu sprzętowego.

Linia 1. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik.

W pętli setup() ustawiamy prędkość połączenia z monitorem portu szeregowego na 115 200 bodów.

Linia 1. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik.

Inicjujemy obiekt RTC.

Linia 1. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik.

W pętli loop() deklarujemy wyświetlanie temperatury.

Linia 1. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły rtc kropka getTemp otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 3. Serial kropka println otwórz nawias okrągły cudzysłów st kropka C cudzysłów zamknij nawias okrągły średnik.

Kod

Całość kodu wygląda następująco:

Linia 1. kratka include otwórz nawias ostrokątny DS3231 kropka h zamknij nawias ostrokątny. Linia 3. DS3231 rtc otwórz nawias okrągły SDA przecinek SCL zamknij nawias okrągły średnik. Linia 5. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. Serial kropka begin otwórz nawias okrągły 115200 zamknij nawias okrągły średnik. Linia 8. rtc kropka begin otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. zamknij nawias klamrowy. Linia 11. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 13. Serial kropka print otwórz nawias okrągły rtc kropka getTemp otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 14. Serial kropka println otwórz nawias okrągły cudzysłów st kropka C cudzysłów zamknij nawias okrągły średnik. Linia 15. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 16. zamknij nawias klamrowy.
Polecenie 1

Zmodyfikuj kod tak, by w monitorze portu szeregowego pokazywane były następujące informacje:

  • data,

  • czas,

  • temperatura.

R13VT799C7BPK
Wynik wyświetlany na konsoli
Źródło: Contentplus.pl Sp. z o.o, licencja: CC BY 3.0.
Polecenie 2

Podłącz wyświetlacz LCD i wyświetl na nim następujące informacje:

  • Ekran 1:

    • wiersz 1: data,

    • wiersz 2: czas.

Czas wyświetlania ekranu 1 wynosi 5 sekund.

  • Ekran 2:

    • wiersz 1: wyświetla napis TEMPERATURA,

    • wiersz 2: wyświetla aktualną temperaturę.

Czas wyświetlania ekranu 2 wynosi 5 sekund.

R1VOA2ARXOGTS
Wynik działania programu
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.