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

[Arduino/wemos]Oświetlenie schodów listwami led.

03 Lis 2017 23:34 1047 18
  • Poziom 3  
    Witam serdecznie wszystkich forumowiczów!

    Postanowiłem zbudować "sterownik" umożliwiający sterowanie paskami LED. Diody rozmieszczone są standardowo, pod każdym stopniem schodów. Całe przedsięwzięcie sterowane jest za pomocą układu Wemos D1 (ESP8266), układu 16-tu przekaźników low-logic, dwóch przerzutników 74HC595 oraz garści tranzystorów NE2222. Gotowy układ ma wykonywać następujące funkcje:

    1. Światło zapalane jest przez aplikację lub stronę internetową.
    2. Światło gaszone jest przez aplikację lub stronę internetową.
    3. Podczas wchodzenia/schodzenia po schodach światło zapala się pod stopami użytkownika oraz dwa schodki przed i za nim.
    3.Oświetlenie schodów przed i za schodzącym powinno być mniej intensywne.

    Jak to często bywa, na papierze wszystko wydaje się łatwe i proste, ale niestety podczas realizacji pojawiło się kilka problemów z którymi nie mogę się uporać .
    1. odnosi się samego uruchomienia.
    Po włączeniu ledów na losowych schodkach następuje " charakterystyczny" błysk, którego nie mogę się pozbyć.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    2.Z racji tak wielu elementów nie wiem jak mogę modulować intensywność świecenia ledów w każdym z case'ów( zakładam, że końcowy program będzie właśnie oparty na tej funkcji). Sterowanie PWM nic mi nie da, ponieważ sygnał wysoki idzie na tranzystor, który zamyka obwód przekaźników. Domyślam się, że w ostatecznej wersji będę musiał użyć samych tranzystorów żeby uzyskać taki efekt.



    Muszę zaznaczyć, że poziom mojego kodu jest poziomu zaawansowanego szóstoklasisty, więc każda wskazówka byłaby pomocna.
  • Relpol przekaźniki
  • Poziom 20  
    Dlaczego do sterowania rejestrami przesuwnymi 74595 nie używasz wbudowanej funkcji shiftOut?
  • Relpol przekaźniki
  • Poziom 3  
    Powód jest prosty. Nie do końca sobie z Tym poradziłem, więc musiałem napisać funkcję "łopatologicznie". Podejrzewam, że owy wcześniej opisany błysk jest spowodowany właśnie moim kodem.

    Dorzucam kolejny problem/pytanie:

    Czy istnieje możliwość sterowania paskami led na 1wire? (tak jak kilkoma czujnikami temperatur Dallas ).
    Może w tej materii będzie więcej zorientowanych ludzi ;)
  • Pomocny post

    Poziom 28  
    Są gotowe paski LED z diodami WS2812B - są to paski RGB ( czyli mogące świecić "dowolnym" kolorem ). Sterowane są właśnie 1Wire. W dodatku można ustawiać ich jasność a także sterować kolorem i jasnością poszczególnych diod w taśmie a nie tylko całą taśmą. Są oczywiście dużo droższe od taśm "zwykłych".

    Co do kodu - bardzo, bardzo martwi mnie duża ilość funkcji delay() :) Jeśli poszczególne komedny mają wykonywac się w odstepach np. 1 sekundy to można zrobić sobie prosty licznik zliczający sekundy a następnie na swich - case zrobić wywoływanie tych komend w zależności od aktualnej wartości tego licznika czasu. Po dojściu do końca - reset licznika czasu do zera i praca od nowa. Licznik taki mozna łatwo zrobić na przykładzie BlinkWitoutDelay z ArduinoIDE. Po prostu zamiast migania diodą co sekundę, inkrementuj zmienną , np. licznik ++ ;
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    zster napisał:
    Są gotowe paski LED z diodami WS2812B - są to paski RGB ( czyli mogące świecić "dowolnym" kolorem ). Sterowane są właśnie 1Wire.


    Dla ścisłości, są sterowane przy pomocy jednej linii sterującej (w tym sensie są one wire), niemniej 1-Wire to nazwa protokołu firmy Dallas, z którym te diody nie są kompatybilne.

  • Poziom 28  
    tmf napisał:
    Dla ścisłości, są sterowane przy pomocy jednej linii sterującej (w tym sensie są one wire), niemniej 1-Wire to nazwa protokołu firmy Dallas, z którym te diody nie są kompatybilne.


    To prawda, przepraszam za wprowadzenie w błąd.
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 3  
    niveasoft napisał:

    Pisząc "efekty" mam na mysli to że każdy stopień może :odprowadzić Cię na górę/dół"


    Ja miałem na to kilka pomysłów.
    Na samym początku chciałem korzystać z pomiaru odległości przez układ HC-SR04. Każdemu schodkowi miał być przypisany przedział odległości pobierany z czujnika. Niestety układ ten okazał się za mało precyzyjny a jego maksymalny dystans pomiaru za krótki na moje potrzeby. Myślałem także o tensometrach umieszczonych na każdym stopniu ale to raczej przerost formy nad treścią. Ostatecznie zdecydowałem się na diodę IR wraz z odbiornikiem. Problem jest taki, że musiałbym montować taki zestaw na każdym schodku, by móc "odprowadzać" użytkownika na górę/dół.

    Masz może jakieś prostsze rozwiązanie , które nie jest objęte tajemnicą handlową ? :D
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Zrób detektory na górze i na dole. Ludzie zwykle wchodzą/schodzą w określonym tempie i przy pewnej tolerancji możesz zrobić taką falę bez dodatkowych czujników na każdym schodku. Dodatkowo, jeśli np. osba wchodząca nie przetnie górnego czujnika w okreśonym czasie, coś znaczy, że stoi na schodach można np. włączyć delikatne podświetlenie wszystkich. Zresztą chyba dla bezpieczeństwa tak bym zrobił - delikatne podświetlenie wszystkich schodów + na to ew. efekt fali.
  • Poziom 3  
    tmf napisał:
    zster napisał:
    Są gotowe paski LED z diodami WS2812B - są to paski RGB ( czyli mogące świecić "dowolnym" kolorem ). Sterowane są właśnie 1Wire.


    Dla ścisłości, są sterowane przy pomocy jednej linii sterującej (w tym sensie są one wire), niemniej 1-Wire to nazwa protokołu firmy Dallas, z którym te diody nie są kompatybilne.


    Podepnę się do tematu.
    Rozgrzany Andrzej wspomniał o module przekaźnikowym. Czy w tym przypadku nie jest to strzał w kolano? - ze względu na ilość żył poprowadzonych - oddzielnie do każdego paska taśmy led.

    Czy można w jakiś sposób fizycznie zaadresować każdy schodek? Chociażby przez dodanie przed odbiorem odpowiednich diod, kondensatorów lub tranzystorów, które przy odpowiednim napięciu przewodzą. Wtedy można by, by zastosować PWM. Czy jest to, na tyle problematyczne, że lepiej się w to nie bawić, a po prostu kupić RGB WS2812B?
  • Pomocny post
    Użytkownik usunął konto  
  • Pomocny post

    Poziom 28  
    By zminimalizować liczbę przewodów można by przy każdym schodku umieścić układ z licznikiem ( np. 4017 ) i MOSFETem . Przewodami były by : GND, VCC i CLK. Każdy schodek podłączony do kolejnego bitu licznika. Sterowanie jasnością można by zrealizować własnie przez PWM na zasilaniu ( możliwe że wtedy trzeba by pociągnąć osobne zasilanie dla licznika ). Można też skorzystać z DS2408 sterowanego magistralą 1Wire ...
  • Poziom 3  
    tmf napisał:
    Zrób detektory na górze i na dole. Ludzie zwykle wchodzą/schodzą w określonym tempie i przy pewnej tolerancji możesz zrobić taką falę bez dodatkowych czujników na każdym schodku.


    Właśnie taką miałem na to koncepcję przy użyciu 2 par czujników.

    tmf napisał:
    . Zresztą chyba dla bezpieczeństwa tak bym zrobił - delikatne podświetlenie wszystkich schodów + na to ew. efekt fali.


    To naprawdę świetny pomysł!

    Teraz zostaje mi trochę zabawy z kodem.

    @Amanek jeśli mam sterować modulacją sygnału to niestety listwa przekaźnikowa odpada. Nie wiem jeszcze jak miałbym to zbudować, ale coś mi świta, że muszę użyć tranzystorów typu MOSFET.

    Na razie wątek pozostawiam otwarty, a ja zabieram się do pracy. Dziękuję wszystkim, którzy wypowiedzieli się w temacie i zachęcam innych do dodania czegoś na ten temat !

    Będę Was informował o postępach !:)
  • Moderator Mikrokontrolery Projektowanie
    @RozgrzanyAndrzej Możesz użyć zwykłych diod i sterować nimi PWM przez tranzystor, np. MOSFET. Jest to proste i skuteczne. Napięcia niskie, prądy nieco większe, ale nowoczesne MOSFETy z bramką logiczną sobie z tym poradzą i możesz nimi sterować bezpośrendio z procka. Diody WS2812B mają tą zaletę, że to diody RGB, a więc możliwe jest uzyskanie dowolnego koloru (dla zwykłych diod RGB też, tyle, że na jeden schodek potrzebujesz 3 MOSFETY, sterowane PWM) i nie potrzebujesz żadnego układu sterującego - łączysz linię danych z pinem IO MCU i się bawisz. Każdą diodą można sterować indywidualnie. Niemniej na schodach, chyba główna ich zaleta będzie polegała na tym, że nie potrzebujesz układów sterujących opartyych na tranzystorach. Zakładając, że chcesz mieć oddzielne sterowanie każdym schodkiem, potrzebujesz co najmniej tyle MOSFETów ile masz schodów (a dla wersji RGB 3xtyle). Tu użycie WSów po prostu ułatwia sprawę, a obecnie ich ceny nie są wysokie (szczególnie jeśli zamówisz od Chińczyków).
  • Użytkownik usunął konto  
  • Moderator Mikrokontrolery Projektowanie
    R-MIK napisał:
    Gdybys zdecydował się na WS2812/11 to pamiętaj o zapotrzebowaniu na pamięć ram. Jedna dioda to 8 (gdy użyjesz USART) lub 9 (SPI) bajtów pamięci.

    Nie jest to prawdą. Robiąc nawet skomplikowane efekty, można je generować na bieżąco, przygotowując wyliczoną 24-bitową wartośc koloru do wysyłki. Zapotrzebowanie na pamięć RAM może być od zera do kilku bajtów. Oczywiście można sobie zrobić konwersję dla wszystkich diod na raz i umieścić wynik w tablicy w RAM. Ala nie jest to konieczne i dla ATMeg nawet nie za bardzo coś daje. Takie podejscie ma sens w przypadku 100% obciążenia procka obliczeniami i możliwości użycia np. DMA. Dodatkowo mówimy tu o schodach - autor raczej nie będzie robił dyskoteki, więc diody w ramach jednego schodka będą świecić tak samo, czyli raz wyliczoną wartość wysyłamy wielokrotnie dla kolejnych diod.
  • Użytkownik usunął konto  
  • Poziom 3  
    Witam!

    Dziękuję wszystkim jeszcze raz za zaangażowanie się w sprawę ! Minęło sporo czasu od ostatniego posta, a sprawa nie poruszyła się znacząco do przodu, ale do rzeczy. Wzięłem pod uwagę wasze solucje i zabrałem się do poprawy swojego kodu oraz mechaniki całego układu.

    Dla uproszczenia układzik testuję na 8 diodach, jednym rejestrze 74HC595 oraz nadajniku/odbiorniku IR.

    Tak jak pisaliście, starałem się odpalać sekwencję po zerwaniu sygnału nadajnik-odbiornik. Początkowo myślałem, o funkcji while.
    Nieskończona pętla utrzymywałaby stan wygaszenia ledów do momentu zerwania komunikacji między nadajnikiem i odbiornikiem, co wyzwalałoby fale "światełek".

    Tu pojawia się mój problem. Nie umiem sformułować tej funkcji, bo jak mogę opisać " zerwanie łączności" skoro diodaIR generuje zmienne wartości...
    Myślałem też, że uda mi się zrobić to na zasadzie odczytu woltażu z nóżki OUT w odbiorniku ale wahania napięcia są za niskie.
    Ostatecznie metodą prób i błędów napisałem taki prosty program. Jak można się domyślać jest dość zawodny.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wcześniejsze podpowiedzi były bardzo pomocne, za co jeszcze raz dziękuję ! Macie jakieś porady, które mnie pokierują ?
    Z góry dzięki :)