122-Эффектор с выходом на умную ленту WS2812

Автор: | 14.10.2015

После переноса старого Эффектора на платформу Arduino (ATmega328P) стало возможно развивать проект дальше. И вот теперь к Эффектору я подключил умную ленту (NeoPixels) WS2812.
При этом новый Эффектор WS2812 не просто выводит свои эффекты на умную ленту вместо обычных светодиодов, но еще и обзавелся внушительным количеством нового функционала.

Новые плюшки:
— переделан алгоритм формирования уровней, теперь яркость каналов имеет 255 градаций (по сравнению с 8 в предыдущем варианте)

— переделаны встроенные эффекты, теперь они стали плавней
— количество встроенных эффектов увеличено с 8 до 16.

Правда из программы управления Эффектор-12 доступны, как и в предыдущем варианте, только 8 (не стал переделывать программу, дабы осталась совместимость со всеми вариантами Эффекторов), но с самого Эффектора и пульта можно переключать все 16

— как и в предыдущем Эффекторе осталось управление от ИК-пульта, но добавились новые команды управления, связанные с умной лентой
— так как умная лента цветная, то для формирования разных цветов от монохромных сигналов уровня каналов, были задействованы палитры цветов. Можно выбрать одну из 8 палитр (включая динамическую палитру переливающихся цветов)
— теперь Эффектор может быть участником сети ЗиЧип как сателлит

Эффектор может выдавать информацию о каналах для других сателлитов или управляться другим устройством в сети. Этим я планирую воспользоваться для апдейта моей супергирлянды, подружив ее с программой Эффектор 12 (об этом будет отдельная статья)

— количество отображаемых пикселей на умной ленте может быть произвольным, вплоть до 255 пикселей
— можно регулировать общую яркость ленты
— рисунок 12 каналов не просто располагается на 12 пикселях ленты, а может быть масштабирован (растянут) на любое количество пикселей
— рисунок на ленте длинней чем12 пикселей циклически повторяется
— большинство формируемых эффектов являются циклическими и на ленте создается непрерывная картинка эффекта (невозможно определить границы области эффекта)
— для не циклических эффектов предусмотрен зеркальный вариант повторения каналов, что создает непрерывную картинку и в этом случае
— рисунок по ленте можно сдвигать на произвольное количество пикселей
— линии управления (те, к которым подключены кнопки) реализованы по принципу «монтажного ИЛИ» — это значит, что, управляя устройством посредством пульта, можно получать на этих линиях сигналы управления (прижатия к земле) которые можно использовать, например, для управления своими устройствами.

 

Как это выглядит вживую.

 

Как видно на видео, по сравнению с предыдущим Arduffector-ом, у которого все эффекты стремительные и резкие, новый Эффектор выдает плавную и неспешную картинку эффектов. Вообще, эта модификация Эффектора прошла у меня под девизом «Smooth».

 

Сборка

Так как устройство работает на готовой плате Arduino Nano (или Uno), собирать/паять ничего особо и не придется. Достаточно подключить к Ардуине умную ленту (к выводу 13), залить прошивку (через стандартный ардуиновский USB шнур) и устройство заработает.

Если у Вас количество пикселей WS2812 не превышает 2-3 десятка, то и блока питания отдельного не понадобится – все будет работать от USB-порта. Если лента длинная — USB-порт не сможет обеспечить нужный ток. В этом случае понадобится внешний мощный блок питания 5 вольт.

Для демонстрационного ролика на Ютубе я собрал на макетке необходимый мне минимум и уложил ленту в пластиковый кабельный канал (он подсвечиваясь изнутри создает связную картинку скрывая свечение отдельных пикселей).

Если хотите получить от устройства большего – добавляете переменные резисторы, кнопки и TSOP т.д.

Ленту на пробу мне предоставил магазин DiyLab.com.ua Если Вам понравится устройство и Вы захотите его повторить, то ленту в Украине можно приобрести в этом-же магазине — ссылка на ленты. Для России ее можно приобрести еще у одного моего партнера TIXER.RU (обещались в ближайшее время пополнить ассортимент).

 

Описание работы

