Arduino zegar ds3231 z dużą czytelną czcionką

Arduino zegar ds3231 z dużą czytelną czcionką

Cześć , od dawna czytam poradniki na majsterkowie i sam uczę się o arduino najczęściej stąd. Chciałbym podzielić się z wami projektem zegarka opartego na najdokładniejszym układzie RTC (Real Time Clock) a mianowicie DS3231, wyświetlać będzie czas na wyświetlaczu LCD 16×2 sterowanym przez konwerter na magistrali I2C. Powiem też o podstawach pracy ze stringami ;).
IMG_20151230_011900[1]
Co nam będzie potrzebne :
-Arduino (ja używam Leonardo ale może być jakiekolwiek, lub sama Atmega np 328) link
-Wyświetlacz z konwerterem I2C link
-Moduł ds3231 link
-Płytka stykowa link
-Kabelki/zworki

Podłączenie jest banalnie proste, piny SDA i SCL obu modułów podłaczamy do SDA i SCL w Arduino, to samo z zasilaniem, VCC do 5V a GND do GND w Arduino. Do magistrali I2C możemy podłączać wiele urządzeń gdyż każde ma swój własny adres.

 

Poniżej kod

Potrzeba jeszcze aby wyjaśnić operacje na stringu : 
dzien[0] –> wyświetla pierwszy znak stringa “dzien”
ioo=dzien[0]-48 –> przyrównuje zmienną “ioo” typu int do pierwszego znaku stringa “dzien” pomniejszonego o 48 gdyż string zapisuje się w kodzie ASCII a INTa chcemy w DEC.

Na wyświetlaczu pokaże się na czas godzina:minuta w dużej czcionce oraz mała sekunda, po 10 sekundach ekran wyczyści się i pokaże się dużą czcionką aktualny dzień roku i po 10 sekundach ekran wróci na czas i tak w kółko :)

Aby wszystko działało poprawnie musimy posiadać bibliotekę DS3231, przygotował ją Pan Korneliusz Jarzębski strona.
Ja ją delikatnie przerobiłem i można pobrać poniżej :
Arduino-DS3231-master
Należy dodać również bibliotekę LiquidCrystalI2C :
LiquidCrystal_I2C

Jeśli będą jakieś pytania to proszę zadawać pod wpisem lub na pw, jeśli się spodobało proszę o ocenę :)
Pozdrawiam

Ocena: 4.25/5 (głosów: 63)

Podobne posty

