logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zegarek na Arduino z regulacją czasu oraz datą na DS1307

Bullseye 12 Mar 2018 22:29 7413 19
  • Zegarek na Arduino z regulacją czasu oraz datą na DS1307

    Hej,
    ostatnio naszła mnie chęć i ochot by podzielić się moim zegarkiem na Arduino - wraz z datą, oraz możliwością ustawienia wszystkiego z guziczków.
    Na wstępie zaznaczę, że widziałem iż sporo osób ma z tym problem, dlatego wstawiam swój.
    Dodam też że jestem mocno początkujący, i wiem że na 100% dałoby się to zrobić inaczej, czy też lepiej - nie mniej działa i nie kosztuje majątku :)

    Co potrzebujemy ?
    Arduino (ja używałem Mega, myślę że PRO MINI jednak lepiej się sprawdzi) akurat się walała
    Moduł DS1307
    Wyświetlacz OLED 128x64 na SSD1306 I2C

    Podłączenie jest następujące:
    piny SDA i SCL łączymy z wyświetlaczem i modułem zegarka
    +5V i GND tak samo do stosownych wyjść Arduino (zasilam przez DC12V zintegrowaną wtyczką w Arduino).
    piny 2 (menu), 3 (plus), 4 (minus) podłączamy do przełącznika (który zwiera je do masy).


    Program, w załączeniu.
    Do obsługi zegarka mamy 3 guziki:
    1. Menu
    2. +
    3. -
    Tego chyba tłumaczyć nie trzeba :)

    Zegarek dodaje automatycznie 0 na początku w liczbach mniejszych niż 10.

    Zasada działania:

    Samo menu jest obsługiwane przez dodawanie 1 do wartości początkowej 0 w zmiennej MenuState.
    Wciśnięcie guzika menu, dodaje tą wartość zaczynając od początkowej 0 (główny ekran zegara), gdy dojdziemy do ostatniego menu (menu zapisu), wartość MenuState jest zerowana.

    Obudowa to wytwór mojej wyobraźni, zrealizowanej na drukarce 3D - z racji tego że nikt raczej takiego zegarka na Mega nie będzie robił to raczej ona się nie przyda, dodaję wiec tylko na sam moduł wyświetlacza.

    Słowa krytyki mile widziane, choć wolałbym konstruktywne, które nakierują mnie w przyszłości co robie nie tak w kodzie, na pewno wiem że za dużo zmiennych walę i zaśmiecam RAM, ale niestety tego nie wiem jak przeskoczyć :(

    Zegarek na Arduino z regulacją czasu oraz datą na DS1307
    Załączniki:

    Fajne? Ranking DIY
    O autorze
    Bullseye
    Poziom 27  
    Offline 
    Specjalizuje się w: mechatronika
    Bullseye napisał 1454 postów o ocenie 88, pomógł 55 razy. Mieszka w mieście Warszawa. Jest z nami od 2004 roku.
  • #2 17099417
    Konto nie istnieje
    Poziom 1  
  • #3 17099595
    Bullseye
    Poziom 27  
    Bullseye napisał:
    Arduino (ja używałem Mega, myślę że PRO MINI jednak lepiej się sprawdzi)

    Zaznaczyłem że lepiej PRO MINI się sprawdzi lepiej :)
    Z resztą, raczej to posłuży komuś jako wstęp do czegoś większego - jest kod cały dostępny, więc co za problem rozbudować to o kolejne bajery ?

    eurotips napisał:
    wykorzystałeś chociaż 1% jego zasobów ?

    Szkic używa 14498 bajtów (44%) pamięci programu. Maksimum to 32256 bajtów.
    Zmienne globalne używają 1458 bajtów (71%) pamięci dynamicznej, pozostawiając 590 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

    Więc chyba w większym stopniu niż 1% go użyłem :)
  • #4 17099680
    Konto nie istnieje
    Poziom 1  
  • #6 17099751
    Slawek K.
    Poziom 35  
    Bullseye napisał:
    Szkic używa 14498 bajtów (44%) pamięci programu. Maksimum to 32256 bajtów.

    W mega ? chyba nie.

    Pozdr
    Sławek
  • #10 17100239
    Bullseye
    Poziom 27  
    Według specyfikacji ma chyba do 2s w ciągu 24h.
    Na razie testuje 3dzien i jest ta sama godzina co na PC.

    Oczywiście chodziło o liczby mniejsze niż 10 czyli mniejsze/równe 9. Dzięki :)


    Co do wyświetlania nazwy dnia, jest tez 16px miejsca na górze, może dodam :)
  • #11 17100293
    Konto nie istnieje
    Poziom 1  
  • #12 17199118
    Bullseye
    Poziom 27  
    Dzięki kolego za podpowiedź, faktycznie, gdy nie używam rysowania linii, biblioteka jest mega lekka w porównaniu do Adafruita. Zyskałem kupę wolnego miejsca ! Dokładniej z 80% zajętego miejsca, spadło do 20% a wygląda wszystko tak samo :)
  • #13 17306716
    Demon_22
    Poziom 9  
    ARDUINO MEGA? Wykorzystałeś niewielką część jego możliwości. Strata kasy.
  • #14 17306902
    Bullseye
    Poziom 27  
    Powiedziałbym że nie wykorzystałem prawie żadnej części MEGA, ale jako że jesteś zaawansowanym użytkownikiem Demonie, to powinieneś wiedzieć że jako że dałem cały kod źródłowy to można to pewnie i na ATTINY85 wsadzić (po zmianie biblioteki SSD1306 na lżejszą).
    Z resztą skąd wniosek że to strata kasy, proszę oświeć mnie.

    Akurat się walała to mogłem na niej sprawdzić czy kod w ogóle działa, czemu od razu zakładasz że kupiłem specjalnie MEGA do tego projektu i umieściłem zapewne w 6 razy większej obudowie niż sam wyświetlacz :D
  • #15 17553446
    reiko
    Poziom 10  
    Szacun gościu :) Proste a cieszy! Powiedz mi proszę - obudowę zrobiłeś na drukarce 3D? Jak to wychodzi? Dużo jest z tym zachodu? Jaki model? Pytam ponieważ od kilku dni miotam się czy zakupić takie urządzenie ale nie jestem pewien czy się opłaca i czy będę zadowolony z zakupu.
  • #16 17615456
    Bullseye
    Poziom 27  
    Tak, na drukarce 3D, Anet A8, i ogólnie nawet zadowolony jestem, nie mniej jest to najtańsza drukarka i wydruki nie są powalajace + ciągła walka z ustawieniami.
    Teraz na 100% brałbym coś na aluminiowej ramie i pewnie firmowego.
    Jesli chcesz kupić by drukowac gotowe projekty to wdg mnie wywalisz w błoto pieniadze, bo rzeczy do drukownia zaraz się skończa, fascynacja z gotwcy też minie, i wydrukujesz coś raz na 2-3miesiące byle wydrukować - chyba że prototypujesz jak ja małe obudowy, wtedy będziesz miał i zajecie w projektowaniu i w drukowaniu i nie znudzisz się po pół roku.
  • #17 17619775
    Envro63
    Poziom 7  
    Fajnie to wygląda, jakiś pomysł na większe rozbudowanie?
  • #18 17623253
    Bullseye
    Poziom 27  
    Raczej zegarkiem podzieliłem się z wami, sam pomysłu aż tak nie mam jak to rozbudować :)
    Można w menu dodać budzik (buzzer) albo miganie diodami RGB (jako że są ostatnio popularne), ewentualnie termometr który temperature wskazuje za pomoca diody RGB i na wyswietlaczu :)
  • #19 17926750
    pioteer
    Poziom 11  
    Proponuję zwrócić jeszcze uwagę na moduł DS3231, który jest zdaje się znacznie dokładniejszy od modułu który użyłeś - ma wbudowaną kompensację temperatury.
    Z moich obserwacji odchyłka poniżej 1sek/miesiąc.

    Drugą uwagę mam do OLED 128x64 na SSD1306 I2C - niestety są bardzo nietrwałe i po dwóch-trzech miesiącach świecenia będzie widać wyraźnie wypalenia:( a po czterech pięciu nie będzie już nic widać..
    Zdecydowanie lcd wygrywa (przy najmniej w kategorii budżet)

    Tak wygląda zegarek na lcd 20x4 z termometrem wew/zew na ds18b20 (przekątna wyświetlacza ~8cm, cena u majfriendów ~12pln)
  • #20 17927083
    error105
    Poziom 14  
    Co do DS3231, obecnie używam go w aucie, ale trzeba pamiętać że większość PCB ma pewien błąd - bateria CR jest cały czas ladowana 4.2V (za pomoca rezystora, więc to nie żaden układ ładowania). Inaczej układ będzie się "zerowal" bez zmiany "układu ładowania".

    Wyświetlacz od roku jeździ też w moim aucie, na razie nie widzę by spadła jasność czy się wypaliło, a sam wiesz że w aucie łatwo nie ma.
    Myślę że to loteria co dostaniemy od chińczyka akurat :)
REKLAMA