Popularny post Mily2001 Napisano Styczeń 31, 2019 Popularny post Udostępnij Napisano Styczeń 31, 2019 (edytowany) Pojawiło się zapotrzebowanie na zegar cyfrowy, który będzie miał duże cyfry, przynajmniej 8-10cm wysokości. Dodatkowym wymaganiem było to, że cyfry nie mogą być czerwone. Wykluczyło to praktycznie wszystkie wyświetlacze 7-segmentowe. Dodatkowo cena wyświetlaczy tej wielkości jest już znaczna, koszt 4 sztuk to wydatek mniej więcej 200zł. Z tego powodu powstał pomysł realizacji takiego zegara na diodach WS2812. Po wykonaniu wstępnych projektów, zegar miał mieć cyfry wysokości ok 14cm, po dwie diody na segment, a obudowa miała zostać wykonana na drukarce 3D. Cały układ sterujący miał się znaleźć pomiędzy cyframi godzin i minut, co znacznie ograniczyło miejsce na podzespoły. Na początku układ miał bazować na Atmedze 8, jednak po dłuższych poszukiwaniach zdecydowałem się na Attiny814. W sieci nie ma zbyt wielu materiałów na temat tego procesora, jednak jego dokumentacja jest chyba jedną z najlepszych, z jakich miałem okazję do tej pory korzystać. Ponieważ nie jestem fanem ustawiania godziny poprzez przyciski, to zegar miał mieć możliwość zdalnego sterowania. Ostatecznie wybór padł na moduł Bluetooth HM-10. Do odmierzania czasu użyty został zegar DS1307 wraz z baterią CR2032. Dodatkową funkcjonalnością jest pomiar temperatury poprzez ADC i czujnik LM35. Konieczny był także pomiar jasności otoczenia, aby umożliwić automatyczne dostosowywanie się jasności diod. Wykorzystany został do tego zwykły fotorezystor. Jak się okazało, kompilowanie programów na Attiny81x przez gcc i Makefile nie jest proste i oczywiste. Przede wszystkim konieczne jest wykorzystanie gcc w wersji 8.x, oraz trzeba pobrać odpowiednie pliki nagłówkowe ze strony atmela, ponieważ avr-libc ich (jeszcze) nie dostarcza. Kolejnym wyzwaniem był programator, ponieważ Attiny814 korzysta z interfejsu UPDI, nie da się go zaprogramować poprzez USBasp. Programatory UPDI są kilkadziesiąt razy droższe od Attiny814, dlatego mocno wskazane było znalezienie jakiejś alternatywy. Okazało się nią jtag2updi, pozwalające na programowanie poprzez konwerter USB-UART oraz dowolny procesor, przy czym autor dostarcza gotowe wsady do atmegi328p (arduino). Sporą wadą takiego rozwiązania jest brak możliwości korzystania z debuggera, ale z odrobiną cierpliwości i oscyloskopem dało radę i bez niego. Diody led połączone są w dwa łańcuchy, było to konieczne ze względu na budowę zegara, a także pozwoliło zoptymalizować czas pełnego odświeżenia wyświetlacza. Ważne było, aby przeładowywać wszystkie diody w czasie mniejszym niż czas trwania jednego bajtu wysyłanego poprzez UART z prędkością 9600 baud. Wynikało to z faktu, że diody mają bardzo niewielki czas trwania jednego bitu, wynoszący ok 1.25us, przez co konieczne było wyłączenie przerwań na czas przeładowywania diod. Diody WS2812 działają na tej zasadzie, że pierwsza dioda w łańcuchu odbiera 3 bajty (24 bity) danych, a każde kolejne ignoruje i przesyła dalej. W przypadku przerwy w transmisji dłuższej niż 50us stan transmisji jest resetowany i pierwsza dioda zaczyna ponownie odbierać 3 bajty dla siebie. Aby zapewnić czasy możliwie najbardziej zbliżone do tych w dokumentacji, funkcja odświeżająca diody została napisana w assemblerze. Ponieważ nie posiadam drukarki, która umiałaby drukować dwoma kolorami jednocześnie, to cyfry składają się z czarnego szkieletu oraz białych wkładek, wydrukowanych oddzielnie. Efekt jest całkiem dobry. Aby jeszcze nieco poprawić równomierność świecenia segmentów cyfry zostały od środka pomalowane farbą akrylową na biało. Z racji tego że każdy segment składa się z dwóch diód, to możliwe jest wyświetlanie dwukolorowe, dające całkiem ciekawy efekt, jednak z braku czasu na razie zegar jest w stanie świecić tylko na jeden wybrany kolor. Na zdjęciu powyżej niektóre segmenty są pomalowane farbą od środka, stąd te ciemniejsze ramki, ostatecznie wszystkie wkładki zostały wymienione na takie bez farby. Do sterowania zegarem napisana została aplikacja w React Native, pozwalająca na ustawianie czasu, koloru oraz dodatkowych efektów. Komunikacja odbywa się poprzez wspomniany wyżej Bluetooth. Wskaźniki jasności były przydatne głównie w fazie rozwoju zegara, między innymi do testowania korekcji gamma. W aktualnej wersji zegar nie wysyła już pomiarów, ale w razie czego możliwe jest ich przywrócenie. Ostatecznie pomiar temperatury okazał się dość nieskuteczny, ponieważ termometr jest w środku obudowy, to pokazuje temperaturę wyższą niż jest w rzeczywistości. Wynika to między innymi z faktu, że podzespoły w środku nie są idealne i wydzielają trochę ciepła, na tyle dużo że temperatura zawyżona jest o 2-3°. Edytowano Luty 1, 2019 przez Treker Poprawiłem formatowanie. 10
Treker (Damian Szymański) Luty 1, 2019 Udostępnij Luty 1, 2019 Właśnie zaakceptowałem Twój opis, możesz go teraz zgłosić do akcji rabatowej umieszczając link w temacie zbiorczym. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum
SOYER Luty 1, 2019 Udostępnij Luty 1, 2019 Bardzo ładne, też by mi się podobało u siebie na szafce...;-)
Treker (Damian Szymański) Luty 1, 2019 Udostępnij Luty 1, 2019 @Mily2001, a skąd bierze się różnica w wyglądzie tych dwóch paneli? Czy to właśnie ta biała farba akrylowa aż tak poprawia efekt?
Mily2001 Luty 1, 2019 Autor tematu Udostępnij Luty 1, 2019 @Treker farbą malowałem z założonymi wkładkami, dlatego bezpośrednio po malowaniu wkładki miejscami też były pomalowane, stąd ten mało ciekawy efekt. Po wyschnięciu farby wyjmowałem zamalowane częściowo wkładki i wkładałem na ich miejsce nowe. Dzięki takiemu podejściu nie musiałem się martwić że przez przypadek pomaluję farbą coś czego nie chcę pomalować, a przy okazji znalazłem zastosowanie dla nieudanych wkładek. Miałem ich całkiem sporo, bo jak się okazało, drukowanie tak cienkich elementów jest dość trudną sprawą i jest skrajnie wrażliwe na najmniejsze błędy w kalibracji beda drukarki :) 2
Leoneq Luty 1, 2019 Udostępnij Luty 1, 2019 Niech zgadnę: kolega ma pewnie anetke lub endera Czujnik autopoziomowania nie jest już taki drogi, chyba że chodziło o adhezję stołu.
Mily2001 Luty 1, 2019 Autor tematu Udostępnij Luty 1, 2019 Zgadza się, ender 3, nawet widać kawałek na zdjęciach pod koniec :D Autopoziomowanie to jedno, kalibracja ekstrudera pewnie też by się przydała. Pewnie w wolnej chwili się tym zajmę, jest kilka rzeczy które można poprawić w tej drukarce małym, albo wręcz zerowym kosztem. Z adhezją dużych problemów nie miałem, mimo drukowania na szkle, aczkolwiek też drukowałem to dość wolno. 2
msalamon Luty 2, 2019 Udostępnij Luty 2, 2019 Fajnie wygląda to przejście koloru Bardzo ładnie zaprojektowany zegar. 1
Lukaszm Luty 2, 2019 Udostępnij Luty 2, 2019 Piękny projekt. Jakiej grubości są te wkładki rozpraszające światło? 1
Mily2001 Luty 4, 2019 Autor tematu Udostępnij Luty 4, 2019 Po różnych testach ostatecznie stanęło na grubości 0.4mm, dawało to optymalne rozpraszanie światła i jednocześnie nie blokowało go zbyt dużo 2
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »