YACTL: Ещё одна ёлочная гирлянда

    Почему?


    Перед новым годом многие наряжают и украшают ёлки всевозможными игрушками-побрякушками и, конечно, световой гирляндой.
    На Хабре уже недавно было несколько вариаций на тему самодельных гирлянд, но их меньше 100500 и поэтому я подумал, что этого явно мало. Дабы не прогневать дух Нового Года я приношу свой вариант ёлочной гирлянды в подарок этому великому духу.

    Так же этот проект задумывался как часть начального обучения для своего сына в стиле «я делаю и рассказываю что, как и почему, а сын смотрит и задаёт каверзные вопросы по теме и не очень». По этой причине я старался сделать всё как можно проще и доступнее.





    Из чего?


    Немного порывшись в своих коробках, я обнаружил несколько лент индивидуально-адресуемых RGB светодиодов. В дикой природе они имеют разные названия — WS2801, WS2811, WS2812, Neopixels и т.п.
    Главная изюминка этих лент в том, что можно управлять любым RGB светодиодом индивидуально и менять RGB цветовые составляющие и яркость.

    Различия между лентами есть электрические. Если очень грубо, то их можно описать примерно так:
    WS2801 — самая первая версия. Данные передаются по двум сигнальным проводам — DATA и CLOCK. Питание у них обычно 12 вольт. RGB светодиод подключен отдельно.
    WS2811 — более новая версия. Данные передаются по одному проводу — DATA. Сигнала CLOCK нет, так как WS2811 контроллер сам считает временные интервалы и надо им следовать в своём коде. Обычно питание 5 вольт. RGB светодиод так же подключен отдельно.
    WS2812 — то же самое как WS2811, но встроен в светодиод (например, 5050), тем делает ленту более компактной и с возможным более плотным размещением светодиодов. Обычно питание 5 вольт. Микросхема-светодиод имеет 6 выводов.
    WS2812B — как WS2812, но с отличием в том, что питания для светодиодов и самой микросхемы объединено (у всех вариантов выше питание раздельное). Микросхема-светодиод имеет 4 вывода.

    Любые вариации светодиодных лент можно купить на eBay, Alibaba/AliExpress и в магазинах такого типа.

    С точки зрения программирования разница очень приятно сглажена использованием библиотеки FastLED @ GitHub. То есть, можно без особых хлопот комбинировать разные типы программируемых лент в одном проекте, чем я без стеснения и воспользовался. Сын, правда, не оценил папину находчивость и удобство библиотеки.

    У себя я нашёл три ленты: одна на базе контроллера WS2801 (25 светодиодов) и две на базе контроллера WS2811 (20 и 15 светодиодов). Итого получается 60 светодиодов щенячей радости.
    Две WS2811 я соединил вместе последовательно.

    Как уже догадался пытливый ум читателя, для управление такими светодиодными лентами нужен контроллер. Изначально я задумывал использовать плату Arduino Pro Mini из-за компактности и готовности, но в своих бездонных закромах не нашёл ни одну почему-то. Зато нашёл Teensy 3.1 (Cortex-M4 @ 72MHz, 256KB Flash, 64KB RAM). Это немножко перебор, но лучше много, чем мало.

    Так как у меня используются 12-ти и 5-ти вольтовые ленты вместе, то я запитал всю схему от 12В/1A блока питания с преобразованием в 5 вольт для питания второй ленты и платы микроконтроллера. Преобразовывал я импульсным DC-DC модулем KIS-3R33S на базе MP2307DN, которые даёт до 3A на выходе и почти не греется. Конечно, модуль можно заменить чем-то типа 7805, но надо будет позаботиться о правильном охлаждении (это порядка 1-1,5 ватта на каждые 10 светодиодов).



    Список компонентов:


    • Индивидуально-адресуемые светодиодные ленты на базе WS2801, WS2811 и т.п.
    • 12В/1A блок питания. При максимальной яркости 60 светодиодов потребляли примерно 800 мА. Я включаю их на пол-яркости и получаю 400 мА потребления
    • Модуль микроконтроллера Teensy 3.1. Так же подойдёт Arduino или другой подходящий модуль или микроконтроллер
    • DC-DC преобразователь KIS-3R33S. Тут вариантов много и всё зависит от требований питания




    Как подключить?


    Схемы практически нет, так как всё подключается довольно просто:
    Teensy 3.1 питается от 5 вольт. На этих 5 вольтах сидит WS2811 лента. На 12 вольтах сидит лента на базе WS2801.
    Лента WS2801 подключена к Teensy 3.1 так: DATA — 11, CLOCK — 13.
    Лента WS2811 подключена к Teensy 3.1 эдак: DATA — 14.



    Комок проводов и деталей был удачно запихан в коробку для хранения четырёх AA элементов. Я в таких коробках обычно собираю нечто такое простое и быстрое.



    В чём магия?


    Магия в коде, который управляет всем этим безобразием и приводит в восторг трёх-летнего сына.
    Свой код выложил на GitHub: github.com/nochkin/LightBottle (нужна библиотека github.com/FastLED/FastLED)
    В коде всё достаточно просто — псевдо-случайно выбирается цвет, в который плавно переходит светодиод и текущий цвет переходит дальше по светодиодной ленте. На ёлке смотрится как будто свет падает вниз. Или наверх если, например, перевернуть ёлку (совет сына) или сами ленты повесить наоборот (моё нерациональное предложение).

    В самом начале кода я вывел некоторые переменные для конфигурации:
    LEDS1_NUM/LEDS1_PIN — количество светодиодов и пин подключения первой ленты
    LEDS2_NUM/LEDS2_PIN — количество светодиодов и пин подключения второй ленты
    LEDS_SATURATION — максимальная цветовая насыщенность
    LEDS_BRIGHTNESS — максимальная яркость (на 60 светодиодах примерное потребление получилось 800 мА при яркости 255, 400 мА при 128 и 200 мА при 64)
    hueStep — шаг изменения цвета за один цикл
    UPDATE_DELAY — скорость «бега» цвета по ленте

    В setup() конфигурируются обе ленты, поэтому если лента одна, то можно оставить только одну строчку, которая соответствует контроллеру ленты и обнулить LEDS2_NUM.

    А мультик?


    Прикладываю видео сей поделки. Прошу прощения за телефонное качество и портретную ориентацию.


    Так же хочу передать поздравления с наступающим всем хабровчанам. Ура-ура!

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 13

      +1
      Для тех, кому совсем лень, но хочется сделать подобную гирлянду, можно взять «slow flash rgb led». Этому светодиоду нужно только питание, всё остальное он сделает сам. Получится анимация примерно как на видео, только немного медленнее изменение цвета и отсутствие синхронизации между светодиодами.
        0
        Синхронизация цвета даёт своё — это тот эффект, который я хотел. Смотрится гармонично и как одно целое.
        Просто случайно менять цвет я пробовал, но получается как-то не так.

        Зато в том случае контроллер не нужен, но тогда и нет полёта для фантазии если добавлять свои цветовые узоры.
        +4
        Какая бы ни была тривиальная схема, её все же нужно нарисовать и выложить. Это повысит процент повторяемости конструкции. Причем нарисовать схему так чтобы её можно было слепо повторить — не упускать даже очевидных мелочей.
          0
          Согласен. Набросал и добавил схему.
          0
          Russian Soviet Christmas tree? )))
            0
            Да, да. Из леса вот нарядная на праздник к нам пришла.
              –1
              Неделю постояла и на мусорке сгнила
                0
                Современная наука, нанотехнология и дядюшка Ли принесли нам искусственную ёлку и этим сделали эту шутку устаревшей.

                Кстати, есть несколько мест, где живые ёлки после праздников перерабатывают в опилки, которые можно использовать в саду, например.
            0
            Раз такое дело, задам вопрос присутствующим: если наладить выпуск универсальных драйверов для произвольных (ленты, матрицы) конфигураций WS28xx с USB интерфейсом (что решило бы проблему подключения к Raspberry Pi, например), это продавалось бы?
              0
              Во-первых, к Raspberry Pi и так можно подключать.
              А во вторых, если речь про серийное производство, то надо как-то иначе узнавать спрос. Или даже просто попробовать и смотреть по ходу, тем более, что устройство не звучит очень уж сложным, поэтому риск вылететь в трубу достаточно мал. Ведь самое главное — как продвигать, а не что изготовлять.
                0
                Можно и так, но там драйвер используется больно страшный, взводящий DMA из userspace. Мне это не нравится.
                  0
                  WS2801 имеют SPI подобный интерфейс и менее капризны чем WS281x, которым для нормальной работы необходимо достаточно четко соблюдать частоту передачи данных (800kbps). Малина так не может, ибо не в реальном времени работает, вот и приходится выкручиваться через DMA.

                  Самый интересный и действительно классный драйвер, который я видел на данный момент это – FadeCandy. 8 каналов, до 10000 светодиодов на один модуль FadeCandy, полный опенсорс (GitHub), куча примеров.
                  Ну или вот успешный проект с кикстартера BlinkyTape. Мозг – сильно минифицированный аналог Arduino Leonardo. Тоже опенсорс (GitHub)
                    0
                    Всё придумано до нас…

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое