Elektroda.pl
Elektroda.pl
X
IGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino + WS2811 - lampki choinkowe

Visar78 04 Lut 2016 21:37 12039 41
  • Arduino + WS2811 - lampki choinkowe
    Witam.
    Przedstawię projekt niezbyt wyrafinowany w konstrukcji, ale spełniający dobrze swoją rolę.

    Wykorzystano następujące elementy:
    -Arduino Nano,
    -Zasilacz Mean Well 5V 80W,
    -5 łańcuchów po 50 diod WS2811 (każdy maksymalnie może pobrać 15W),
    -5 potencjometrów,
    -Klawiatura.

    Każdy z łańcuchów jest osobno zasilany (dlatego jest 5 gniazd typu chinch), dodatkowo połączone są w szeregu i pierwszy przez wtyczkę Jack jest połączony z Arduino.


    Arduino + WS2811 - lampki choinkowe Arduino + WS2811 - lampki choinkowe Arduino + WS2811 - lampki choinkowe Arduino + WS2811 - lampki choinkowe Arduino + WS2811 - lampki choinkowe Arduino + WS2811 - lampki choinkowe

    Założeniem była możliwość wyboru efektów zarówno migających, jak i niezmiennych w czasie, nierozpraszających. Wykorzystałem Arduino nano jako sterownik, dołożyłem pięć potencjometrów: 3 do regulacji składowych R, G, B w niektórych efektach, jeden do jasności i jeden do prędkości efektów.

    Dołączona 16 przyciskowa klawiatura umożliwia wybór jednego z efektów:
    1: płynąca tęcza
    2: ustalony potencjometrami kolor z rozbłyskującymi na biało punktami
    3: wybrany kolor, bez żadnych efektów
    4: "jeżdżące" paski w wylosowanych kolorach, w momencie przechodzenia przez siebie wyliczany jest kolor sumaryczny
    5: wybrany kolor z losowo zapalającymi się i gasnącymi punktami
    6: krótkie, przesuwające się paski
    7: zmiana koloru całego łańcucha
    8: łańcuch w wybranym kolorze, przesuwające się punkty w kolorach tęczy
    9: zmiana kolorów w wielu miejscach naraz
    10: nowy kolor wpływający z jeden strony
    11: łańcuch w wybranym kolorze, z okresowo przepływającym losowym kolorem
    12: łańcuch w wybranym kolorze, z okresowo przepływającym rozjaśnieniem
    13: podobnie jak 5 tylko różnokolorowe
    14: wylosowane kolory, okresowo wylosowana dioda zmienia płynnie kolor na inny wylosowany
    15: kolorowe paski zbierają się stopniowo aż do zapełnienia całego łańcucha, kiedy to zjeżdżają wszystkie
    16: demo - po kolei włączające się efekty od 1 do 15 i od nowa

    Pokaz działania podczas testowania programu:


    Link


    I efekt końcowy, już na choince.


    Link


    Schemat:
    Arduino + WS2811 - lampki choinkowe

    Kod programu dla Arduino Nano (program zapamiętuje ostatnio wybrany efekt i po podłączeniu zasilania przywraca go.

    W przypadku chęci wykorzystania tylko trybu DEMO, bez potrzeby używania potencjometrów i klawiatury jest dostępny ten kod.

    Parametry typu prędkość, jasność, kolor tła i liczbę pikseli można sobie dobrać w zależności od preferencji modyfikując wartości w pierwszych liniach kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Visar78
    Poziom 9  
    Offline 
    Specjalizuje się w: programowanie
    Visar78 napisał 17 postów o ocenie 119, pomógł 0 razy. Mieszka w mieście Warszawa. Jest z nami od 2011 roku.
  • IGE-XAO
  • #2
    oskar777

    Poziom 26  
    Jak wysyłasz dane do ledów tzn tych 5 pasków? Wejścia danych każdego z pasków są połączone z sobą i wszystko idzie w jednym momencie tzn sterowanie?
  • IGE-XAO
  • #4
    Frog_Qmak
    Poziom 25  
  • #5
    walbe
    Poziom 15  
    Bardzo ciekawie to wygląda, jak do tej pory chyba najlepszy projekt lampek na choinkę jaki widziałem. Czy te łańcuchy są robione samodzielnie?
  • #6
    oskar777

    Poziom 26  
    walbe nie to są gotowe zestawy
    zrzut z zupełnie losowej oferty na ali
    Arduino + WS2811 - lampki choinkowe

    Swoją drogą jak autor ma sprawdzonego dostawcę tych modułów po przystępnej cenie to niech może się pochwali.
  • #7
    ditomek
    Poziom 21  
    Mam słabość do tego typu bajerów.
    Jestem zachwycony efektem.
    Gratuluję i zazdroszczę :-)

    Nawet nie proszę o kod programu ale czy zdradziłbyś podstawy działania programu, jak układasz kombinacje, osobie która potrafi już wysterować taką diodę?
    Czy sterowanie odbywa się przez jeden pin uK czy dzieląc na sekcję używasz też kilku pinów.
  • #8
    Visar78
    Poziom 9  
    Diody zamawiałem na aliexpress
    Link

    U tego dostawcy za cena wynosi 120$, przy czym z automatu ma się upust 3$ i darmową przesyłką DHL do Polski. Do tego dochodzi 100zł cła, czyli komplet na jeden zestaw (5 łańcuchów) kosztuje około 300zł.

    Co do sterowania, to mam jedną długą tablicę bajtów o liczności liczba diod razy trzy, z której to w pętli pobierane są dane i w czasie wysyłania do łańcucha przemnażane przez wartość jasności i następnie dzielone przez 256 (czyli brana tylko starsza połówka wyniku). Co prawda maksymalna jasność wynosi 255 * 255 / 256 czyli 254 a nie 255, ale dzięki temu można mnożenie robić w czasie przesyłu danych i nie traci się dodatkowo czasu i pamięci na mnożenie w innej pętli.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Co do efektów, to główna pętla wywołuje funkcję odpowiadającą za konkretny efekt, tak więc przykładowo efekt błyskających na biało na tle wybranego koloru:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    każda funkcja ma parametr init który informuje, że efekt jest wywoływany po raz pierwszy od momentu przełączenia na niego. Funkcja może wtedy przygotować swoje zmienne i wyświetlić pierwszy rezultat. Poza tym dla funkcji dostępna jest zmienna globalna nextStep która informuje o tempie efektu. Dzięki czemu można wolniej przesuwać elementy, ale nie traci się na prędkości gaśnięcia czy rozświecania.

    Podczas weekendu wrzucę cały kod.
  • #9
    Freddy
    Poziom 43  
    Visar78 napisał:
    U tego dostawcy za cena wynosi 120$, przy czym z automatu ma się upust 3$ i darmową przesyłką DHL do Polski. Do tego dochodzi 100zł cła, czyli komplet na jeden zestaw (5 łańcuchów) kosztuje około 300zł.
    Możesz wytłumaczyć jak to liczysz?
    $120 * 4zł=480zł + jak piszesz 100zł cło to daje prawie 600zł.
  • #11
    Freddy
    Poziom 43  
    Visar78 napisał:
    Cena 600zł jest za 10 łańcuchów, ja używam 5 co wystarcza na dwa zestawy.
    No to teraz się zgadza :D. Dzięki za wyjaśnienie.
  • #12
    ela.kolo
    Poziom 2  
    Witam.Projekt super.
    Weekend się kończy a autor obiecał wrzucić kod. :D
    Wpadam co kilka godzin (żeby być pierwszy) :)
    Na poważnie. Można prosić autora o udostępnienie kodu? Do świąt jest parę miesięcy i można pomału kompletować podzespoły
    Pozdrawiam
  • #14
    Visar78
    Poziom 9  
    Trochę się zeszło ze znalezieniem odpowiednio "czystego" kodu, bo wprowadzałem jeszcze sporo zmian związanych z przeniesieniem kodu na Arduion Yun i wprowadzeniem dodatkowego sterowania przez wifi za pomocą telefonu, czy komputera. Wtedy potencjometry mają wyższy priorytet, ale jeżeli nie są ruszane, to ustawienia są pobierane poprzez wifi. Póki co sterowanie już działa z telefonu, kod jest gotowy, pozostało zrobić sterowanie z poziomu własnej strony www, postawionej na części linuxowej Yun... do świąt jeszcze trochę czasu :)

    Załączam gotowy kod do arduino nano,
    pod wejście A0 podłączony jest potencjometr do regulacji prędkości,
    A1 - jasność,
    A2 - składowa czerwona,
    A4 - składowa zielona,
    A6 - składowa niebieska

    Klawiatura 4x4 podłączona pod piny od D2 do D9

    Wyjście na diody z pinu D13

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #17
    garcin
    Poziom 9  
    Cześć,
    w pierwszej kolejności chciałbym pogratulować świetnego wykonania lampek choinkowych koledze Visar78.
    Jak większość osób projekt tak się mi spodobał, że sam wziąłem się za jego wykonanie.
    Finalnie lampki fantastycznie świecą, ale jestem ograniczony do czterech pierwszych programów. Przy wciskaniu innych klawiszy nie następuje zmiana trybów świecenia.
    Moje umiejętności programowania są raczej mizerne i sprowadziły się do uruchomienia terminala i odczytywania zmiennej 'keyState'. Okazuje się, że zmienna przyjmuje tylko wartości 1, 2, 3 i 4.

    Wykonałem jeszcze dwie czynności, aby wyeliminować podstawowe problemy, czyli niesprawne Arduino lub klawiatura:
    1. Sprawdziłem klawiaturę w przykładowym programie - wszystkie wartości wyświetlają się poprawnie,
    2. Uruchomiłem program pod Arduino Uno - obserwuje taki sam rezultat (tylko cztery pierwsze wartości z klawiatury).

    Byłem wdzięczny za pomoc w rozwiązaniu problemu.

    Pozdrawiam
  • #19
    garcin
    Poziom 9  
    Visar78 napisał:
    Proszę zmienić opóźnienie w funkcji odczytu klawisza, zamiast linijek:

    delayMicroseconds(1);

    proszę użyć:

    delayMicroseconds(5);

    Występuje to w czterech miejscach w funkcji ReadKeypad.

    Pozdrawiam


    Działa, święta uratowane!!!

    Bardzo dziękuję za pomoc.
  • #20
    jacekrado
    Poziom 13  
    Witam!
    Sterownik super.
    Łańcuch Neopixeli na Allegro kosztuje 90 zł, na Wisch 45 z przesyłką (działa idealnie),
    ale dostawa trwa ponad miesiąc.
    Pozdrawiam
  • #21
    vir84
    Poziom 11  
    @Visar78 na wstępie chciałbym pogratulować, świetny układ :)

    Jestem w trakcie robienia tych lampek :), mam kilka pytań:
    1 - nie mam diod takich jak Ty, tylko mam taśmę RGB, czy będzie jakaś różnica w działaniu, trzeba przerabiać program? Oryginalnie podane jest 250 diod, na taśmie jest 150.
    2 - te diody które opisałeś (WS2811) mam, ale na 12V , na 5V mam diody WS2812B, niezależnie jaki pasek podepnę diody mrygają te WS2811 mniej, te WS2812B bardziej, czy to może być wina zasilacza? Póki co testuję na zwykłym zasilaczu uniwersalny, więc nie ma on 80W ;) Arduino podpinam pod 5V a diody dodatkowo zasilam 12V.

    Miałem jeszcze problem z działaniem wszystkich programów świecenia, ale został już rozwiązany :)

    Pozdrawiam i dziękuję za odpowiedź.
  • #22
    Visar78
    Poziom 9  
    Dzięki!

    1. Nie ma znaczenia czy to taśma, pojedyncze diody, czy łańcuch. Niektóre efekty są uzależnione od liczby diod, dlatego należy podać ich liczbę w linijce:
    #define PIXEL_COUNT 250
    w Pana przypadku:
    #define PIXEL_COUNT 150

    2. Z punktu widzenia sterowania nie ma znaczenia czy to jest 2811, 2812, 2812B. Być może mruganie jest winą zasilacza, albo może wejścia do których mają być podłączone potencjometry nie są teraz podłączone i łapią szum. Jedno z nich steruje jasnością i może to powodować mruganie.

    Pozdrawiam
  • #23
    vir84
    Poziom 11  
    @Visar78 dzięki wielkie za odpowiedź :)

    W sumie z tymi potencjometrami to może być dobry punkt zaczepienia, bo nie mam ich podpiętych ;) sprawdzę w weekend i dam znać, czy to jest przyczyną :D

    Jeszcze raz dzięki za pomoc, pozdrawiam :)

    EDIT:
    @Visar78 faktycznie, po podłączeniu potencjometrów, mruganie ustąpiło :) dzięki wielkie za pomoc :D :D :D
  • #24
    GOLDEN!!!
    Poziom 10  
    Gratuluję efektu.

    Moje próby są skomniejsze, ale też dają radę.
    Twój kod sprawdzę pewnie po zimie gdy ściągnę oświetlenie z choinki na dworze.
    Zakładam, że wiele się na jego podstawie nauczę.

    Mam jednak jeszcze pytanie.
    Czy spotkałeś się z sytuacją, że w twoim oświetleniu wysłanie polecenia zapalenia diod na czerwono w rzeczywistości zapala kolor zielony?
    Już wyjaśniam, mam listę 300diod oraz takie jak te Twoje, dwa łańcuchy po 50. I teraz realizując ten sam program mam zamienione kolory czerwony z zielonym.
    Nie zauważyłem tego prędzej i już trochę późno reklamować.
    Ale jestem ciekaw jak to szybko programowo obejść na przyszłość.

    Pozdrawiam
    GOLDEN
  • #26
    Benio1313
    Poziom 1  
    Witam.
    Mam pytanie do autora. Czy mógłbyś zamieścić schemat elektryczny? Chciałbym spróbować wykonać ten łańcuch, lecz elektroniką już dawno się nie zajmowałem, więc nie jestem pewien czy sobie poradzę.

    Z góry dziekuję za pomoc.

    Pozdrawiam Janusz.

    Już nieaktualne, dałem sobie radę :). Miałem problem z podłączeniem łańcucha LED, teraz wiem, że musi być w pętli. Aha, przy programowaniu NANO wszystko szło OK, dopóki nie zaktualizowałem programu do wczytywania kodu do kontrolera, co spowodowało brak możliwości przesłania kodu. Rozwiązaniem było zainstalowanie "czystego" ARDUINO IDE.
  • #27
    christoff13
    Poziom 7  
    Czy można poprosić o schemat elektryczny?
  • #28
    akvaj
    Poziom 9  
    Czy mógłbyś zamieścić schemat elektryczny?
  • #30
    akvaj
    Poziom 9  
    Teraz to już nic nie wiem, szczególnie chodzilo mi o LED. Szkoda, że Autor milczy.