Sterownik zegarów wtórnych PKP

Sterownik zegarów wtórnych PKP

Witam wszystkich jako nowy użytkownik tego forum (tym razem aktywnie) i chciałbym podzielić się swoim ostatnim projektem. Jako wielbiciel wszystkiego (no może prawie wszystkiego) co związane z koleją, stałem się jakiś czas temu posiadaczem starego zegara dworcowego. Chciałem go przywrócić do życia jednak przeszukiwanie internetu nie dało zadowalających rezultatów w postaci gotowego do wykonania projektu.

Jako nieelektronik nie mogłem liczyć na to, że zaprojektuję coś bardzo wyrafinowanego, więc nie siliłem się na skomplikowany układ i postawiłem na prostotę. Tak powstał mój własny sterownik zegarów wtórnych, czyli tzw. zegar matka.

Lista części:

Wykonanie

Pierwszym i niezbędnym elementem całego systemu jest oczywiście zegar wtórny. W moim przypadku jest to Metron z cewką 24V.

Dla niewtajemniczonych, zegary wtórne potrzebują naprzemiennego podawania impulsu (u mnie wystarcza pół sekundy) o napięciu 24V (są też modele na inne napięcia np. 60V), raz na jeden, a raz na drugi zacisk cewki (zmiana polaryzacji co 1 minutę). Do tego zadania doskonale nadał się mostek H, który normalnie wykorzystuje taką zamianę aby zmienić kierunek obrotów silnika DC. W moim przypadku ta zmiana będzie powodowała przesuwanie wskazówki minutowej zegara. Aby zegar dokładnie pokazywał godzinę impuls powinien docierać do jego cewki regularnie co minutę i do tego wykorzystałem moduł DS3231RTC.

Zegar wtórny PKP - Metron
Zegar wtórny PKP – Metron

Układ sterownika można byłoby pewnie zbudować na surowych komponentach nie używając gotowych modułów, jednak ich cena była dość podobna do pojedynczych układów (mostka L293D oraz DS3231RTC) więc wybrałem moduły. Dzięki nim mogłem na początku testować wszystko na płytce stykowej bez używania dodatkowych elementów jak np. rezystory.

Pierwsze testy przeprowadziłem z użyciem Arduino UNO:

Układ testowy z Arduino UNO
Układ testowy z Arduino UNO

W kolejnym etapie zastąpiłem Arduino gołym mikrokontrolerem ATmega88PA na którym prowadziłem kolejne testy.

Układ z ATmega88P
Układ z ATmega88PA

Programowanie mikrokontrolera poprzez programator USBasp zostało opisane np. tutaj.

Obsługa mikrokontrolerów ATmega88P (również ATmega88PA) w środowisku Arduino IDE 1.6 wymaga uzupełnienia oryginalnego katalogu hardware o zawartość pliku hardware.zip

Moduł zegara SD3231RTC został podłączony do mikrokontrolera poprzez interfejs I2C, a do sterowania modułem mostka H wykorzystane są dwa piny mikrokontrolera.

Aby impuls był wysyłany do zegara wtórnego to na pinie PWM modułu Pololu musi pojawić się stan wysoki. Polaryzacja (na który zacisk zegara będzie podane napięcie +24V, a na który masa) zależy od stanu na pinie DIR. Tak ustalony impuls trwa pół sekundy po czym następuje wyłączenie zasilania cewki zegara wtórnego. Po upływie kolejnej minuty cykl się powtarza z odwróconą polaryzacją. Szczegóły można prześledzić w kodzie miktokontrolera zamieszczonym na końcu tego opisu.

Impulsy do cewki zegara powinny mieć nominalne napięcie 24V (u mnie wszystko dobrze działa przy niecałych 20V), więc nie chcąc stosować oddzielnego zasilania części logicznej i wykonawczej, zastosowałem jeden zasilacz 19V od laptopa oraz stabilizator L7805 z dwoma kondensatorami filtrującymi.

Schemat całości prezentuje się następująco:

Schemat sterownika zegara wtórnego
Schemat sterownika zegara wtórnego
  •  J1 – gniazdo zasilania 24V
  • J2 – wyjście do sterowania zegarem wtórnym
  • J3 – 10-pinowe złącze ICSP do programowania mikrokontrolera
  • J4 – opcjonalne złącze gold-pin np. do podłączenia wyświetlacza LCD
  • SW1 – przycisk popychania zegara

Schemat dla programu ExpressSCH (moduł programu ExpressPCB) można pobrać tutaj.

Do powyższego schematu zaprojektowałem stosowną płytkę:

Płytka sterownika zegara wtórnego
Płytka sterownika zegara wtórnego

Gotowy projekt płytki dla programu ExpressPCB można pobrać tutaj.

Całość została zamknięta w zgrabnej obudowie. Brakuje tu jedynie podłączenia przycisku służącego do ręcznego przesuwania wskazówki minutowej. Przycisk będzie podłączony do wolnego złącza widocznego na środku płytki. Jego naciśnięcie (zwarcie tych pinów) powoduje przesuwanie się wskazówki minutowej w tempie jeden ruch co pół sekundy. Dzięki temu można ustawić (niestety tylko przesuwając do przodu) wszystkie podłączone zegary wtórne, np. po czasowym zaniku zasilania.

Wnętrze sterownika
Wnętrze sterownika
Sterownik z wyprowadzeniami
Sterownik z wyprowadzeniami
Widok od strony gniazda DC oraz przycisk do popychania zegarów
Widok od strony gniazda DC oraz przycisk do popychania zegarów
Widok od strony gniazd cinch służących do podłączenia zegarów wtórnych. Jeszcze jest miejsce na dodanie kolejnego gniazda ;)
Widok od strony gniazd cinch służących do podłączenia zegarów wtórnych. Jak widać jest jeszcze miejsce na dodanie kolejnego gniazda… lub dwóch ;)

W obudowie zamontowałem dwa, równolegle spięte, gniazda cinch służące do podłączenia zegarów wtórnych.

Programowanie

Ze względu na nieznajomość innych sposobów programowania mikrokontrolerów wykorzystałem język Arduino. Cały kod prezentuje się następująco:

