Светодиоды WS2812B позволяют делать много интересных вещей. Здесь уже были их обзоры, я решил поделиться своей поделкой, к тому же праздники еще продолжаются. Под катом ардуинство, плата и демонстрация готового устройства
Я взял влагозащищенную версию, которая у продавца обозначается как «White 4m 60 IP67», это лента в силиконе. Пришла на катушке, в фольгированном пакетике:
На одном метре 60 светиков, залитых силиконом:
С обратной стороны двухсторонний скотч для крепления к поверхности:
Посмотрим на отдельную секцию ленты:
Видим: линии отреза по контактам, собственно контакты с двух сторон: DIN — входные данные, DO — выходные данные, +5V — плюс питания, GND — минус питания, C1 — керамический конденсатор, ну и собственно сам светодиод припаянный 4-мя контактами. Направление передачи данных указано черным треугольником.
Cами светодиоды WS2812B представляют собой сборку из микросхемы и 3-х светодиодов (красный, синий и зеленый), благодаря специальному протоколу, микросхема принимает данные только для своей сборки, остальные данные передает дальше по цепочке. Благодаря этому, каждой отдельной сборке можно передать информацию о яркости ее каждого светодиода (красного, синего и зеленого) и получить нужный цвет.
Подробно о свойствах отдельной сборки описано здесь. Я лишь отмечу, что максимально последовательно можно соединить 1024 микросхем, информация в которых может обновляться 30 раз в секунду.
Для ардуино разработана хорошая библиотека для данных сборок Adafruit_NeoPixel [wpdm_package id=’1094′]. Которая позволяет раскрашивать каждую сборку в свой цвет. Также у Adafruit есть библиотека для экранов из данных сборок и неплохие примеры использования.
Мы уже видели на этом сайте замечательные результаты творчества с применением WS2812B: аналог Ambilight/Aurea,
Мне захотелось сделать управляемую ленту в окошко с применением данной ленты. Клеить ленту будем в оконный проем, поэтому потребуется 2 метра ленты. Собрав прототип простой гирлянды и загрузив пример, идущий в комплекте с библиотекой Adafruit_NeoPixel: strandtest, я убедился что принципиально все работает. Фактически в библиотеке задается один пин контроллера который подключается ко входу Din первой сборки.
Схема:
С типовым скетчем и типовым подключением никаких проблем не возникло.
Но ведь нам требуется управлять линейкой удаленно… Вот тут и начинаются грабли.
Первым делом я решил подключить ик приемник и управлять с пульта. Собрал схему помигал светодиодом и подключил ленту… Реакции не было… Точнее я подключив консоль получал случайного вида коды кнопок, нажав 10 раз на одну кнопку и увидев только разные коды, я задумался. Первая мысль была помеха по питанию, ведь кроме включения ленты ничего не менялось. Прочитал на adafruit.com о рекомендации впаять на вход ленты электролит напряжением 6.3 Вольта и емкостью не меньше 1000 мкФ, конечно же сразу это сделал, результат нулевой… Начал копать код библиотеки Adafruit_NeoPixel и обнаружил, что при передаче данных на светодиоды библиотека полностью блокирует прерывания. Отключение блокировки привело к тому что лента вела себя очень странно, прерывания происходили на любой мусор попавший на вход ик приемника…
Расстроившись в неудаче при такой простой схеме, начал думать про второй контроллер, отвечающий за прием ик сигналов и управляющий основным… Если кому то хочется сделать ик-управляемую ленту на WS2812B, то это единственный разумный вариант. Конечно есть еще и экзотические, например, вводить промежутки времени когда гирлянда не меняет свое состояние и принимать в них ик-сигналы — но это уже совсем рогатый метод…
В итоге принято решение использовать bluetooth и с телефона управлять гирляндой, благо несколько штучек модулей HC-06 у меня лежали без дела. Для индикации текущего режима работы гирлянды решил использовать дисплей на TM1637. Итоговая схема:
Основная проблема, которая возникла с кодом, это то что при сменах состояния используется delay(), который не дает возможность вмешаться в процесс кроме как прерываниями, но… прерывания то у нас отключены… Принято решение переписать эффекты используя хранение информации о текущем состоянии гирлянды и смены его по таймингу. Для этого циклы преобразованы в переходы на следующее состояние, и добавлены признаки смены режимов. Пришлось задуматься стоит ли выкладывать кривой экспериментальный код, но желание облегчить кому-то его творческий процесс пересилило — вот код (там абсолютно экспериментальный код, использование на свой страх и риск):
[wpdm_package id=’1098′]
Теперь про управление, конечно написать свое красивое приложение заманчивая идея, но времени на это не было и я воспользовался приложением для android — BluetoothSPP
[wpdm_package id=’1100′]
В режиме кнопок настроил нужные коды и стало все хорошо. Есть возможность подписать каждой кнопке посылаемый код и обозначение. Большего мне и не было нужно. Все эффекты пронумеровал получилось 10 различных, 10 кнопок задействованы под эффекты, и 1 кнопка на то чтобы включить последовательную смену эффектов.
Bluetooth модуль конфигуририровал с помощью программки btinit.exe, очень удобно, можно изменить название устройства при поиске и скорость:
HC-06 следует подключить к компьютеру с помощью стандартного USB-TTL ковертора.
Подключив к лабораторному блоку питания, выяснил, что моя лента (2 метра) потребляет в пике, когда все включено 2.1 А при напряжении 5В. Поставил блок питания на 3А, купленный в офлайне:
неделя непрерывной работы, проблем не выявила.
Ну и конечно мне хотелось, чтобы готовое устройство не выглядело клубком проводов в коробке из под обуви. Тем более, у меня имелись корпуса со стеклянной крышечкой подходящим размером:
Делаем печатную плату в программе Sprint Layout, ИК приемник, я все таки оставил, так как возможно иное применение коробочки, либо как-то удастся разрешить проблему с ним:
Процесс изготовления методом ЛУТ я описывал ранее в обзоре шарового крана.
Вот так выглядела плата с нанесением тонера:
Травление:
Собираем устройство:
Для подключения гирлянды я использовал разъем для наушников, по нему же подается питание на устройство. Провод для подключения блока питания к ленте я использовал ПВС 2×0.5, а для подключения устройства к ленте телефонный кабель 4 жилы, землю сделал из 2-х жил.
Итоговое устройство:
Ну и его эффекты:
Конечно лучше всего смотреть гирлянду на видео:
Лентой и полученным результатом все довольны, работает больше недели непрерывно.
Файл платы для Sprint Layout:
[wpdm_package id=’1072′]
На этом заканчиваю. Спасибо тем кто дочитал до конца, надеюсь кому-то информация окажется полезной! Всем новогоднего настроения!