Zegar cyfrowo-analogowy WS2812b DIY

zegar ws2812b diy

Jakiś czas temu zepsuł się mój duży analogowy zegar w estetycznej, aluminiowej obudowie.

Kupno nowego byłoby zbyt proste, dla tego zacząłem projektować swoją własną wersję. Jestem fanem zegarów analogowych — dużo łatwiej odczytuje mi się czas patrząc na wskazówki, niż na same liczby. Pomimo tego, nie chciałem używać żadnych ruchomych części. Z tego powodu zdecydowałem się na tarczę złożoną z 60 diod led ws2812b.

W fazie projektowania zastanawiałem się, jak mogę zagospodarować puste miejsce na płytce, ponieważ tarcza ma średnicę 19,5cm. Wtedy wpadł mi do głowy pomysł, aby połączyć analogowe i cyfrowe wskazanie z użyciem dwukolorowej matrycy LED.

Obudowa starego zegara
Obudowa starego zegara. Posiadał on nawet dwa termowskaźniki, bo termometrami, a tym bardziej higrometrem one nie były.

Projekt

Projekt powstał w Eaglu. Całość oparłem o mikrokontroler ATmega328 i czterech rejestrach zatrzaskujących 74HC574 do sterowania matrycami LED. Jako RTC użyłem modułu z DS3231.

Gotowy projekt można pobrać z powyżej. Uwaga, schemat wymaga wielu poprawek, które opiszę za chwilę, więc nie należy go bez nich stosować.

Na płytce wyprowadziłem złącze z nieużywanymi pinami procesora w wypadku, gdybym chciał podłączyć coś dodatkowego. Jak się okazało, w wersji finalnej wykorzystałem wszystkie wyprowadzenia procesora.

Płytka drukowana

Średnica tarczy, jak już wcześniej wspominałem, to 19,5cm. Mimo tego, że do obudowy po starym zegarze, mógłbym zmieścić tarczę o 2cm większą, ograniczała mnie wielkość kartki A4, ponieważ na taki format posiadam drukarkę laserową.

Pomimo tego, że projekt PCB jest dwustronny, płytkę wykonałem na laminacie jednostronnym. Spowodowane było to tym, że moja drukarka zniekształca wydruk o kilka milimetrów, tworząc z prostokąta trapez. Dolną warstwę chciałem wykonać, formując srebrzankę w kształt ścieżek, ale okazało się to złym pomysłem. Występowały zwarcia pomiędzy dłuższymi ścieżkami, ponieważ drut ten nie był wystarczająco sztywny. Finalnie zmieniłem większość srebrzanki na kynar, co rozwiązało problemy.

"Ścieżki" na dolnej warstwie PCB.
“Ścieżki” na dolnej warstwie PCB.

Problemy z projektem i modyfikacje

Po zmontowaniu całości i przystąpieniu do pisania kodu zauważyłem sporą ilość problemów, które wcześniej przegapiłem.

Problemy

Z powodu błędnych obliczeń rezystory ograniczające prąd dla matrycy LED były zbyt duże. Świeciły się zbyt ciemno i były mało czytelne. Wymiana rezystorów z 240om do 100om rozwiązała sprawę, aczkolwiek można by zejść do jeszcze niższej wartości, bo matryca jest multipleksowana.

Wymiana rezystorów na takie o mniejszej wartości.
Wymiana rezystorów na takie o mniejszej wartości.

Zapomniałem o wyjściu z modułu RTC, na którym mam dokładny sygnał 1Hz. Dzięki niemu można synchronizować pobieranie czasu z DS3231 w programie. Przecięcie ścieżki i parę przewodów pozwoliło mi rozwiązać sprawę.

Fatalny błąd projektowy  —  dwa połączenia do rejestrów podłączyłem do pinów, które mogą być tylko wejściami ADC w ATmega328 w wersji SMD. Naprawa tego i powyższego problemu zajęła wszystkie wyjścia mikrokontrolera.

Błędna biblioteka diod WS2812b. Tak się kończy używanie pierwszej lepszej biblioteki pobranej z internetu bez sprawdzenia jej poprawności. Dioda na projekcie płytki jest obrócona o 180°. Rozwiązaniem było przylutowanie ich na odwrót oraz zamiana ścieżki danych wejściowych do miejsca, gdzie pierwotnie było wyjście danych z ostatniej diody.

