Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs Arduino II – #2 – diody RGB (tradycyjne oraz WS2812)

Programowanie 09.06.2016 Damian (Treker)

ArdIkoKurs2_2Diody świecące znajdują zastosowanie w każdym projekcie. Często oprócz prostej sygnalizacji stanu urządzenia zależy nam na efektach wizualnych.

Wtedy przydają się diody RGB, czyli takie, które mogą świecić w praktycznie dowolnym kolorze. Na przestrzeni ostatnich lat nastąpił tutaj przełom. Prosty test pokaże jaką przewagę mają w sobie nowe diody programowalne (WS2812).

Nawigacja serii artykułów:
« poprzednia częśćnastępna część »

Kup zestaw elementów i zacznij naukę w praktyce! Przejdź do strony dystrybutora »

Czym są diody programowalne?

Diody programowalne, nazywane czasem inteligentnymi, mogą być elementami zagadkowymi dla wielu początkujących. Jak objawia się ich inteligencja? Czy potrzebny jest specjalny programator? Aby nie trzymać Was dłużej w niepewności zacznę od krótkiej odpowiedzi na powyższe pytania.

Oczywiście diody nie wymagają żadnego programatora, ich programowalność polega na tym, że każda dioda ma wbudowany układ, z którym będziemy się komunikować. Wewnętrzny sterownik ustawi wszystkie parametry i dioda będzie od tego momentu świeciła na wybrany kolor.

Czarny prostokąt to sterownik znajdujący się wewnątrz diody programowalnej.

Zbliżenie na diodę, średnica okręgu ze zdjęcia w rzeczywistości wynosi około 3 mm. Czarny prostokąt, to sterownik znajdujący się wewnątrz diody programowalnej.

W tej chwili jeszcze nie dla wszystkich jest jasne gdzie jest ta przewaga nad tradycyjnymi diodami, dojdziemy do tego krok, po kroku. Na zachętę efekt świetlny jaki można otrzymać używając właśnie takich nowoczesnych LEDów. Wszystko z użyciem tylko jednego pinu Arduino!

Przykład użycia diod WS2812.

Przykład użycia diod WS2812.

Najpierw pora omówić jednak w praktyce zwykłe diody RGB!

Zestaw elementów do przeprowadzenia wszystkich ćwiczeń

Gwarancja pomocy na forum dla osób, które kupią poniższy zestaw!

Części pozwalające wykonać ćwiczenia z kursu Arduino (poziom 2) dostępne są w formie gotowych zestawów! W komplecie m.in. diody programowalne, termometry analogowe i cyfrowe, czujnik ruchu (PIR), wyświetlacze 7-segmentowe oraz znacznie więcej!


Kup w Botlandzie »

Przygotowanie stanowiska do kursu Arduino

Na początku dwie sprawy techniczne. Część czytelników przećwiczyła już materiał z pierwszego poziomu kursu Arduino. Inni dołączyli dopiero teraz. Wierzę jednak, że zgodnie z moimi zaleceniami z poprzedniego artykułu wszyscy są na zbliżonym poziomie. Dlatego pora zadbać o porządek.

Porządek w projektach – podstawka

Im bardziej zaawansowane projekty, tym więcej pojawia się połączeń między płytką stykową, a Arduino. Prowadzi to często do bałaganu i błędów. Dlatego do zestawu elementów dołączona jest uniwersalna podstawka Forbota, która pozwoli nam uporządkować projekty.

Drewniana podstawka pod Arduino dołączona do zestawów,

Drewniana podstawka pod Arduino dołączona do zestawu.

Na spodzie płytki przyklejamy gumowe nóżki, proponuje tak, jak poniżej. Nie zaklejamy żadnych otworów. Przydadzą się, jeśli będziemy dołączać do podstawki dodatkowe moduły lub mocować całość gdzieś na stałe.

Nóżki przyklejamy po stronie, gdzie nie ma żadnych napisów!

Gumowe nóżki przyklejone do podstawki.

Gumowe nóżki przyklejone do podstawki.

Następnie przyklejamy płytkę stykową (na jej spodzie znajduje się samoprzylepna gąbka). Na sam koniec przykręcamy Arduino. Między płytką, a podstawką koniecznie umieszczamy plastikowe dystanse. Nie trzeba korzystać z wszystkich otworów montażowych, wystarczą 2 po przekątnej:

Arduino i płytka stykowa zamontowana na podstawce.

Arduino i płytka stykowa zamontowana na podstawce.

Zewnętrzny zasilacz dla Arduino

Podczas tego kursu stworzymy projekty, które będą mogły normalnie funkcjonować – nie będą to jedynie chwilowe dema. Dlatego zasilanie z USB lub małej baterii nie byłoby wygodne. Aby uniknąć problemów w zestawach znajduje się również zasilacz, który należy podpiąć do Arduino. Tak, jak jest to widoczne na powyższym zdjęciu.

Nie trzeba go odłączać podczas programowania/podłączania kabla USB.

Podłączenie zasilacza, oprócz stabilnego napięcia, daje nam również jedną, bardzo ważna zaletę. Na pinie VIN będziemy mieli dostęp do napięcia 12V, co wykorzystamy już w kolejnym artykule!

Kształt i kolor zasilacza z zestawów może się różnić od tego ze zdjęć.
Nie ma to jednak żadnego wpływu na jego działanie.

Diody RGB w praktyce – podejście tradycyjne

Podczas poprzedniego poziomu kursu Arduino wykorzystywaliśmy zwykłe diody świecące. Każda miała dwa wyprowadzenia (katodę i anodę) i świeciła na jeden kolor. Dodatkowo dzięki PWM była możliwa zmiana ich jasności.

Zwykłe diody świecące (LED).

Zwykłe diody świecące (LED).

W razie kłopotów sprawdź dodatkowe informacje o diodach świecących oraz PWM.

Dużo większe możliwości dają diody RGB (ang. Red, Green, Blue) w ich wnętrzu producenci umieszczają trzy struktury świecące. Czerwoną, zieloną oraz niebieską – możemy sterować każdą z osobna. Dzięki czemu, po pierwsze dioda taka może świeci na 3 podstawowe kolory, po drugie możliwe jest oczywiście mieszanie kolorów.


W zestawie znajdują się dwie diody RGB z matowymi soczewkami. Takie LEDy nie świecą tak jasno, jak te umieszczane w przezroczystych obudowach, jednak znacznie lepiej sprawdzają się, gdy chcemy uzyskać ładne mieszanie kolorów.

Dioda RGB z matową soczewką.

Dioda RGB z matową soczewką.

Diody RGB występują w wersji ze wspólną katodą oraz anodą. Po więcej szczegółów odsyłam do kursu elektroniki, konkretnie do 3 części drugiego poziomu. W naszym przypadku używamy wersji ze wspólną katodą. Oznacza to, że najdłuższą nóżkę podłączamy do masy, a pozostałe przez rezystory zasilamy napięciem dodatnim.

Pierwsze użycie diody RGB

W celu przetestowania diody podłączamy ją zgodnie z poniższą rozpiską:

  1. Kolor czerwony, przez rezystor 1k, do pinu 3.
  2. Wspólna katoda, bezpośrednio do masy.
  3. Kolor zielony, przez rezystor 1k, do pinu 5.
  4. Kolor niebieski, przez rezystor 1k, do pinu 6.
Dioda RGB podłączona do Arduino.

Dioda RGB podłączona do Arduino.

Jeśli odcinasz nóżki diod i rezystorów, to pamiętaj o dwóch kwestiach:

  1. nie ucinaj ich zbyt krótko,
  2. zbieraj odcięte fragmenty – przydają się jako połączenia na płytce stykowej.

Pora na pierwszy prosty program. Tym razem chcemy przetestować świecenie każdego z kolorów osobno, a na końcu połączyć wszystkie barwy.

W praktyce, będzie dokładnie, tak jak się spodziewamy:

Oczywiście jednoczesne włączenie wszystkich kolorów dało biały. Korzystając z poznanego już wcześniej PWM możemy regulować poziom każdego koloru osobno. Dzięki temu możliwe będzie wygenerowanie dowolnych barw. Zanim przejdziemy do takiego przykładu podłączmy drugą diodę.

Podłączanie wielu (tradycyjnych) diod RGB

Aby korzystać w pełni z drugiej diody RGB najwygodniej będzie skorzystać z kolejnych trzech kanałów PWM. Akurat nie wykorzystujemy ich w inny sposób, więc nie jest to problematyczne.

Tym razem będzie to:

  1. Kolor czerwony, przez rezystor 1k, do pinu 9.
  2. Wspólna katoda, bezpośrednio do masy.
  3. Kolor zielony, przez rezystor 1k, do pinu 10.
  4. Kolor niebieski, przez rezystor 1k, do pinu 11.