Powyższy kod jest gotowy do wykorzystania po pobraniu biblioteki modułu zegara RTC (http://www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds3231.html)

Moduł RTC jest tu wykorzystywany w znikomy sposób i jego zadaniem jest odliczanie sekund tak, aby po każdej pełnej minucie program wykonał przełączenia kierunku na module Pololu DRV8801 i wysłania krótkiego impulsu do cewki zegara wtórnego. Po kolejnej minucie następuje zmiana polaryzacji i kolejny impuls przesuwa wskazówkę zegara o minutę i tak w kółko… chyba, że wyłączą prąd. Niestety nie zrobiłem jeszcze zasilania bateryjnego. Myślę o wykonaniu testów z podłączeniem 3 baterii 9V zamiast zasilacza aby sprawdzić żywotność takiego układu. Z moich szybkich pomiarów wynika, że cały układ z jednym zegarem pobiera w okresie między impulsami ok 19mA, a w trakcie przesuwania wskazówki ok 42mA.

Zastosowany kod pozwala na szybkie podłączenie wyświetlacza LCD (2×16) poprzez interfejs I2C (ja użyłem konwertera PCF8574), do czego służy złącze goldpin J4. Na wyświetlaczu prezentowana jest aktualna godzina, data oraz temperatura z układu RTC.

Cały układ działa już bez zarzutu od kilku tygodni i niebawem planuję testy z podłączeniem dwóch zegarów wtórnych.

Testy

Tak jak zapowiedziałem, tak też zrobiłem. Od dzisiaj już dwa zegary Metron cykają dzięki powyższemu sterownikowi.

A tak się całość prezentuje na żywo.

Testy zasilania bateryjnego

29. marca o godz. 23:00 podłączyłem dwie baterie 9V (zmierzone napięcie to 19,3V) zatem właśnie rozpoczynam testy na zasilaniu bateryjnym. Zobaczymy ile pociągną.

Testy z zasilaniem bateryjnym rozpoczęte
Testy z zasilaniem bateryjnym rozpoczęte

Z przykrością zawiadamiam, że o godz 5:15, po 30 godzinach i 15 minutach pracy zasilanie bateryjne wyzionęło ducha. Jak pokazał zakończony już test, dwie baterie 6LP3146 nie są sensowną alternatywą dla zasilacza sieciowego.

Uzupełnienia

Ostatnio zrobiłem jeszcze kilka podobnych zegarów ale każdy trochę inny. Zastosowałem mikrokontroler w wersji SMD (między innymi dla przećwiczenia lutowania takich układów), sprawdziłem rozwiązanie z popularnym mostkiem H – L293DNE i różnymi modułami na bazie zegara DS3231. Natknąłem się też na informacje o filtrowaniu zasilania samego mikrokontrolera i w związku z tym dodałem dodatkowe kondensatory. Zatem, dzięki zainteresowaniu różnych ludzi projekt, jakkolwiek dość prosty, cały czas żyje i się rozwija.

Tu można zobaczyć kolejne wcielenie, tym razem jako indywidualny moduł podłączony do jednego zegara wtórnego. Jak ktoś szuka wersji cichej, np. do sypialni to ten z Bydgoszczy jest znacznie przyjaźniejszy od Metrona.

Nowe wcielenie projektu

Jakiś czas temu mocno zmodernizowałem swój pierwotny projekt i teraz można zasilać sterownik z dowolnego zasilacza dającego napięcie od 7V do 12V (standardowo 9V).

Więcej można poczytać na końcu artykułu na mojej stronie http://baur.pl/zegar-wtorny-i-jego-sterowanie/

Ocena: 4.3/5 (głosów: 66)

Podobne posty

44 komentarzy do “Sterownik zegarów wtórnych PKP

  • Fajna sprawa z tym zegarem, do odliczania sekund wystarczyłby sam kwarc taktujący uC. Chyba że w przyszłości będzie do czegoś użyty ten moduł RTC.

    Odpowiedz
    • Zdaję sobie sprawę, że można byłoby zrobić to prościej, taniej, efektywniej itp. Moim celem bylo uruchomienie tego zegara, a nie optymalizacja rozwiązania. Nie będąc elektronikiem sam nie jestem w stanie zaprojektować cały układ od zera. Moduły i Arduino pozwoliło mi zrealizować cel w skończonym czasie. Pewnie jakbym znalazł gdzieś gotowy projekt to bym go odtworzył i wymyślał tej wersji ;)

      Odpowiedz
    • Jak już wsadziłem RTC to dlatego wyprowadziłem gold-piny dla I2C bo zawsze można zmodyfikować kod i podpiąć wyświetlacz LCD. Wtedy sam sterownik poza popychaniem zegarów wtórnych będzie mógł stać się samodzielnym zegarem z podawaniem daty i temperatury.
      Załóżmy, że to rozwojowy projekt ;)

      Odpowiedz
  • Gratulacje za pomysł (jedynie dorzuciłbym synchronizację po DCF na przykład). Zachowuje się nie tylko mechanizm, ale też wskazówki. Wiele zegarów po przeróbkach na mechanizm kwarcowy dostępnych na Allegro ma wskazówki do niego dedykowane (węższe) i taki zegar traci mocno na estetyce i kolejowym charakterze. Pomijając już fakt, że nawet stylizowane na kolejowe zegary marki Mondaine (mają fabrycznie montowany mechanizm kwarcowy) trzeba przerabiać na płynący sekundnik jak to jest w oryginałach.

    Odpowiedz
    • Potrzeba matką… czy jakoś tam ;) Tak czy inaczej, dziękuję za docenę.
      Przy założeniu, że zastosowany DS3231RTC ma bardzo wysoką dokładność to nie widzę specjalnie potrzeby synchronizacji DCF. Tak czy inaczej raz na pół roku trzeba ręcznie przestawić system na czas letni/zimowy więc przez te pół roku nie przewiduję zauważalnego odchylenia.
      Biorąc pod uwagę, że liczę się ze słabą żywotnością baterii i to, że układ będzie musiał jednak pracować z zasilaczem sieciowym to mogą zdarzyć się jakieś wyłączenia prądu i tym samym konieczność ponownego ustawienia zegarów.

      Odpowiedz
      • 6F22 mają małą pojemność, choć sam jestem ciekaw jak długo to pociągnie biorąc pod uwagę impulsowy charakter pracy. Zawsze można procesor usypiać i wybudzać przy pomocy przerwania INT czy z watchdoga (nie wiem jakie są możliwości manewru pod Arduino, bo korzystałem z tego robiąc zegar pod Bascomem). Przy zmianie DST zegar może się przestawiać sam, wystarczy zrobić obsługę daty :)

        Wracając do tematu zegarów dworcowych, ostatnio jest na to boom do loftów. 10 lat temu kupiłem swoje za 50zł/szt, teraz widzę że ceny na Allegro znacznie poszybowały w górę ze względu na popyt.

        Odpowiedz
        • Zobaczymy, testy trwają ale ja nie liczę, że dłużej niż kilka dni będzie działać.
          Co do usypiania, to zastanawiałem się nad tym tylko pewnie wymagałoby to modyfikacji obwodu, żeby podciągnąć sygnał pod pin przerwania. Chyba, że jakoś wewnętrznie by to można zrobić.
          Druga sprawa to użyty L7805, który sam chyba zjada ok 10mA, więc najwyżej zaoszczędzę kilka mA bo stabilizator, RTC i mostek H i tak będą pobierały prąd cały czas. No i oczywiście sam impuls do cewek zegarów nie da się ograniczyć. Zrobiłem go na 0,5s i nie wiem jak bardzo mógłbym go skrócić, żeby wskazówka skutecznie przeskoczyła (oryginalnie chyba taki impuls trwa nawet 2s). To wszystko może wydłuży czas pracy o kilka godzin albo dni bo to będzie nie więcej niż kilka/kilkanaście procent całkowitego zużycia
          Co do samoczynnego przestawiania czasu, to zmiana z zimy na lato byłaby sprawna bo trzeba popchnąć o godzinkę, ale już z lata na zimę zegar musiałby się obrócić o 11 godzin bo on tylko przecież do przodu chodzi.
          Jeśli masz jakiś pomysł na algorytm zmiany czasu to może go dla testów zaaplikuję.

          Odpowiedz
  • Tak się zastanawiam…Oczywiście użycie RTC pozwala na dalszy rozwój projektu ale czy nie dało by się do “odliczania” użyć wbudowanego Timera odpowiednio dobierając taktowanie i wartość preskalera?

    Odpowiedz
    • Na pewno da się to zrobić na wiele lepszych i bardziej optymalnych sposobów. Ja niestety inaczej nie potrafię ;)
      Próbowałem coś na wewnętrznym oscylatorze zrobić albo wykorzystać pin PWM i z niego wysyłać 50% wypełnienie na pin analogowy (taki projekt znalazłem) jednak dokładność wszystkich takich rozwiązań była daleka od ideału.
      Zastosowanie RTC dało mi od ręki dokładność taką, że od około miesiąca chodzi bez potrzeby korygowania. Patrząc na parametry uwzględniające korektę temperaturową to ten układ powinien chodzić dokładnie przez wiele miesięcy.
      Jeśli ktoś ma pomysł na inne rozwiązanie na podawanie dokładnego impulsu co minutę to ja chętnie zobaczę.

      Odpowiedz
  • Powiem szczerze, że jestem pod wrażeniem (marzenie mieć taki zegar w pokoju). Miałbym jednak pewien pomysł na modyfikacje. Zamiast RTC, po prostu zastosować mikrokontroler z kwarcem, żeby dokładnie odliczać, co jaki czas dać impuls. Oraz dodać samo zasilanie dla mikrokontrolera (bateryjne/akumulatorowe) i za pomocą któregoś z pinów analogowych wykrywać czy jest zasilanie cewki (zasilacz), czy nie. Zaznaczyć zmienną ile minęło czasu od odcięcia zasilania (z sieci), i po powrocie zasilania przestawić o odpowiednią “ilość czasu” zegar.
    Widząc po jakości wykonania płytki wersja 2 na pewno będzie mieć tą funkcję :)

    Odpowiedz
    • Zastosowanie samego kwarcu pewnie by dało oczekiwany efekt, ale ja nie wiem jak to podłączyć i dlatego pojawił się gotowiec w postaci RTC. Musiałbym pewnie znaleźć odpowiedni kwarc o stosownej częstotliwości i uzupełnić go o jakieś kondensatory, a później odpowiednio przeliczyć impulsy, żeby dały sygnał co 1 minutę. To jest teoria, ale przeniesienie jej na praktykę to raczej poza moimi kompetencjami ;)
      Mnie cieszy, że układ działa i zegary chodzą dokładnie.

      Odpowiedz
      • Miałem na myśli zastosowanie mikrokontrolera z kwarcem tzn mikrokontroler korzysta do swojego taktowania z kwarcu (tak jak w Arduino) odmierza czas oraz generuje impulsy. Zrobiłem kiedyś dla znajomego w ten sposób stoper na fotokomórkę (atmega328p i bootloader arduino UNO). Wystarczy odpowiednio wykorzystać millis();
        Na stronach arduino znalazłem kiedyś taki przykład programu blink, bez delay(), idealny dla zastosowania z zegarem.

        Odpowiedz
  • I jeszcze jedno co do działania z baterii a może zamiast baterii o wyższym napięciu dać przetwornicę, albo tranzystor gdybam, bo sam siedzę nad pewnym bateryjnym projektem. Ile prądu pobiera cewka??

    Odpowiedz
    • Jakoś nie bardzo mi się chce kombinować z zasilaniem bateryjnym. Po tym co sprawdziłem wygląda, że musiałaby mieć duuużą pojemność.
      Co do prądu to tak jak pisałem w tekście, bez załączonej cewki układ bierze niecałe 20mA, a po załączeniu jednej cewki ponad 40mA. Jak sądzę, przy 2 zegarach będzie to między 60, a 70 mA gdy obie cewki będą załączone.
      Nie wiem co miałyby dać ta przetwornica i tranzystor?

      Odpowiedz
      • Jeżeli dobrze zrozumiałem, Twój opis to wysokie napięcie na cewce jest potrzebne tylko do przestawienia wskazówki, i jest ono potrzebne co minutę przez kilka sekund (albo nawet części sekundy)
        Pomysł z przetwornicą jest taki że zasilasz mikrokontroler z baterii/akumulatora, a przed przestawieniem wskazówki podajesz na bazę tranzystora z pinu mikrokontrolera stan wysoki tranzystor dołącza zasilanie do przetwornicy przetwornica zasila cewkę, przestawia wskazówkę, następnie podajesz na pin mikrokontrolera (ten od tranzystora) stan niski i “czekasz” (podobno prawdziwi programiści gardzą funkcją delay) kolejną minutę. To schemat uproszczony, ale jak znajdziesz (a było gdzieś na majsterkowie) silnik arduino to zamiast silnika można dać przetwornicę
        W tym co pokazałeś 2 baterie 9V niestety dużo Energi marnowało się na regulatorze napięcia zamieniając w ciepło.
        Przy tak małym prądzie (nawet dla dwóch cewek) prawdopodobnie można by było zastosować tylko tranzystory do ich uruchomienia ale niestety w tym nie pomogę bo to już są podstawy elektroniki analogowej.
        Pozdrawiam

        Odpowiedz
  • Aby przestawić czas letni na zimowy i odwrotnie to wystarczy popchnąć do przodu o godzine, albo …. zatrzymać na godzine zamiast pchać 11 godzin do przodu…

    Odpowiedz
      • musisz napisać program zagara i kalendarza. nastepnie ustawić skok w programie do podprogramu zmiany czasu . dwa razy z czasu letniego na zimowy i odwrotnie. pamietaj że impulsy zmieniajace czas musza byc odpowiedniej częstotliwości . z byt duża czestotliwość powoduje indukcje i wszystko padnie . zależy to od iliści zegarów i ich odległości od zagara matki

        Odpowiedz
  • chciałbym kupić zegar matkę do pragotronu – też działa na 24v. Pomimo że powyższy opis jest zacny, mi jako laikowi niewiele mówi. Maciek, zróbmy interes :)

    Odpowiedz
    • Ostatnio chętnych się sporo zrobiło więc od czasu do czasu składam podobny zegar. Jak jest ktoś chętny to proponuję kontakt przez moją stronę baur.pl. Tam jest stosowny formularz kontaktowy.

      Odpowiedz
    • No taka prawda :)
      Ale potrzeba matką jest… więc mając zegar musiałem się spiąć i coś wymyślić. Na szczęście jest Arduino ze swoją prostotą i dlatego to się udało. Oczywiście musiałem trochę pogrzebać po różnych projektach i złożyć całą układankę do kupki w jeden działający projekt.

      Odpowiedz
    • Zależy kto robi. Podałem zestaw potrzebnych części więc można policzyć koszty materiałów. Arduino nie jest potrzebne bo jak pisałem użyłem czystego mikrokontrolera, a Arduino IDE użyłem tylko dlatego, że nie jestem zaznajomiony z innymi sposobami programowania.
      Jeśli ktoś chciałby, żebym zrobił podobny zegarek to zapraszam do kontaktu przez moją stronę http://baur.pl

      Odpowiedz
  • Wspaniały pomysł na tchnienie nowego życia odrobiny nowoczesności w stary zegar.
    Co do aktualizacji czasu po zaniku zasilania to pomyślałem ze moznaby zamontować co kwadransKontaktronyow z tylu cyferblatu.
    Kontaktrony miałyby za zadanie po zaniku pozycjonowanie wskazówek zależnie od tego który kontaktron byłby wysterowany odpowiednio przesunąć wskazówki aby otrzymać prawidłowa godzinę.

    Oczywiście wymagałoby to podtrzymania zegara rtc bateria oraz dodanie w programie instrukcji wykonywanych tylko po zaniku zasilania.

    Oczywiście im więcej kontaktronow tym krótsze pozycjonowanie, a Kontaktrony musiałyby znajdować się na wysokości małej wskazówki i dużej oraz na wskazówkach magnesy. Oczywiście Kontaktrony są dosyć archaiczny rozwiązaniem i moznaby wykorzystać czujniki ale bynajmniej są tanie.

    Odpowiedz
    • Ja myślałem raczej o zapisywaniu co minutę informacij o czasie w pamięci EEPROM, a po powrocie zasilania następowałoby automatyczne popychanie zegara do czasu osiągnięcia tej samej godziny, która została ostatnio zapisana w pamięci. Byłoby to rozwiązanie całkowicie niezależne od konstrukcji zegarów wtórnych. Widzę jednak problem z dużym obciążeniem pamięci EEPROM ciągłym zapisywaniem czasu i może to szybko uśmiercić mikrokontroler.

      Odpowiedz
  • Witam mam zegar siemens s24529 e44 a15 i będę potrzebował do niego sterownik jest ktoś chetny zrobić odpowiedmi albo gdzie można kupić

    Odpowiedz
  • Witam. Interesuje mnie zakup tego sterownika. Czy jest możliwość zakupu tego sterownika i jaki to koszt? Kontakt przez stronę nie działa
    Pozdrawiam

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?