Ostatni problem jest jedną z takich rzeczy, które nie doczekały się wyjaśnienia. Otóż na cały projekt poszły 4 ATmegi. Przez długi czas nie dokończyłem projektu z tego powodu. Co jakiś czas przy programowaniu mikrokotrolera nagle przestawał on odpowiadać. Program wykonywał się, ale w żaden sposób nie dało się skomunikować z uC programatorem, nawet po wylutowaniu i sprawdzeniu go na innej płytce. Nie mam pojęcia, czym to mogło być spowodowane. Aktualnie, ATmega, która w nim jest, przeżyła więcej operacji programowania, niż wszystkie poprzednie razem wzięte i nadal trzyma się dobrze.

Modyfikacje

Na cały mikrokontroler zostały dwa wejścia analogowe, które też zamierzałem wykorzystać.

Pierwsze z nich użyłem do regulacji jasności świecenia, w zależności od poziomu natężenia światła otoczenia, mierzonego za pomocą fotorezystora.

Drugi został użyty do detekcji sygnału cyfrowego z mikrofalowego czujnika ruchu. Nie chciałem, żeby zegar świecił się cały czas, ponieważ nie ma to najmniejszego sensu. Zastosowany detektor to RCWL-0516. Jest to chyba najtańszy tego typu czujnik, ale sprawuje się zadziwiająco dobrze. Bez problemu wykrywa machnięcie ręką z dowolnego miejsca w moim pokoju.

Dolna strona płytki z modyfikacjami.
Dolna strona płytki z modyfikacjami.

Program

W zasadzie nie ma tutaj nic specjalnego.

Czas jest wyświetlany na tarczy w postaci trzech fal, których początek wyznacza dane położenie wskazówki. Bardzo ładny efekt wizualny.

Czas na matrycach jest wyświetlany w postaci GG:MM:SS, czyli standardowo. Niestety rozdzielczość 16×8 jest za mała do wyświetlenia statycznego, chociażby godzin i minut, więc zapis jest przesuwany w kółko w lewą stronę.

Jedynym mankamentem jest to, że w momencie wysyłania danych do ledów ws2812b, przerwania są wyłączne i przez to matryce nie są multipleksowane przez krótki odcinek czasu. Przy statycznym wyświetlaniu jest to widoczne, natomiast przy scrollowaniu tekstu z odpowidnią prędkością, tak jak w moim przypadku, jest to niewidoczne.

Zegar przechodzi w stan czuwania po minucie od ostatniego ruchu wykrytego przez czujnik mikrofalowy.

W zależności od oświetlenia jasność diod led ws2812b zmienia się, a także kolor matryc. Na zielono matryce świecą znacznie ciemniej niż na pomarańczowo.

Niecała godzina pracy zegara.

Montaż i obudowa

Zegar powiesiłem na ścianie. Zasilanie doprowadziłem za pomocą taśmy IDC, którą przykleiłem do ściany i pomalowałem farbą o kolorze tła. Magnat sprzedaje za kilka złotych testery farb, w których znajduje się jej 30ml, co pozwala na użycie dokładnie tego samego koloru co ściany. Zasilacz przykleiłem do sufitu i niedługo wydrukuję do niego obudowę na drukarce 3d. Zegar pobiera około 60mA przy niskiej jasności i około 80mA przy maksymalnej.

W całej konstrukcji brakuje jeszcze panelu przedniego, który estetyczne zamaskowałby elektronikę. Aktualnie tarczę zrobiłem z nadrukowanej kartki papieru, co nie prezentuje się zbyt dobrze. Planuję wykonać go z białego wydruku z drukarki 3d, ale na razie czekam na jej zakup 😉 .

Z moją ujemną wadą wzroku, nie dostrzegam z daleka szczegółów wyglądu, więc nawet w obecnej formie prezentuje się on znakomicie. Czas z łatwością da się odczytać z dużej odległości.

Wygląd zegar podczas pierwszych testów.
Wygląd zegara podczas pierwszych testów.

Zegar można by poddać kilku poprawkom dotyczącym zasilania, co zmniejszyłoby na tyle pobór prądu, że sensowne byłoby zasilanie go z baterii lub akumulatorów. Przykładowo można by użyć akumulatorów Li-Ion, zgrzanych za pomocą na przykład takiej zgrzewarki: Najprostsza zgrzewarka akumulatorów LiIon. , które zmieściłyby się wewnątrz obudowy całego zegara.

Dodaj komentarz

avatar
  Subskrybuj  
Powiadom o