Druga dioda podłączona do Arduino.

Druga dioda podłączona do Arduino.

Dla formalności prosty program testujący działanie obu diod:

Efekt działania programu to miganie diodami w różnych kolorach:

Tradycyjne diody RGB – mieszanie kolorów

Teraz możemy przejść do ciekawszej części, czyli wykorzystania faktu, że dzięki takim diodom możemy uzyskać dowolne kolory. Wystarczy odpowiednio generować sygnał PWM. Wierzę, że każdy rozumie już ideę, dlatego ograniczę się jedynie do prostego przykładu. Dzięki temu szybciej przejdziemy do diod programowalnych.

Na początek program w najprostszej wersji. Sterowanie PWM odbywa się poprzez wykorzystanie funkcji analogWrite(pin, wypelnienie), gdzie wypełnienie jest wartością od 0 do 255, co przekłada się na jego regulację w zakresie 0-100%.

Więcej na temat PWM znaleźć można w 5 części kursu Arduino, poziom I.

Napiszmy program, który będzie płynnie regulował dwa kolory każdej diody, w przypadku trzeciego zdamy się na ślepy los. Zacznijmy od prostej pętli for:

Pętla wykonuje się 255 razy. Przy każdym jej obiegu zmienna zmiana jest zwiększana o jeden. Następnie wartość ta jest ustawiana jako wypełnienie jednego z kolorów diody oraz odejmowana od wypełnienia drugiego koloru, które domyślnie wynosi 100%.

W przypadku pierwszej diody, z każdym wykonaniem pętli dioda świeci jaśniej na zielono, a coraz słabiej na niebiesko. W przypadku drugiej diody, na sile zyskuje kolor czerwony, a słabnie zielony.

Aby wykorzystać trzeci kolor skorzystamy z funkcji zwracającej losową liczbę, którą omawialiśmy w 10 części kursu Arduino, poziom I. Dla większej płynności efektów będziemy ją generować przed każdym obiegiem pętli. Poniższy kod powinien dać nam dwie, losowo zmieniające kolor diody.

Jest dobrze, ale mogłoby być lepiej – po wykonaniu pętli for wracamy gwałtownie do początku, co powoduje brzydki przeskok kolorów.  Aby to poprawić należałoby równie płynnie zmieniać kolory w drugą stronę.


Tym razem zaproponuję mało wyrafinowane rozwiązanie – skopiowałem pętlę i zmieniłem warunek tak, aby drugi raz wykonała się „od tyłu”. Oczywiście nie jest to zbyt ładne rozwiązanie, jednak w tej chwili program ma realizować tylko to miganie, więc można sobie pozwolić na taką realizację.

Ostateczny kod przykładu wygląda następująco:

Efekt działania w praktyce jest widoczny na poniższej animacji:

lsoowe_rgb

Losowe kolory RGB.

Uzyskaliśmy losowy gadżet świecący, który mógłby być całkiem ciekawym efektem wizualnym, gdyby diod było więcej. Tutaj pojawia się problem, ponieważ do tej pory dodanie każdego kolejnego LEDa wymagało trzech nowych kanałów PWM. Podłączając dwie diody RGB wykorzystaliśmy już możliwości naszego Arduino UNO (6 kanałów).

Zastosowanie bardziej rozbudowanych programów oraz kilku nowych elementów elektronicznych pozwoliłoby na dodanie jeszcze kilku dodatkowych diod. Program oraz schemat połączeń komplikowałby się jednak bardzo, bardzo szybko.

A gdyby, wszystkie diody można było sterować mniejszą ilością wyprowadzeń? Tutaj oczywiście zastosowanie znają LEDy programowalne, które od teraz zaczniemy używać.

Czym jest dioda programowalna?

Technologia LEDów zyskuje na popularności w niesamowitym tempie. Jednokolorowe podświetlenie na diodach nie jest już niczym nadzwyczajnym. We wszelkich gadżetach i świecących reklamach chętnie używano taśm składających się z diod RGB. Sterowanie każdą diodą byłoby jednak trudne.

Dlatego powstały dedykowane układy, które montowano obok diod. Pozwalały one na sterowanie kolorem i jasnością wielu LEDów w prosty sposób. Popularność tego rozwiązania doprowadziła do sytuacji, w której powstały układy WS2812. Czyli połączenie sterownika diody RGB z… diodą RGB. Wszystko w jednej obudowie – najczęściej w SMD (do montażu powierzchniowego).

Tak powstały programowalne diody RGB. Dzięki komunikacji cyfrowej za pomocą jednej linii sygnałowej możemy sterować setkami diod!

Dalej zakładam, że korzystasz z gotowego modułu RGB, dlatego pomijam sprawy ważne przy używaniu pojedynczych diod.  W zestawach elementów znajduje się linijka 8 takich diod. Każda z nich pobiera prąd do 30 mA, co daje łączną wartość ok. 240 mA. Listwę można zasilać napięciem od 4 V do 7 V.

Moduł 8 diod programowalnych WS2812.

Moduł 8 diod programowalnych WS2812.

Zależnie od wariantu, może ona mieć 3 lub 4 wyprowadzenia. Nie stanowi to żadnej różnicy. Masa w niektórych modułach jest wyprowadzona na dwa piny.

Patrząc gołym okiem diody te nie wyróżniają się niczym specjalnym. Dopiero na zbliżeniu widać, to co najciekawsze. Bez problemu można zauważyć sterownik oraz poszczególne struktury.

Widok na pojedynczą diodę WS2812 z bliska.

Widok na pojedynczą diodę WS2812 z bliska.

Podłączenie diod WS2812

Niezależnie od ilości diod zawsze do modułu będziemy musieli doprowadzić trzy przewody:

  • sygnał sterujący, najczęściej oznaczany jako: DIN, Data IN,
  • dodatnią szynę zasilania (4-7V), najczęściej oznaczana jako: VIN, V lub znakiem +,
  • masę układu, najczęściej oznaczana jako GND lub znakiem -.

Kolejność wyprowadzeń sprawdzamy bezpośrednio na module lub w dokumentacji dostarczonej przez producenta danej płytki!

Na rynku dostępne jest wiele podobnie wyglądających modułów, nie mogę zagwarantować, że zawsze wyprowadzenia będą ułożone tak samo. Dlatego dla bezpieczeństwa nie podaję żadnego schematu montażowego – operuję na nazwach sygnałów.


Moduł mocujemy w płytce stykowej. Następnie masę (jeśli występują, to dwie) łączymy z masą układu, do dodatniej szyny zasilającej doprowadzamy 5V. Równolegle z pinami zasilającymi podłączamy kondensator elektrolityczny. Przy tej ilości diod 100uF będzie wystarczające.

Następnie podłączamy sygnał sterujący. W przypadku naszych ćwiczeń będzie to pin A0. Zgodnie z zaleceniami producenta nie robimy tego bezpośrednio. Między wyprowadzenie Arduina, a linijkę diod powinniśmy wpiąć rezystor z zakresu 300-500R. W naszym wypadku wpinamy tam dwa, połączone równolegle rezystory 1k (co da 500R).

W razie problemów sprawdzić informacje na temat
szeregowego i równoległego łączenia rezystorów.

Układ na płytce stykowej wygląda następująco:

Komunikacja z diodami – gotowa biblioteka

Sama komunikacja z diodami przebiega za pomocą specjalnego interfejsu jednoprzewodowego. Jednak dzięki gotowej bibliotece nie musimy zagłębiać się w sprawy techniczne.

Jeśli będzie taka potrzeba, to stosowny artykuł pojawi się jednak na Forbocie.

W tej chwili skorzystamy z popularnej biblioteki Adafruit NeoPixel. Oczywiście najpierw musimy ją zainstalować, proces ten przebiega różnie w zależności od źródła kompilatora.

W przypadku Arduino IDE pobranego z Arduino.cc

Z menu wybieramy:

Szkic > Dołącz bibliotekę > Zarządzaj bibliotekami

Następnie w polu wyszukiwarki wpisujemy Adafruit NeoPixel, na liście wybieramy odpowiednią bibliotekę, a następnie ją instalujemy:

Instalacja właściwej biblioteki.

Instalacja właściwej biblioteki.

W przypadku Arduino IDE pobranego z Arduino.org

Pobieramy bibliotekę NeoPixel z GitHuba, wystarczy skorzystać z przycisku: Clone or download:

Pobieranie biblioteki z GitHuba.

Pobieranie biblioteki z GitHuba.

Zmieniamy nazwę archiwum z Adafruit_NeoPixel-master na Adafruit_NeoPixel.

Następnie w Arduino IDE wybieramy:

Szkic > Importuj bibliotekę… > Dodaj bibliotekę..

Wskazujemy pobrane przed chwilą archiwum (nie rozpakowujemy go) i klikamy Open. Biblioteka powinna po chwili dodać się do naszego IDE. Najłatwiej sprawdzić to przez wybranie:

Plik > Przykłady

Na samym dole powinna być widoczna zakładka z programami przykładowymi z NeoPixel:

Nowe przykłady po instalacji biblioteki.

Nowe przykłady po instalacji biblioteki.

Podstawowe funkcje biblioteki NeoPixel

Gdy instalacja przebiegnie poprawnie będziemy mogli pójść dalej, czyli napisać pierwszy program. Każdy program, który wykorzystuje naszą linijkę diod musi zawierać odwołanie do biblioteki oraz jej inicjalizację. W praktyce wygląda to następująco:

Podświetlona linijka jest najważniejsza. W tym miejscu tworzymy obiekt o nazwie linijka, do którego będziemy się później odwoływać. Następnie w nawiasie podajemy informacje na temat modułu.

Najważniejsze są dwa pierwsze parametry. W tym przypadku 8 oznacza ilość diod w linijce, a A0 tyczy się oczywiście pinu Arduino, do którego ją podłączyliśmy. Ostatni parametr, to informacja na temat wersji samych diod. W tej chwili nie musimy się tym przejmować.


Dla przykładu możemy nasze diody podpiąć do innego pinu, np. 3, a całość zamiast linijką nazwać np. wężem świetlnym. Wtedy konfiguracja wyglądałaby tak:

Zostańmy jednak przy pierwszej wersji incjalizacji i przejdźmy do pierwszego programu.

Pierwszy test diody programowalnej

Mamy pełną dowolność w sterowaniu diodami. Każdej możemy ustawić inny kolor i inną jasność. W tym celu należy się do niej odwołać korzystając z takiej składni:

Jako pierwszy parametr podajemy nr diody (licząc od zera). Drugim parametrem jest kolor. Jak to bywa w świecie komputerów musimy go wyrazić w formie dużej liczby.

Dla nas, jako ludzi, znacznie łatwiej będzie, gdy kolor będziemy mogli opisać trzema mniejszymi liczbami. Wtedy każda z nich będzie mogła odpowiadać za jasność jednej składowej, czyli osobno podamy jasność dla koloru czerwonego, zielonego oraz niebieskiego. Tutaj z pomocą przychodzi nam kolejna konstrukcja: linijka.Color(0, 0, 0).

W praktyce jej zastosowanie wygląda następująco:

  • linijka.setPixelColor(0, linijka.Color(255, 0, 0)) – dioda nr 1 świeci na czerwono
  • linijka.setPixelColor(0, linijka.Color(0, 255, 0)) – dioda nr 1 świeci na zielono
  • linijka.setPixelColor(0, linijka.Color(0, 0, 255)) – dioda nr 1 świeci na niebiesko
  • linijka.setPixelColor(6, linijka.Color(100, 0, 255)) – dioda nr 7 świeci maksymalnie jasno na niebiesko oraz słabiej na czerwono.

Sprawdźmy w praktyce, czy uda nam się uruchomić pierwszą diodę:

Komendę wywołałem w funkcji setup, ponieważ chciałem włączyć diodę raz. Nie było potrzeby, aby robić to w pętli. Po uruchomieniu programu… nie dzieje się jednak nic! Dlaczego?

Zawsze po wysłaniu komendy lub grupy komend, które mają być widoczne na diodach należy wykonać polecenie linijka.show(); 

Poprawna wersja programu, która już na 100% włączy pierwszą diodę na zielono wygląda tak:

W praktyce wygląda to następująco:

Pierwsza dioda świeci na zielono.

Pierwsza dioda świeci na zielono.

Dzięki tym kilku funkcjom będziemy mogli tworzyć od teraz ciekawe efekty wizualne. W tej chwili stworzymy dwa, które przydadzą nam się w kolejnych częściach, gdy będziemy uruchamiać prosty alarm. Będą to dwa sposoby sygnalizacji zbliżone do kogutów policyjnych.

Sygnalizator alarmowy

Pierwsza wersja sygnalizatora będzie bardzo prosta. Chcemy, aby wszystkie diody świeciły na zmianę na czerwono lub na niebiesko. Oczywiście nie będziemy każdej z nich uruchamiać ręcznie.W tym celu wykorzystamy dwie pętle for. Zadaniem pierwszej z nich będzie ustawienie wszystkich diod na kolor czerwony:

Chcę, aby diody zmieniały kolor jednocześnie. Dlatego polecenie linijka.show() zostało wywołane dopiero po wykonaniu pętli.

Jeśli nie czujesz o co chodzi z show(), to spokojnie wykonaj ten przykład i przejdź dalej. Podczas drugiego sygnalizatora zrobimy odwrotnie i wtedy różnica będzie ewidentnie widoczna.

Aby nasz sygnalizator szybko migał musimy dodać obsługę drugiego koloru oraz małe opóźnienie. Program realizujący ten przykład wygląda następująco:

Efekt działania sygnalizatora w praktyce widoczny jest poniżej:

Sygnalizator alarmowy – wersja druga

Tym razem sygnalizator ma składać się z 4 diod czerwonych i 4 niebieskich. Co więcej nie mają one włączać się na raz, tylko jedna, po drugiej. Aby tak się stało wewnątrz pętli należy wywołać show() oraz wstawić opóźnienie.

Uruchomienie takiej pętli spowoduje kolejne włączanie każdej diody na niebiesko. Teraz należy rozbudować program w taki sposób, aby zmieniać kolor – oczywiście wystarczy do tego jeden warunek. W najprostszej formie będzie wyglądało to następująco:

Zwróć uwagę na przedostatnią linijkę programu – to nowa komenda linijka.clear(), która jest odpowiedzialna za wyczyszczenie całej linijki lub mówiąc inaczej, za wyłączenie wszystkich diod. Bez niej nasz efekt wykonałby się tylko raz. W praktyce działanie powyższego programu wygląda następująco:

Powyższe efekty były jedynie wstępem. Podczas realizacji przykładów z innych artykułów będziemy wykorzystywać diody w coraz bardziej zaawansowany sposób. W ramach zadania domowego zachęcam do eksperymentowania z własnymi efektami. Koniecznie pochwalcie się w komentarzu, jeśli stworzycie coś ciekawego.


Polecam również zapoznać się z przykładowymi programami dołączonymi do biblioteki. Należy jednak pamiętać o odpowiedniej konfiguracji! Programy te znaleźć można w zakładce:

Plik > Przykłady > Adafruit NeoPixel

Działanie jednego z nich widoczne jest na poniższym filmie:

Kiedy diody tradycyjne, a kiedy programowalne?

W głowach niektórych czytelników pojawi się zapewne pytanie, czy w takim razie należy całkiem „zapomnieć” o tradycyjnych diodach RGB? Moim zdaniem nie. Jeśli chcemy dodać do naszego urządzenia jedną kontrolkę, to lepsza może okazać się zwykła dioda.

Jeśli projekt zakłada jednak wykorzystanie większej ilości diod RGB, to wtedy bez wahania należy kierować się w stronę WS2812. Znacznie uprości to stronę sprzętową jak i programistyczną.

Przykład użycia diod WS2812.

Przykład użycia diod WS2812.

Podsumowanie

Głównym celem tego artykułu było sprawdzenie w praktyce czym różnią się tradycyjne diody od tych z wbudowanymi sterownikami. Dołączona do zestawu linijka diod będzie nam towarzyszyła podczas większości kolejnych artykułów. Posłuży m.in. za sygnalizator w alarmie, będzie również skalą dla naszych termometrów.

W kolejnym artykule do sygnalizatora świetlnego dodamy prostą syrenę alarmową, która będzie generowała odstraszający dźwięk. Jeśli nie chcecie przeoczyć kolejnych części, to skorzystajcie z poniższego formularza i zapiszcie się na powiadomienia o nowych artykułach!

Kup zestaw elementów i zacznij naukę w praktyce! Przejdź do strony dystrybutora »

Autor kursu: Damian (Treker) Szymański

Powiadomienia o nowych, darmowych artykułach!

Komentarze

Dolc1

13:18, 10.06.2016

#1

Super opisane pozdrawiam

Treker
Autor wpisu
Administrator

13:44, 10.06.2016

#2

Dolc1, dzięki - miło słyszeć, że się podoba :)

Zakurek

16:37, 10.06.2016

#3

Takie pytanko czy w zestawie do cz.2 kursu powinny być 2 diody LED RGB?

Jak dodać bibliotekę, ja nie mam takiej opcji jak w u ciebie

Treker
Autor wpisu
Administrator

18:00, 10.06.2016

#4

Zakurek, teraz widzę, że się rozpędziłem tutaj z przykładem. Faktycznie w zestawach powinna być jedna dioda (i tak zapewne jest). Szkoda zmieniać już przykład, więc zapewne dodamy ją do zestawów. W takim przypadku oczywiście "brakująca" dioda zostanie dosłana, do osób, które załapały się na wersje bez niej.

Wypracujemy jakieś rozwiązanie i na pewno na początku tygodnia opublikuję tutaj informację na ten temat. Całe szczęście, że nie jest to poważniejsza różnica, bo brak tej diody nie wpływa zbytnio na przebieg nauki :)

Dodałem opis instalacji bibliotek w przypadku kompilatora z drugiego źródła :)

Treker
Autor wpisu
Administrator

9:18, 15.06.2016

#5

Zakurek, jeśli chodzi o brak drugiej diody RGB (dotyczy to jedynie kilku osób), to wystarczy, że napiszą one na adres biuro[malpa]botland.com.pl z informacją o braku diody i podadzą nr zamówienia. Dioda zostanie bezpłatnie dosłana. Przepraszam za ten problem i mam nadzieję, że więcej takich niespodzianek już nie będzie :)

BlackJack

12:40, 21.06.2016

#6

Kurcze sam planuję zakup takiej linki programowalnych diod LED, Tylko trzeba zbudować sterownik, i tu przydała by się obsługa kart MMC/SD. Taka 2m linka z 120 ledami pozwalałby już wyświetlać ciekawe efekty.

No i pozostaje jeszcze kwestia zasilacza do tego, jak dobrze pamiętam to na 2m trzeba chyba 4,7A.

Treker
Autor wpisu
Administrator

13:01, 21.06.2016

#7

BlackJack, racja należy pamiętać o dobrym zasilaniu. Akurat w przypadku opisywanej linijki można ją jeszcze spokojnie zasilać ze stabilizatora wbudowanego w Arduino. Przy większych "wyświetlacz" konieczne będą dodatkowe zasilacze :)

Ketejow

19:14, 21.06.2016

#8

Mam problem ze swoim modułem diod. W ostatnim przykładzie (4 diody czerwone, 4 niebieskie) pierwsze 4 zapalały się prawidłowo, ale reszta nie.

Gdy zmieniłem kolory na pierwsze 4 (0, 0, 255), drugie 4 (200, 0, 255) to najpierw zapalają się na niebiesko 4 diody, a gdy zapalają się czerwone, to te 4 gasną.

Przy kodzie niżej najpierw normalnie zapala się 7 diód na niebiesko, a w momencie zapalenia czerwonej reszta gaśnie.

#include <Adafruit_NeoPixel.h> //Dołączenie biblioteki

//Konfiguracja linijki

Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800);

void setup() {

linijka.begin(); //Inicjalizacja

linijka.show();

}

void loop() {

int i = 0;

uint32_t kolor = 0;

for (i = 0; i < 8; i++) {

if (i < 7) {

linijka.setPixelColor(i, linijka.Color(0, 0, 255)); //Dioda nr i świeci na wybrany kolor

} else {

linijka.setPixelColor(i, linijka.Color(255, 0, 0)); //Dioda nr i świeci na wybrany kolor

}

linijka.show();

delay(1000);

}

linijka.clear();

}

Przy kilku innych kombinacjach wyszło tak, jakby czerwone diody powodowały słabsze świecenie zielonych i zgaśnięcie niebieskich, a zapalenie zielonych słabsze świecenie niebieskich.

Czy to jakieś uszkodzenie, złe zasilanie, czy coś innego?

Treker
Autor wpisu
Administrator

19:22, 21.06.2016

#9

Ketejow napisał/a:

gdy zapalają się czerwone, to te 4 gasną.

Gasną całkowicie, czy przygasają? Zasilasz Arduino z zasilacza, który był w zestawie?

Ketejow

22:01, 23.06.2016

#10

Tak, zestaw mam z Botlandu. WSzystko zaczęło dobrze działać, gdy pominąłem rezystory. Jednak czy nie dojdzie wtedy do uszkodzenia? Próbowałem z inną rezystencją, najpierw 330 Ohm, potem równolegle 2 rezystory 330, wtedy diody świecą się tylko na jeden kolor, a przejście między nimi jest niepłynne (wgrany przykład strandtest).

Nurek13

22:45, 23.06.2016

#11

Witam.

Mam podobne problemy. Co ciekawe u mnie świeciły tylko pierwsze 4 diody czerwone potem nic, a po zmianie czerwonych na niebieskie... świecą 4 niebieskie gasną i cztery dalsze czerwone. Próbuję to rozgryźć :))))

pozdrawiam :)

Co ciekawe jak zrezygnuję z niebieskiego koloru diód 5-8 na czerwone działa cała linijka ;/

Faktycznie ... bez rezystorów działa prawidłowo.

Zaznaczę że mam zasilanie 5V osobno nie z Arduino.

.. po różnych kombinacjach działa poprawnie tylko bez oporników.

Wydaje mi się, że przy ograniczeniu mocy opornikami sterowniki diód szaleją i zaczynają błędnie działać ..

Treker
Autor wpisu
Administrator

9:59, 24.06.2016

#12

Ketejow, Nurek13, a czy to samo dzieje się u Was, gdy ustawicie małe natężenie każdego z kolorów (np. 50 zamiast 255)? Dajcie też znać, czy Wasza linijka ma 4, czy 3 wyprowadzenia?

covalski00

14:23, 24.06.2016

#13

Mam pytanie odnośnie pobieranego przez listwę prądu. Napisano, że wartość ta może osiągnąć 240 mA. Czy to nie przekracza możliwości pinu 5V? Wydawało mi się, że każdy pin może dostarczać około 20mA.

Treker
Autor wpisu
Administrator

14:28, 24.06.2016

#14

covalski00, trochę mylisz pojęcia, już prostuję :) Tutaj sytuacja jest podobna do serwomechanizmów. Cały układu (tutaj diody) zasilane są z napięcia 5V (pobieranego wprost z wbudowanego stabilizatora). Natomiast z pinu cyfrowego Arduino, który połączony jest z diodami pobierany jest bardzo mały prąd, ponieważ służy on jedynie do programowania LEDów (czyli transmisji danych). W serwomechanizmach było podobnie - silnik zasilany był z normalnego źródła zasilania, a z Arduino przesyłaliśmy tylko sygnał PWM. Inaczej mówiąc ten duży prąd "nie idzie" przez Arduino, tylko pobierany jest ze stabilizatora. Dla przypomnienia więcej o serwach: Kurs Arduino – #5 – PWM, serwomechanizmy, biblioteki.

Ketejow

14:36, 24.06.2016

#15

Tak jak zauważył Nurek13 podejżewam, że te rezystory są niepotrzebne. Jak wspominałem linijkę mam z gotowego zestawu z Botlandu. Przy obu jej końcach są po 3 wyprowadzenia, z jednej strony kolejno GND, IN, VCC. Z drugiej zapewne podłączenia pod kolejną linijkę, kolejno VCC, OUT, GND (oba piny GND przy tej samej krawędzi, tak samo VCC). Jedyny napis na mojej poza oznaczeniami to adres strony producenta www.telmal.com.

Oczywiście linijkę mam podłączoną od strony wyprowadzenia IN, podłączenie od dugiej strony nie daje żadnego efektu.

[ Dodano: 24-06-2016, 14:39 ]

PS. Kiedy następna część?

covalski00

15:07, 24.06.2016

#16

Wielkie dzięki, to bardzo rozjaśnia sprawę. Jeszcze tylko małą wątpliwość w związku ze złączami zasilania. Czy na pinie Vin uzyskujemy takie napięcie, jakie dostarczymy ze źródła zasilania (np. bateria 9V, zasilacz 12V, itd.)?

Napięcie na pinach 5V i 3,3V jest stabilizowane do tych wartości, natomiast w Vin stabilizacja jest pomijana (równa napięciu źródła)?

W przykładzie z serwomechanizmem użyty jest dodatkowy stabilizator podpięty do Vin (bateria 9V). Zatem czy można by zamiast dodatkowego stabilizatora wykorzystać pin 5V?

Zobacz wszystkie komentarze (48) na forum

FORBOT Damian Szymański © 2006 - 2017 Zakaz kopiowania treści oraz grafik bez zgody autora. vPRsLH.