Работает устройство подобно своему предшественнику, но есть и нововведения. Пройдусь по органам управления.
Кнопки:
– 0 All Off – отключает все эффекты и гасит ленту
– 1 EE-series – запускает последовательность эффектов сохраненных в EEPROM (их всего 4 и их можно изменять из программы Эффектор-12)
– 2 Flash-series — запускает случайную последовательность эффектов встроенных в устройство (их 16, изменить их нельзя, период смены эффекта 10 секунд)
– 3 Next – запускает следующий эффект, при этом он остается работать постоянно, кроме того, после перезапуска Эффектора этот эффект продолжит работать
– 4 strip_Mirror – при удержании на «земле» этой линии, 12 каналов Эффектора начинают располагаться на ленте переодично-зеркально (т.е. A-L,L-A,A-L,…), вместо периодичного расположения по умолчанию (т.е. A-L,A-L,A-L,…)
– 5 strip_R, 6 strip_G, 7 strip_B – эти три линии задают текущую палитру, в которой отображается рисунок эффектов на ленте

 

в варианте «радуга» цвет постоянно циклически меняется

– 8 strip_IR Out — при удержании этой линии прижатой к «земле» начинают передаваться в ИК-сеть (излучатель IR-LED) информация о состоянии каналов (в отдельной статье об этом будет подробней).

 

Новым способом управления в этом устройстве являются аналоговые входа (АЦП). Посредством напряжения на них (в пределах 0 – 5 вольт) можно изменять картинку, отображаемую на ленте. Линии АЦП подтянуты к 5 вольтам, то есть если к линии ничего не подключено, устройство воспринимает это как максимальный уровень.

strip_Pixels Number – количество пикселей в ленте, воспроизводящих картинку (5 вольт – 255шт., 0 – 0)
strip_Scale – масштабирование картинки на ленте (5 вольт – масштаб 1канал:1пиксель, 0 – на всей ленте проецируется 1 канал)
strip_Offset – смещение рисунка по ленте
strip_Bright – общая яркость свечения ленты (5 вольт – максимум, 0 – минимум)

Управление посредством уровня напряжения открывает новые возможности использования устройства. Например, если подключить к входу strip_Pixels Number аналоговый сигнал с усилителя, то мы получим линейку-индикатор уровня. Еще, задействовав палитру огня и подключив к strip_Bright сигнал с градусника можно визуализировать температуру и т.д.

 

Управление устройством посредством бытового пульта.

Для управления устройством подойдет любой бытовой пульт (возможно, будут проблемы со специфическими пультами с обратной связью, например, как у пульта от кондиционера).

Для изучения кнопок необходимо:
1 –нажать (и удерживать)  кнопку «Learn»
2 – сбросить Ардуину штанной кнопкой сброса (при этом индикаторный светодиод LED должен несколько раз моргнуть)
3 – отпустить кнопку «Learn».

Из-за того, что в данном алгоритме невозможно организовать подавление дребезга контактов кнопки «Learn», нужно контролировать момент отпускания кнопки. Если в этот момент моргнет индикаторный светодиод LED, то процедуру обучения нужно начать заново (дребезг контактов создает сигнал подобный сигналу пульта, который и запоминается как первая кнопка)

4 – последовательно нажать на пульту 9 кнопок в очередности функций (кнопок устройства 0 All Off  …  8 strip_IR Out)
5 – после этого устройство автоматически начинает работать в штатном режиме

Каждое нажатие кнопки на пульте будет подтверждаться индикаторным светодиодом.

Если какая либо кнопка не нужна в устройстве (например, 8 strip_IR Out советую пока не задействовать), то в процессе ее изучения нужно нажимать ранее изученную клавишу.

Как я уже писал выше, новой особенностью этого устройства является то, что входа управления для кнопок, одновременно являются еще и выходами, если управление осуществляется от пульта. При нажатии на кнопку пульта, соответствующая линия управления будет прижата к земле. Это можно использовать для контроля нажатий кнопок пульта или управления Вашими устройствами. Линии от «0 All Off» до «3 Next» при нажатии кнопок на пульту будут прижаты к земле кратковременно, а линии от  «4 strip_Mirror» до «8 strip_IR Out»  работают как триггер (раз нажал – прижалась, еще раз нажал – отпустилась)

 

Управление устройством посредством программы Эффектор-12.

Несмотря не значительные изменения, устройство осталось совместимым с программой Эффектор-12 (за исключением некоторых нюансов, связанных с палитрами и дополнительным функционалом). Встроенный в Ардуину USB-UART, позволяет без каких либо проблем, подключить устройство к компьютеру и управлять им. Напомню, что программа управления умеет управлять каналами и эффектами устройства в ручном режиме, визуализировать музыку (с возможностью самостоятельно создавать различные способы визуализации), выполнять различные действия по времени и т.д. Подробней читайте в соответствующей статье.

 

122-Effector-WS2812.zip - Файлы для сборки устройства

_

(Visited 22 834 times, 3 visits today)

122-Эффектор с выходом на умную ленту WS2812: 186 комментариев

  1. vpashko

    Спасибо за новую статейку, собственно вопрос, на Меге 8 если прошить отдельно то заработает?

  2. GetChiper Автор записи

    Много чего задействовано из функционала чего в меге8 нет — без кардинальной переделки не обойтись.

  3. ON-OFF

    Супер! А для меги2560 есть какие-то нюансы?

  4. GetChiper Автор записи

    Если Вы про Ардуину, то программа написана не на родном скетче — это отдельная прошивка которую нужно залить в МК ардуины. И прошивка именно под ATmega328.

    Если Вы про отдельный МК мега2560 — то это слишком избыточно (вообще программа не занимает и 20% памяти меги328)

  5. ON-OFF

    Для Ардуины, возможно для неё переписать, уж больно охота повторить да и поиграться с WS2812, другой не имею.

  6. GetChiper Автор записи

    Скетч для Ардуины я не напишу (да и боюсь без ассемблера такое не реализовать). Может все таки заиметь Ардуину Нано? На ней еще устройства будут в блоге.

  7. ON-OFF

    http://www.live-leds.de мучался с этим, так и не запустил…А нано заказал уже. Спасибо, интересный портал!

  8. vpashko

    Залил прошивку,подсоединил одну ленту — RGB Светодиодная лента WS2812B 60LED / m но лента мигает и нет никакого эффекта перебора цветов, на ардуино Уно светодиод быстро мерцает???

  9. GetChiper Автор записи

    Попробуй кроме ленты ничего не подключать к ардуине. Как на первой минимальной схеме.

    Сколько пикселей в ленте?
    Запитано от USB?

  10. vpashko

    В ленте 60 пикселей, ничего больше не подключал, питание отдельно

  11. GetChiper Автор записи

    Тоесть лента запитана от отдельного блока питания?
    Напряжение на ленте и Ардуине когда они работают какое?
    Попробуйте ленту (вход DIN) подключить через резистор 500 — 1 кОм. Поставить по питанию конденсатор побольше.

  12. vpashko

    Спасибо за подсказки, все получилось, я минус от блока питания соединил с минусом Ардуино и все заработало.Ух и красота.

  13. vpashko

    На скоко я понял в демонстрационном варианте пару тройку эффектов, а сама прелесть будит с пультом, кнопками и переменниками?

  14. GetChiper Автор записи

    Да, кнопочками и переменниками можно получить доступ ко всему функционалу.

  15. vpashko

    Протестировал эффектор с пульта и с кнопками, на мой взгляд кнопками как-то так но не так, при нажатии на кнопки (на мой взгляд) не всегда изменяется тот или иной режим про что не скажешь про пульт. С пульта все четко включается и выключается. Вопрос по кнопке — 0 All Off = При нажатии включается белый цвет и через несколько секунд лента выключается и через несколько секунд опять белый цвет и так по кругу пока не нажмешь любую кнопку, такой режим и должен быть??? И просьба к автору — побольше встроенных эффектов с 16 и по максимуму, особо на этой ленте впечатляют эффекты тогда,когда цвет бежит в одну сторону и в другую.

  16. GetChiper Автор записи

    0 All Off — должен погасить ленту (все пиксели). по новой эффекты должны работать только при повторном выборе какой либо программы. Буду смотреть что не так.
    Эффекты не проблема добавлять — проблема их выдумывать :). Как буду что-то делать постараюсь добавить новых.

  17. Jack

    Я так понимаю с WS2811 работать не будет?

  18. GetChiper Автор записи

    Нет, не будет. Но я буду делать модификацию с выходом для WS2811.

  19. Jack

    @GetChiper
    Понятно, а в этом году сделаете или нет?

  20. GetChiper Автор записи

    Постараюсь.

  21. Jack

    @GetChiper
    Ого, оперативно! Спасибо! Жаль у меня тоже таких светодиодов нет. Только неделю назад заказал, когда придут проверю))

  22. vpashko

    Ну вот, наконец то и до меня очередь дошла, а то я думал что мне не повезет. Вообщем после очередного подключения Ардуино в комп у меня появилась надпись: «avrdude: stk500_getsync(): not in sync: resp=0x00». После разных нажиманий, выниманий и танцами с бубном я все таки реанимировал Ардуино и записал ее как UNO. Помог этот http://www.fischl.de/usbasp/ программатор, которым я давно уже пользуюсь. Ребят, эта ошибка выскакивает у 99,9%, так что соберите один раз программатор и вы забудете что такое покупать новую Ардуино или МК. Удачи.

  23. Andry Smart

    эх жаль нет входа для аналогового сигнала. что бы под музыку эффекты менялись.

    надо еще одно устройство сделать. с компрессором сигнала и выходом UART для управления эффектором под музыку

  24. GetChiper Автор записи

    Планирую во втором эффекторе сделать аудио вход. В этом уже точно не стану делать.

  25. Andry Smart

    анализировать аудио сигнал разве потянет аврка. она и так нагружена?

  26. GetChiper Автор записи

    Нужно пробовать. если не замахиваться на большое количество полос спектра, то все может получится.
    По крайней мере данная прошивка непрерывно снимает данные со всех каналов АЦП и вроде это не мешает выводу на ленту (хотя, должен согласится, протокол вывода на ленту довольно требователен по времени и это добавляет трудностей)

  27. vpashko

    GetChiper, ну вы хоть в этом эффекторе увеличите эффекты с 16 и по максимуму…

  28. GetChiper Автор записи

    По максимуму — это где-то под 1000 эффектов (описание эффекта занимает 32 байта), оно Вам надо столько? 🙂

    А если серьезно, не хотите заняться конструированием эффектов сами? Я бы их потом добавил в программу.
    В программе подробно описано как создается эффект — разобраться не сложно.

  29. vpashko

    Да, у меня есть желание добавить эффекты. На сколько я понял мои действия такие:
    1.Открыть файл F_table.alg программой Algorithm Builder 5.44.
    2.В этом файле уже написано 16 эффектов, по подобию продолжать писать свои.
    3.Как только в моих мозгах закончатся варианты, файлик (F_table.alg) как-то (Нова почта, Укрпочта, SMS…..) отправить Вам для добавления в программу. И все???
    Ну и как всегда вопрос:
    1. Как я увижу в железе то, что я напишу?

  30. GetChiper Автор записи

    Да, последовательность почти правильная 🙂

    — Нужно запустить Algorithm Builder 5.44 (http://algrom.net/russian.html)
    — Открыть проект (Ctrl+O). При открытии,в папке проекта нужно выбрать единственный файл который там будет виден — ошибиться невозможно.
    — при открытии проекта откроются и все модули связанные с ним (в том числе и файл F_table.alg — модуль описания эффектов)
    — открыть вкладку F_table
    — и править эффекты (там все я подробно описал как оно работает). лучше прямо взамен тех что есть — легче их проверять

    Для того чтобы посмотреть что получается — нужно просто откомпилировать проект (Ctrl+F9). После компиляции прошить МК HEX-файлом (он появится/обновится в папке проекта).

    Файлик F_table.alg можно просто скинуть на почту (http://www.getchip.net/o-proekte/)

  31. vpashko

    1.Файл HEX после компиляции появится в папке effector_ws2812_source?
    2.Править эффекты понять можно, а от как написать что б ну скажем зеленый цвет от первого светика пробежал до конца ленты (первый светик загорелся и потух, второй загорелся и потух и так до конца, что-то типа бегущий огонь)?И я так понимаю что первый светик тот, который ближе к Ардуино?, и как написать что б из последнего к первому цвет побежал? Подскажите на примере, а дальше я думаю алгоритм будит понятен.

  32. GetChiper Автор записи

    1 — да

    2:
    — цветов как таковых в программе эффектов вообще нет — есть только уровни (0 — 255). Раскрашиваются в цвета пиксели (в зависимости от уровня) при помощи палитр.
    — в программе применен метод описания эффектов который в принципе не позволяет задать последовательность загорания светодиодов. способ позволяет задать начальные уровни всех каналов и набор семплов-эффектов которые работая совместно будут создавать картинку эффектов.
    — например, чтобы заставить бегать один пиксель (туда-сюда случайным образом), нужно в начальных состояниях каналов прописать одному из каналов уровень 255, остальным 0 (засветить один пиксель) и активировать семпл Slide (задав ему не нулевое значение). значение заданное для семпла — есть интенсивность его работы (чем меньше значение — там быстрей работает семпл)

  33. Jack

    Так вопрос на будущее, когда этот эффектор подружится с супергирляндой то в конструкции супергирлянды что-то изменится да?

  34. GetChiper Автор записи

    В самой конструкции супергирлянды ничего не меняется. Нужно будет только прошить новую прошивку.

    Я специально ставил за цель не трогать железо.

  35. Valeriy

    Евгений,здравствуйте.Лента WS2812b 60шт/м-2етра.Питание-имп.Б/Пит-5в/3а.
    Arduino Nano V3.0-зарядка 9в/600мА.Надо делать преобразователь уровней
    согласно пост119 и по какой схеме.
    На вход VIN Arduino подаю 9в.Откуда брать+5в для схемы[регуляторы…]
    Спасибо за ответ.

  36. GetChiper Автор записи

    Если есть источник питания 5 вольт, то и ардуину и ленту можно запитать от него. Но даже если ардуина запитана от 9 вольт, преобразователь не нужен — все выходные сигналы с ардуины все равно будут до 5ти вольт (сам МК ардуины запитан от внутреннего регулятора напряжения 5 вольт).

  37. Egen_M

    GetChiper :
    Планирую во втором эффекторе сделать аудио вход. В этом уже точно не стану делать.

    Хорошо бы если этот вход был микрофонным. Или в схему был бы встроен микрофон, как на китайской коробочке http://ru.aliexpress.com/item/LED-strip-Music-controller-Music-IR-RGB-Controller-for-WS2811-or-WS2812-Sound-activated-controller-free/32265694592.html Тогда не нужно будет заморачиваться с подключением к аудио выходу. Заранее спасибо!

  38. Valeriy

    Пост122.Какой тип ИК диода в схеме.Кнопки(0-8) с фиксацией или без.

  39. GetChiper Автор записи

    Кнопки 0-3 без фиксации
    Остальные с фиксацией. Если установить TSOP кнопок вообще можно не ставить.
    Требований к ИК светодиоду особых нет. В идеале его нужно поставить по даташиту на конкретный TSOP (там есть рекомендации), но по факту сойдет любой.

  40. Denis147

    Добрый день! А как сделать так, чтобы это устройство управляло двумя отрезками лент, светодиодов на 200 каждый? Паралельно можно подключить вторую ленту?

  41. GetChiper Автор записи

    Можно включить параллельно. только каждый вход DIN со своим резистором по 300 Ом

  42. vpashko

    Вопрос. Если управлять лентой через пульт, IR LED обязательно нужен? или достаточно TSOP.

  43. GetChiper Автор записи

    ИК-светодиод нужен только если нужно передавать информацию во-вне. для ленты он не нужен

  44. ON-OFF

    Приехала нано, сажусь за паяльник, вопрос по TSOP-у, имею 4-е нонейма, как с ними определиться, с цоколёвкой и частотой 36 или 38?

  45. GetChiper Автор записи

    Одинаково. Просто будет немного разница в чувствительности, но не критично.

  46. ON-OFF

    Спасибо за девайс! Думаю НГ будет Эффекторно!!!

  47. Archa

    Добрый день. Все работает,супер. Вот только в моей ленте из 300пикселей работают только 255,45 последние молчат, лента целая. Я, понял, что это програмное ограничение? когда подаю управляющий сигнал не в начало ленты а скажем на десятый пиксель, то вся линейка 255 пикселей сдвигается по ленте, молчат в конце 30 пикселей, ну и конечно первые 10.

  48. GetChiper Автор записи

    Да, 255 — это ограничение программное.
    В ближайшее время не планирую расширять диапазон (хотя это возможно)
    Как вариант, можно параллелить куски ленты (рисунок то все равно повторяется — стыки даже не будут заметны)

Добавить комментарий