31 komentarzy do “Arduino zegar ds3231 z dużą czytelną czcionką

  • Zmiana czasu Lato/Zima czy korekta zegara – niemożliwe. Projekt prosty by nie powiedzieć banalny. Ciekawy i interesujący dla początkującego.

    Jeżeli o początkujących chodzi, to oni oczekują informacji. Tych tu brak. Jest prosty kod gdzie nie jest wytłumaczona każda linijka, jest artykuł który nic nie mówi.
    Są też biblioteki których arduino nie posiada, to też taki żółtodziób nie poradzi sobie z LCD na I2C – gdyż bibliotekę trzeba “dograć”, a szkoda że tu nie jest ona dostępna.

    Pomysł – pewne 5
    Wykonanie – 3-

    Odpowiedz
    • poradników o podłączeniu lcd na i2c jest multum więc nie widziałem potrzeby opisywania tego, pracuję nad rozwiązaniem czasu lato zima jakoś sensownie oraz roku przestępnego, a co do korekty zegarka to inny na ds3231 działa u mnie w domu już ponad rok i nawet o minutę się nie “rozklekotał” ale dzięki za konstruktywną krytykę :)

      Odpowiedz
  • Witam, zrobiłem sobie ten projekt, działa super, lecz pozmieniałem sobie czcionkę na taką co mi się podoba. I teraz mam problem bo z niej się nie da zrobić dwukropka pomiędzy godzinami a minutami. Gdy dodaje nowe Char’y i próbuje je inicjalizować i dodać jako dwukropek to na całym wyświetlaczu robią sie krzaczki. Jak wymyślić dwukropek?

    Odpowiedz
      • Zastanawiam się gdzie tu napisać na pw.. i nie znalazłem..
        Dobra ale ok. poradziłem sobie jako tako z dwukropkiem, ale mam inny problem. Jak już pisałem zmieniłem sobie czcionkę. Dodałem też temperaturę. I ogólnie to działa dobrze, godzinę i temperaturę pokazuje ale problem mam z tym że czasami tak jakby liczby się nie odświeżają i nachodzi 1 na 2, czy 3 na 4. Zastanawiam się ale nie umiem do tego dojść dlaczego.
        Ogólnie kod jest praktycznie taki sam tylko ta czcionka zmieniona a u Ciebie liczby się nie nachodzą..
        wrzucam kod tutaj: http://wklejaj.pl/lziOP2Pk8QXX
        Pozdrawiam i z góry dzięki

        Odpowiedz
        • Nie widzę błędu u Ciebie w kodzie, masz przy zmianie ekranu lcd.clear() więc nie powinno się nic nakładać :) co do temperatury, zrób może na 3 albo 4 znaki będzie fajniej wyglądać

          Odpowiedz
  • Witam, mam problem z wyświetleniem temperatury pobranej z modułu RTC rtc ds3231, a konkretnie to mam problem z konwersją clock.readTemperature() do String’a.
    Szukałem już rozwiązania w sieci niestety z marnym skutkiem ;/

    Liczę na Wasza pomoc!

    Odpowiedz
  • Cześć, podoba mi się bardzo pomysł na wyświetlanie dużych cyfr. Natomiast kod jest straszny. Polecam bardziej rozsądne nazywanie zmiennych, wtedy 90% komentarzy byłoby zbędnych a czytelność kodu wzrosłaby znacznie. To razi najbardziej. Jest też dużo zduplikowanego kodu. Można byłoby go sporo skrócić.

    Odpowiedz
  • Witam. Zegar działa fajnie z małym ale… Nie mam drugiej cyfry sekund a w dniu roku tylko D i R… Co może być powodem?
    Pozdrawiam
    Andrzej

    Odpowiedz
  • Super wydaje się proste do zrobienia ale nie będę ryzykował, mam pytanko kończę budować automat arcade i szukam kogoś kto mógłby zrobić coś podobnego co Pan z tym żeby można było podłączyć pod wrzutnik monet ch923 procesorowy (z Botland.pl) + Pc + pod minipaca, żeby wyświetlało godzinę i ile kasy zostało już wrzucone taka mini prywatna skarbonka z aktualnym czasem ;)
    Ktoś jest w stanie się podjąć takiego bajeru ?

    Odpowiedz
  • Wywala mi taki bład: Arduino:1.8.11 (Windows 10), Płytka:”Arduino Nano, ATmega328P”

    zegar:6:1: error: ‘RTCDateTime’ does not name a type; did you mean ‘DateTime’?

    RTCDateTime dt;

    ^~~

    DateTime

    E:\1Arduino\zegar\zegar.ino: In function ‘void setup()’:

    zegar:116:9: error: ‘class DS3231’ has no member named ‘begin’

    clock.begin(); // inicjalizujemy zegar

    ^

    E:\1Arduino\zegar\zegar.ino: In function ‘void loop()’:

    zegar:294:3: error: ‘dt’ was not declared in this scope

    dt = clock.getDateTime(); // pobiera czas z zegara

    ^~

    zegar:294:14: error: ‘class DS3231’ has no member named ‘getDateTime’; did you mean ‘getDate’?

    dt = clock.getDateTime(); // pobiera czas z zegara

    ^~~

    getDate

    E:\1Arduino\zegar\zegar.ino: In function ‘void pokaczas()’:

    zegar:309:24: error: ‘class DS3231’ has no member named ‘dateFormat’

    String czas = (clock.dateFormat(“H:i:s”, dt)); // tworzymy stringa z odczytu godziny:minuty:sekundy z zegara i zapisujemy do stringa “czas”

    ^~

    zegar:309:44: error: ‘dt’ was not declared in this scope

    String czas = (clock.dateFormat(“H:i:s”, dt)); // tworzymy stringa z odczytu godziny:minuty:sekundy z zegara i zapisujemy do stringa “czas”

    ^~

    zegar:322:19: error: ‘class DS3231’ has no member named ‘dateFormat’

    lcd.print(clock.dateFormat(“s”, dt)); // wyświetlamy sekundy

    ^~

    E:\1Arduino\zegar\zegar.ino: In function ‘void pokadzien()’:

    zegar:325:25: error: ‘class DS3231’ has no member named ‘dateFormat’

    String dzien = (clock.dateFormat(“z”, dt)); // pobieramy dzień roku

    ^~

    zegar:325:41: error: ‘dt’ was not declared in this scope

    String dzien = (clock.dateFormat(“z”, dt)); // pobieramy dzień roku

    ^~

    Znaleziono wiele bibliotek w “LiquidCrystal_I2C.h”
    Wykorzystane: E:\1Arduino\libraries\LiquidCrystal_I2C-1.1.2
    Niewykorzystane: E:\1Arduino\libraries\Newliquidcrystal_1.3.5
    exit status 1
    ‘RTCDateTime’ does not name a type; did you mean ‘DateTime’?

    Ten raport powinien zawierać więcej informacji jeśli w
    File -> Preferencje zostanie włączona opcja “Pokaż
    szczegółowe informacje podczas kompilacji”

    Odpowiedz
      • Ma po prostu wiele bibliotek i Arduino nie wie którą załadować. Są 2 sposoby rozwiązania tego problemu. Albo pokazać fizycznie arduino gdzie ma tą konkretną bibliotekę wraz ze ścieżką dostępu, albo wywalić wszystkie zdublowane i w starych wersjach. Nie wiem jak to jest w Arduino IDE bo nie korzystałem z niego od 6 lat. Obecnie programuję tylko w Eclipse i C. Polecam.

        Odpowiedz
  • Witam,

    A ja mam inny problem z tym kodem:
    Po edycji
    LiquidCrystal_I2C lcd(0x27,16,2); // adres wyświetlacza,liczbę kolumn,wierszy

    na
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

    oraz
    lcd.init();
    na
    lcd.begin(20,4);

    nie wyświetla mi nic poza dwukropkiem oraz “dzień rok”

    co może być przyczyną?

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?