Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

WiFi clock "Leon" by vayo

vayo 08 Sty 2017 21:09
  • WiFi clock "Leon" by vayo
    Ostatnio sporo osób prezentuje swoje konstrukcje zegarów, więc i ja postanowiłem pokazać zegar jaki zrobiłem na prośbę kolegi. Ogólnie założenie było takie, by zegar był widoczny w nocy z większej odległości. Kolega zaproponował aby zrobić go na około 10cm wyświetlaczach LED. Wydało mi się to zbyt banalne i postanowiłem zrobić to na matrycach LED 8x8. Testowo zastosowałem trzy gotowe moduły (z Chin) zawierające po cztery matryce 8x8. Dało to wyświetlacz o rozdzielczości 16x48 pixeli. Z racji tego, że sterowanie wyświetlaczami odbywa się za pomocą układów MAX7219 ogranicza to sterowanie jasnością do zdefiniowanych 16 poziomów. Ustawiając najniższy poziom zegar w nocy emitował tyle światła, że spokojnie mógł zastąpić nocną lampkę. Postanowiłem więc zrobić go na jednym gotowym module z czterema wyświetlaczami co dało rozdzielczość 8x32 pixeli. Wyświetlacz wydał mi się trochę za gruby, bo matrtyce LED umieszczone są w nim w gniazdach. Postanowiłem wylutować gniazda i wlutować wyświetlacze prosto w PCB. Próbowałem różnych technik, ale niestety zawsze uszkodziłem jakiś pad -wysunąłem z niego metalizację i płytka nadawała się już do śmieci. Gdy uszkodziłem piątą płytkę wiedziałem już, że będę musiał zaprojektować i zamówić takie PCB, aby móc w nie bezpośrednio wlutować wyświetlacze. Zaprojektowałem PCB kompatybilne z oryginałem, jedyne co zmieniłem, to wielkość rezystorów i kondensatorów SMD, bo w moich zasobach są tylko elementy w rozmiarze 1206.
    Aby nie bawić się w ustawianie zegara przyciskami postanowiłem zastosować w nim moduł WiFi (z ESP8266). W pierwszej wersji wgrałem do niego oprogramowanie z możliwością odczytu czasu z NTP za pomocą komend AT. Z racji iż oprogramowanie nie pozwalało na zmianę serwera NTP szybko z niego zrezygnowałem i wróciłem do oryginału. Odczyt czasu odbywa się teraz z dowolnego serwera NTP poprzez wysłanie do niego odpowiednio spreparowanego pakietu danych po UDP. Konfigurację zegara (SSID, hasło, serwer NTP, strefę czasową i czas letni) chciałem ustawiać z poziomu przeglądarki po podłączeniu się do modułu ESP pracującego w trybie AP, ale zrezygnowałem z tego z powodu braku czasu na naukę programowania tego modułu. Zastąpiłem to odczytem konfiguracji z pliku z karty SD. W przyszłości może jeszcze to przerobię. Baterię dołożyłem na samym końcu, gdy już PCB było prawie gotowe. Zrobiłem to, by po zaniku zasilania mieć czas mimo braku Internetu.
    Moduł RTC (DS3231) posiada wbudowany termometr, ale i tak postanowiłem zastosować nieśmiertelny DS18B20 (w obudowie SO8), by uzyskać lepszą dokładność (dziesiętne stopnia). Z modułów ESP wylutowałem LED sygnalizujące zasilanie, by niepotrzebnie nie dawało poświaty z tyłu zegara. Oczywiście nie ustrzegłem się poważnego błędu, co da się zauważyć na zdjęciach. PCB zawsze projektuję w Protel/Altium i od zawsze korzystam tylko z własnych bibliotek elementów, ale taki błąd zdarzył mi się po raz pierwszy W module ESP zamieniłem strony i aby nie zamawiać nowych PCB postanowiłem wlutować je odwrotnie. Nawet źle to nie wygląda. Kolejnym błędem, było umieszczenie za bezpiecznikiem polimerowym dławika o tak małym rozmiarze. Chińczyk pisał, że są one do 0.7A, a co się okazało do 0.07A. Zegar przy włączonym module WiFi i najwyższej jasności pobiera około 0.35A. Poszukiwanie dławika >0.35A w takim małym rozmiarze spełzło na niczym, więc lutując zastąpiłem go zworą SMD w rozmiarze 1206. Do programowania uC zastosowałem gniazdo w rastrze 1.27mm i dodatkowo wyprowadziłem na nim linię UART (połączenie uC z ESP). Uruchamiając zegar z wciśniętym przyciskiem ESP przechodzi w tryb upgrade i za pomocą tego gniazda możemy zaktualizować mu firmware. Uruchamiając zegar normalnie w pierwszej kolejności czytana jest konfiguracja z karty SD (o ile jest w slocie). Dane z karty porównywane są z danymi zapisanymi w EEPROMie. Gdy są różne, to następuje ich nadpisanie w EEPROMie. Hasło do WiFi zapisane na karcie SD dla bezpieczeństwa po odczytaniu jest zastępowane gwiazdkami. Gdy przy ponownym odczycie zegar odczyta gwiazdki, to oczywiście nie zastąpi nimi poprawnego hasła zapisanego już w EEPROMie. Napis "vayo" na pierwszej matrycy ma jasność najniższą -"0", na drugiej "5", na trzeciej "10" i na czwartej najwyższą "15". Podczas tego napisu następuje połączenie z siecią WiFi, odczyt czasu i wyłączenie WiFi. Kolejny etap uruchamiania, to wyświetlenie intro (czcionka 8x8 ze zbiorów z małego Atari) i na koniec przejście do trybu wyświetlania czasu. Sam pomysł na ruszające kropki i przewijające się cyfry zaczerpnąłem z filmiku na YouTube gdzie jakiś Rosjanin chwalił się swoim zegarem na wyświetlaczu opartym tak samo o układy MAX7219. To jedyne na czym sie wzorowałem -cała reszta jest całkowicie mojego autorstwa. Zegar konstruowałem tak, by nie musieć tworzyć dla niego obudowy. Jako stopki pod wyświetlaczami zastosowałem silikonowe odbojniki do drzwi szafek i na taką wysokość (1.5mm) projektowałem nogi w PCB z "sercem" zegara. Gniazdo zasilania umieściłem w otworze, by wtyczka nie wystawała poza obrys wyświetlacza. Umożliwia to też skierowanie kabla zasilającego w dowolnym kierunku. Fotorezystor również umieszczony jest tak, by nie wystawał poza obrys. Jest to mój pierwszy tak banalny projekt -niczego nowego mnie nie nauczył (no może poza większym przyłożeniem się do rysowania footprint’ów elementów), ale zainteresowanie nim było spore. Do tej pory zrobiłem już 8 sztuk i to na pewno nie będzie koniec.

    Jeżeli powstanie kolejna wersja firmware, to dorobię do niej odczyt komunikatów z serwera WWW,, tak by można było przekazywać jakieś informację do konkretnego zegara (np. składać za pośrednictwem zegara życzenia urodzinowe, lub wyświetlać zewnętrzną temperaturę z danej miejscowości) i dorobię automatyczną zmianę czasu w standardzie US, bo teraz można włączyć tylko naszą.
    Gerberów na razie nie poprawiałem. Jak zużyję wszystkie PCB i będę zmuszony zamówić nowe, to wtedy poprawię i zamieszczę je tutaj.

    A co wy sądzicie o moim projekcie?


    Link



    WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo

  • #2 09 Sty 2017 00:14
    dambusio
    Poziom 7  

    Bardzo estetycznie wykonane. Świetny pomysł z wcięciem w PCB na przewód USB. Można dać jakiś filtr na matryce, żeby zwiększyć czytelność - np przykleić ciemną folię do przyciemniania szyb.

  • #3 09 Sty 2017 00:40
    patyk_piotr
    Poziom 8  

    Świetne wykonanie, gdyby miał jeszcze bateryjne zasilanie całej matrycy to już w ogóle :)

  • #5 09 Sty 2017 11:54
    IS
    Poziom 15  

    Rozumiem, że MAXy są też od chińczyków? Jak się zachowują te ich podróbki? Nie grzeją się?

  • #6 09 Sty 2017 15:46
    vayo
    Poziom 12  

    dambusio napisał:
    Można dać jakiś filtr na matryce, żeby zwiększyć czytelność - np przykleić ciemną folię do przyciemniania szyb.

    Naklejona jest folia do matowienia szyb, ale praktycznie nic nie wniosła. Myślałem o takiej folii jak piszesz, ale jakoś zbrakło mi motywacji, by zamówić i przetestować.

    IS napisał:
    Rozumiem, że MAXy są też od chińczyków? Jak się zachowują te ich podróbki? Nie grzeją się?

    Tak, MAXy są z Chin, jak i większość pozostałych elementów. Poniżej zdjęcie przedstawiające dwa MAXy -górny wylut z płytki wyświetlacza, a dolny zamówiony jako sam układ. Te z wylutu nie zawsze poprawnie się inicjują i padają jak muchy. Te dolne działają idealnie. Żadne z nich się nie grzeją -przynajmniej w moim zastosowaniu.
    WiFi clock "Leon" by vayo

  • #7 09 Sty 2017 17:57
    macgyver96
    Poziom 14  

    Świetny projekt, urzeka swoją prostotą z zewnątrz aż chciałoby się go postawić na półce. Wykonanie na wysokim poziomie a efekty przejścia robią wrażenie.
    Jaki wyszedł ostatecznie koszt całego urządzenia?

  • #8 10 Sty 2017 12:40
    dambusio
    Poziom 7  

    dondu napisał:
    patyk_piotr napisał:
    Świetne wykonanie, gdyby miał jeszcze bateryjne zasilanie całej matrycy to już w ogóle :)

    Zastanawiałeś się nad tym jaką musiałaby mieć pojemność, by przetrwać chociaż 24h?


    Powiedzmy, że diodki biorą 10mA i jednocześnie jest ich max 32 zapalone - mamy pobór ok 320mA średni (pomijając ustawienia jasności itp) dodajmy resztę elektroniki to mamy ok 400mA. na ogniwie 2000mAh podziałałby ok 5h, ale trzeba dołożyć przetwornicę itp - dużo pracy, żeby to dodać.

    Zależy do czego miałoby to służyć - podtrzymanie na jakiś czas wyłączenia prądu, czy działanie dłuższe w plenerze?

    Zawsze można układ zasilić z powerbanka.

  • #9 10 Sty 2017 16:05
    _JAG_
    Poziom 14  

    Znalazłem obsługę NTP na esp8266
    http://www.john-lassen.de/en/projects/esp-8266-arduino-ide-webconfig..
    Wybierasz dowolna strefę czasową i dowolny serwer.

    W tej chwili robię sterownik PID do wędzarni, który oparty jest tylko na esp8266 (Witty 32Mb). Program napisany (zlepiony z części znalezionych w sieci) - PID na sterowaniu grupowym z oknem 10s (takie PWM 10s) + DS18B20. W tej chwili meczę stronę WWW. Niestety HTML i C to dla mnie nowość...
    Chciałbym tam zrobić coś w rodzaju sterownika czasowego z synchronizacją NTP, ale w tej chwili to dla mnie czarna magia.
    Ogólnie sterowanie najlepiej działa na Websocket (jest natychmiastowe) chodzi mi o obsługę np włącz wyłącz przez www w sieci lokalnej.
    Stronę można zbudować bezpośrednio w środowisku Arduino. https://github.com/esp8266/Arduino
    Jak chcesz sterować tym spoza sieci domowej to są już biblioteki MQTT.

    Co myślicie o wyświetlaczu na diodach Neopixel (ws2812b) do sterowania całym wyświetlaczem wystarczy 1 wyjście cyfrowe z ESP i dałoby to nowe możliwości (kolor 24bit).

    Projekt super.

  • #10 10 Sty 2017 16:08
    macgyver96
    Poziom 14  

    Jak już tak kombinować na siłę z zasilaniem bateryjnym to trzeba by było ostro ciąć pobór prądu żeby to miało sens, co za tym idzie czytelność wyświetlacza by spadła gabaryty by się zwiększyły itd.

    Jak ktoś chce to może przecież sobie taki zegar skonstruować, tutaj autor prezentuje swój gotowy zegar i zasilanie bateryjne jak widać nie było jednym z założeń projektowych.

  • #11 10 Sty 2017 18:33
    vayo
    Poziom 12  

    macgyver96 napisał:
    Jaki wyszedł ostatecznie koszt całego urządzenia?

    W końcu znalazłem chwilę, by policzyć i oto co wyszło:
    10x PCB wyświetlacza$42.32
    10x PCB logiki$44.12
    28x LED matrix Red$29,75
    12x LED matrix Yellow$21,25
    40x MAX7219$20.00
    10x ESP8266$22.68
    10x micro SD$4.20
    10x ATmega328P$10.97
    10x DS3231$2.65
    10x 8MHz$1.99
    10x micro USB$2.50
    10x 74LVC125$3.19
    10x DS18B20Z$16.84
    10x gniazdo bat$0.96
    10x przycisk$0.14
    10x gniazdo prog.$1.71
    10x LM1117$0.36
    ---------------------------------
    $225.63 * 4,13 = 931.85zł

    Do tego dochodzą elementy dyskretne, cyna, flux, zmywacz, więc materiał na wykonanie 1 zegara to około 100zł

    _JAG_ napisał:
    Stronę można zbudować bezpośrednio w środowisku Arduino. .

    Pewnie i można, tylko że ja koduję w C i raczej nie zainteresuję się już Arduino.

  • #12 10 Sty 2017 18:42
    BartekWB
    Poziom 27  

    Męczę się od jakiegoś czasu dokładnie z tymi samymi wyświetlaczami na tym sterowniku. Nie mogę wpaść na pomysł jak wydajnie sterować nimi, tak by jak u Ciebie dało się scrollować obraz. Mógłbyś napisać coś więcej o programie który steruje wyświetlaczami?

  • #13 10 Sty 2017 20:25
    vayo
    Poziom 12  

    BartekWB napisał:
    Mógłbyś napisać coś więcej o programie który steruje wyświetlaczami?

    Pierwsze co musiałem zrobić, to to, aby jeden bajt był jedną pionową linią. Dlatego do scroll'owania stosuje się czcionkę o takiej konstrukcji. Ja tu miałem małą zagwozdkę, bo robiąc płytkę wyświetlacza wzorowałem się na oryginale w którym umieszczono wyświetlacze tak, że wysłanie bajtu do MAXa rysuje poziomą linię. Czyli osiem bajtów, to osiem poziomych linii na pierwszym wyświetlaczu. Wystarczyłoby obrócić je o 90 stopni i byłoby idealnie, ale trzymałem się oryginału i musiałem zastosować konwersję. Stworzyłem bufor o pojemności 4x8 bajtów (tablica 32 bajtowa) i to do niego zapisuję dane, tak jakby wyświetlacz był w zapisie pionowym. Następnie zawartość bufora jest konwertowana do zapisu poziomego i wysyłana do wyświetlacza. Sam scroll to też nic skomplikowanego. Bufor jest większy o 1 znak (wyświetlacz) niż to co widać i przesuwane są w nim bajty (po kolei bajt po bajcie, bo to pionowe linie) aż wysunie się cały jeden znak (dla ułatwienia zastosowałem czcionkę 8x8 pix z małego Atari). Następnie pobierany jest kolejny znak i tak w kółko, aż cały tekst zostanie odczytany. Myślę, że w miarę jasno to opisałem.

  • #14 19 Sty 2017 21:53
    vayo
    Poziom 12  

    Dotarły do mnie okleiny i okleiłem zegarki. Boki zegarków okleiłem folią o fakturze carbon. Na wyświetlaczu czarnego zegara folia do przyciemniania szyb (darc black) i na niej jeszcze folia matowiąca by tak niebłyszczał. Na wyświetlaczu białego matowa folia do drukarki.

    WiFi clock "Leon" by vayo WiFi clock "Leon" by vayo

    Wydaje mi się, że właśnie tego brakowało tym zegarom.

  Szukaj w 4mln produktów
Przeglądaj produkty