Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zegar "wskazówkowy" LED na WS2812B z funkcją "ECO" (PIR)

Frog_Qmak 06 Sty 2016 20:56 7983 13
  • Zegar "wskazówkowy" LED na WS2812B z funkcją "ECO" (PIR) Zegar "wskazówkowy" LED na WS2812B z funkcją "ECO" (PIR) Zegar "wskazówkowy" LED na WS2812B z funkcją "ECO" (PIR)


    Witam Kolegów Elektrodowiczów.

    Jakiś czas temu, zainspirowany konstrukcją zegarów na diodach WS2812, postanowiłem spróbować zrobić coś takiego samemu. Konstrukcja powstała dla "cieszenia oczu" i własnej satysfakcji z takiego zegara. Sam projekt powstawał może ze 3 wieczory + poprawki ("wyjątki"), o których mowa później. Sama konstrukcja elektroniczna jest prosta, nie ma potrzeby rysowania schematu. Całość napędza klon Arduino nano, moduł zegara to DS1307 podpięty pod I2C. Diody to metrowa taśma WS2812B (60LED/m) z kondensatorem 470uF (w sumie chyba niepotrzebny, ale przylutowałem i został). Do tego czujka PIR HC-SR501, z której sygnał (stan wysoki) kierowany jest na wejście Arduino (równocześnie podpięte do masy przez rezystor 10k, aby przy stanie niskim nie działało jak antena i nie łapało zakłóceń).

    Co do zasady działania całego zegara. Zanim zabrałem się do pracy, miałem ściągnięte jakieś gotowe przykłady, ale sama idea wydawała się na tyle ciekawa, że postanowiłem napisać kod samemu. Pokrótce: diody są numerowane w zakresie 0 (u mnie godzina 12) do 59. Następnie odczytuje aktualny czas, przelicza go na trzy zmienne: godziny (w zakresie 0-12), minuty (0-60) i sekundy (0-60). Program ustala, w jaki sposób ma następować wyświetlanie. Można to rozwiązać na dwa sposoby:

    -(łatwy) "na sztywno" wyświetlać godzinę poprzez zapalenie odpowiednich diod dla danej godziny, przez co "wskazówka" nie porusza się (60:12 = 5, czyli np. dla godziny trzeciej wskazówka "pokazuje" 15-tą z kolei diodę, o numerze w kodzie 14.)
    -(trudniejszy) "ożywiając" wskazówkę godzinową tak, by przesuwała się ona, wraz z postępem danej godziny, podobnie jak ma to miejsce w prawdziwych zegarach.

    W moim przypadku zrealizowałem drugi wariant, całość jest w sumie dość prosta. Największy problem to "zakodowanie wyjątków", jak ja to nazwałem, czyli np. godziny 00.00 - powinny się wyświetlać nie tylko diody o numerach 0-3, ale również te "z drugiego końca", czyli 59 itp. Takich przypadków jest trochę, co zostało ujęte w programie. Bardzo ważna jest kolejność opisywania instrukcji zapalania LED-ów, ponieważ jedna komenda może nadpisać drugą, co czasami jest pożądane. Np. wskazówka godzinowa ma czerwoną barwę i "grubość" 5 led, minutowa i sekundowa odpowiednio 3 i 1. Są one uwzględnione w kodzie również w tej kolejności. Dzięki temu nawet po nałożeniu się wszystkich "wskazówek" (00:00), są one widoczne.

    Zegar po zmontowaniu cieszył oczy, jednak trochę żal było mi tego, że przez cały czas świeci się z maksymalną jasnością, nawet gdy nikogo nie ma w domu. Jako że miałem w zapasie kilka czujek ruchu, wykorzystałem jedną z nich. Przy uruchomieniu zegar wyświetla krótką "animację" (czujka musi się ustabilizować, bo zaraz po włączeniu daje stan wysoki), a następnie sprawdza, czy zostało wywołane świecenie z pełną jasnością. Jeżeli nie, to rozpoczyna pracę przy niskiej intensywności świecenia. Jeżeli czujka wykryje ruch, to zegar przechodzi w tryb maksymalnej jasności i "zapamiętuje", by po upływie godziny się przyciemnić. Jeżeli w czasie pełnego świecenia czujka znowu kogoś wykryje, nadpisuje czas włączenia trybu oszczędnego aktualnym. Dla własnej satysfakcji, zegar wyświetla, kiedy nastąpi przyciemnienie - jedna z diod świeci na biało i wskazuje miejsce, do którego musi dojść minutnik. Wykrycie kogoś sygnalizowane jest szybkim miganiem diody na płytce Arduino.

    Prośba do moderatorów: zegar jest już ukończony pod względem elektronicznym i programowym, nie planuję wprowadzać żadnych zmian, to też proszę o nieprzenoszenie go do działu "niedokończone". Brakuje mi jedynie obudowy i "tła" pod taśmę, co może jeszcze trochę potrwać. Zastanawiam się nad lustrem. Myślałem nad płytą winylową, niestety są one minimalnie zbyt małe. Gdyby ktoś miał jeszcze jakieś pomysły, chętnie wysłucham. :)
    Dodaję również kod, jest sporo komentarzy (pisałem po angielsku), także całość powinna nie sprawiać problemów przy analizie.

    Koszt: taśma LED z przesyłką ok 80 zł, czujka PIR jakieś 5 złotych + przesyłka. Klon Arduino to ok. 10 PLN z darmową wysyłką zza granicy (nie opłaca się w Polsce nawet Atmegi kupić :D ), płytka DS1307 z podtrzymywaniem bateryjnym i baterią ok. 7 zł, również z darmową wysyłką zza kontynentu.

    Zapraszam do komentowania.

    Przepraszam za jakość VIDEO - filmowane komórką. Pod koniec filmu widać, jak biała dioda "przesuwa się" na aktualną minutę w chwili, gdy wykonałem ruch.

    Link

    Załączniki:

    Fajne!
  • #2 07 Sty 2016 14:25
    japko1024
    Poziom 17  

    Szkoda, że nie zaprogramowałeś Arduino w języku C - byłoby bardziej profesjonalnie i miałbyś większe możliwości programowania i optymalizacji, poznałbyś też zasady działania mikrokontrolera. Tu jest opisane, jak to zrobić: Link .

  • #3 07 Sty 2016 14:40
    Freddy
    Poziom 43  

    japko1024 napisał:
    Szkoda, że nie zaprogramowałeś Arduino w języku C - byłoby bardziej profesjonalnie
    To w jakim według Ciebie języku napisany jest teraz program?

  • #4 07 Sty 2016 20:10
    Olgierd
    Poziom 14  

    Witam,
    przemyślenia/propozycje
    -kolory wprowadzają zamieszanie, kolor do ustawienia przez użytkownika ze względu na otoczenie, (kolor farby którą pomalowana jest ściana).
    -soczewki, minuty rzut światła na ścianie cienki i długi, godzina rzut światła gruby i krótki, sekundy bez znaczenia prędkość pozwala każdemu domyśleć się o co chodzi.
    -przyznam że pomysł mi się spodobał (nie widziałem wcześniej takiego zegara) i nie mogę stwierdzić która wersja by mi się bardziej leżała ale proszę sprawdzić obie, diody skierowane do środka i diody skierowane na zewnątrz.
    -poprzestał bym tylko na widoku odbicia światła od ściany/podłoża (tj. źródło świata/diodę bym schował).

  • #5 07 Sty 2016 22:08
    Frog_Qmak
    Poziom 25  

    Dzięki za propozycję, faktycznie, widziałem już gdzieś taki projekt, w którym widoczna była tylko tarcza i światło "wypływało" spod spodu. Nie wiem tylko, jak to się sprawdzi latem przy jasnym oświetleniu.

    Dziękuję również za ciekawego link-a :)

    EDIT: przepraszam durną muzyczkę w tle, ale jak nagrywałem filmik to dwa pokoje obok była puszczona głośno piosenka i ledwo wrzuciłem film na YT to zaraz dostałem maila, że łamię prawa autorskie i na szybko wybrałem jakąś zaproponowaną free-alternatywę;)

  • #6 07 Sty 2016 22:16
    japko1024
    Poziom 17  

    Freddy napisał:
    japko1024 napisał:
    Szkoda, że nie zaprogramowałeś Arduino w języku C - byłoby bardziej profesjonalnie
    To w jakim według Ciebie języku napisany jest teraz program?

    Rzeczywiście, to jest język C, ale z zastosowaniem biblioteki Arduino, która z jednej strony ułatwia początkującym programowanie, ale z drugiej znacznie ogranicza ich możliwości. Znacie kogoś, kto zawodowo zajmuje się programowaniem mikrokontrolerów i pisze swoje programy z zastosowaniem środowiska i bootloadera Arduino? Czy taki ktoś byłby w stanie zaprogramować inny rodzaj procesora niż zastosowany w tej płytce? Chociaż nie jestem profesjonalistą, to od początku programuję mikrokontrolery w języku C korzystając z bibliotek takich, jak avr/io.h. Typowy program stworzony w ten sposób nie jest rozdzielony na sekcje setup i loop (wykonywanie nieskończonej pętli jest w dodatku rozwiązaniem niezbyt efektywnym ze względu na zużycie mocy obliczeniowej i elektrycznej, więc w miarę możliwości lepiej usypiać procesor i korzystać z przerwań), inaczej wygląda w nim odczyt i ustawianie rejestrów GPIO (osoba pisząca w arduino może nawet nie wiedzieć, co to są rejestry DDRx, PORTx i PINx), wreszcie plik z kodem źródłowym nie ma raczej rozszerzenia .ino, ino .c :D (zgodnie z językiem, w którym został napisany).

  • #7 08 Sty 2016 03:47
    dondu
    Moderator Mikrokontrolery Projektowanie

    Frog_Qmak napisał:
    Brakuje mi jedynie obudowy i "tła" pod taśmę, co może jeszcze trochę potrwać. Zastanawiam się nad lustrem. Myślałem nad płytą winylową, niestety są one minimalnie zbyt małe. Gdyby ktoś miał jeszcze jakieś pomysły, chętnie wysłucham :)

    Może płyta gipsowa, kuchenna deska do krojenia, ... wszystko zależy, gdzie ma wisieć.

  • #9 08 Sty 2016 20:40
    Frog_Qmak
    Poziom 25  

    Dobry pomysł, kiedyś już popełniłem :) Link Problem w tym, żeby jakoś złączyć ze sobą dwa okrągłe lustra... prostokątna rama odpada :/

  • #11 09 Sty 2016 14:17
    Frog_Qmak
    Poziom 25  
  • #12 09 Sty 2016 14:35
    Freddy
    Poziom 43  

    Bierzesz kilka pasów cienkiej sklejki #3 smarujesz je wikolem i usztywniasz w wybranej pozycji do wyschnięcia.
    Ostre łuki, wymagają moczenia w wodzie, lub lepiej na parze (ja tak robiłem).
    Tektura jest mniej wskazana, ja używam wyłącznie sklejki.

  • #13 09 Sty 2016 16:19
    ladamaniac
    Poziom 36  

    Technologia z tekturą jest podobna do tej, którą przestawił kolega Freddy, tylko zamiast sklejki używasz pasków tektury, takiej grubszej. Wikol może być lekko rozcieńczony wodą, pasowałby robić to na jakimś wzorcu.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME