RSS блога
Подписка
Новогодняя снежинка на ws2812 "Snowflake"
Астрологи объявили предновогодние недели. Количество обзоров на самодельные гирлянды увеличилось вдвое. Не планировал присоединяться к движению, но, похваставшись в комментах и нахватав плюсов, придётся оправдывать. Не уверен, что много кто захочет повторить, но поглядеть, надеюсь, будет интересно. В конце концов, сделать это новогоднее украшение меня смотивировали, не в последнюю очередь, здешние обзоры прошлых лет. Значит не зря оно.
Ничего принципиально нового я, конечно, не придумал. Светодиодная лента с адресными диодами, которыми можно управлять индивидуально, появилась уже достаточно давно. Ну и идея делать на её основе новогодние снежинки была уже давно успешно реализована, в том числе и тут, на mysku. Акрил и лазерная резка от sav13, 3D печать от An_private, для примера. Но повторять готовые конструкции не так интересно, как изобретать свои велосипеды. Авторам же спасибо за вдохновение и мотивацию. Без них лента у меня так и лежала бы неиспользованной. А мне нечем было бы похвастаться.
Начал я с «комнатной» снежинки диаметром примерно 24 см. Делал из расчёта использовать 1 метр ленты с низкой плотностью, всего 30 диодов на метр. У снежинки 6 лучей, по 5 светиков на каждый. Но потом добавил ещё один диод, 31й, в центр. Не очень удобно, но так получалось гораздо симпатичнее. Вживую выглядит лучше, камера не вытягивает диапазон яркостей и пересвечивает, делает белыми участки рядом с диодами.
Корпус печатный. Нарисовал в Solid Works, не потому, что он такой сложный. Наоборот, я тогда только изучал эту систему, вот и тренировался на простеньких моделях. Каждый луч и крышка к нему печатаются отдельно, напечатать снежинку целиком не хватает области печати 20х20 см моего принтера. Да и частями печатать проще, как по мне. Лучи потом приклеиваются к центральной части. Печатал белым PETG, при тонком слое он хорошо работает рассеивателем, яркости диодов хватает с запасом.
Паять её довольно муторно и долго, много проводочков нужно отмерить нужной длины, зачистить и припаять. Удобно делать разными цветами, питание красным и черным, желтым — сигнал управления. Питание для боковых диодов можно брать в любой удобной точке основной ветви, старался так, чтобы меньше перекрещивались провода. Главное соединить питание всех трех отрезков ленты на каждом из 6 лучей. Сигнальный канал же соединяется в определенном порядке, выход одного куска с началом следующего. Вначале основная ветвь, потом две боковые и обратно, к следующему лучу. Аккуратнее всего разводка получается, если делать как на нижнем левом луче.
В центре собираем красно-черный хоровод. Самый первый луч начинается с центрального диода.
По началу я повозился, подбирая наиболее удачную топологию проводов, но потом дело пошло побыстрее. В итоге я осилил 3 такие снежинки. Две из них потом украшали кафешку, пока пандемия её не убила.
В принципе, 31 диод — это немного, должно хватить и классической ардуины (ATmega168). Но я выбрал микроконтроллер stm32f030f4p6. Он тогда стоил вообще копейки, 69 центов, поэтому я его купил пару десятков и использовал в различных поделках. 16КБ под прошивку, 4КБ памяти, сказка за такие деньги. А при его богатой периферии, можно ещё и всё управление лентой переложить на железо. Рассчитал в софте цвета диодов для следующего кадра, подготовил всё в буфере, дал команду железу — и оно само отправляет это всё ленте, а пока отправляется, можно уже считать следующий кадр. Для трех десятков диодов не так уж нужно, но очень удобно. Минус такого подхода только один, из-за особенности протокола ws2812b, под буфер требуется много памяти, по 24 байта на пиксель (по байту на бит цвета). Так получается из-за протокола, используемого WS2812, если его эмулировать через UART или timer->dma->pwm. До сотни диодов хватает 4 килобайт оперативки, а вот 150 уже впритык, не останется на расчеты эффектов. Код управления светодиодами я взял готовый, было лень писать самому. Из этого ebrombaugh.studionebula.com/embedded/lightshow/index.html проекта. Платку под микроконтроллер взял из того, что было под рукой. Это макетка сразу под esp8266 и stm32f030. Делал для себя. Может и стоит заменить на покомпактнее вариант, но работает — не трогай. Оставлю как есть. С обратной стороны выглядит так, простите за неотмытый флюс, термоклей, грязный кабель… диайвай с изнанки — он такой:
Если захотите повторить, то можно использовать платку от китайцев, вот таких полно на али, цена в районе 3 долларов. Прошивается через UART или дешевым программатором ST-Link.
ШИМ на видео, особенно на синем цвете, это только на камере.
Такая снежинка хорошо смотрится в помещении, но, когда я повесил её на окно, посмотрел с улицы и понял, что на высоте 12 этажа она выглядит слегка переливающимся пятнышком. Так не интересно. Ну и на следующий год решил запилить снежинку побольше. Чтобы она выглядела вот так (на два окна правее как раз видна точка маленькой снежинки):
На неё ушло ровно 5 метров ленты, с той же плотностью 30 диодов на метр. Это самый дешевый вариант адресной ленты. В качестве каркаса — алюминиевая полоса из строймага. Я взял 20*2 мм, три штуки по 2 метра, метровый кусок остался. В Леруа мне сейчас показывает цену 122 рубля за двухметровую, 75р за метровую.
Соединители и центральную шайбу печатаем на принтере. Нет принтера? Какой же диайвай без принтера то? Шучу. Можно взять полосу с запасом, сложить внахлест и скрутить болтами с боков от ленты. А центральную часть выпилить из фанеры. Или сделать сурово, сварить всё из стальной полосы. Лишь бы такая снежинка не упала на кого-нибудь. Конструкция простая, точность особая не нужна, проблем быть не должно. Хотя, мне кажется, сейчас не так сложно найти кого-нибудь рядом, кто напечатает. Чертил в OpenSCAD, если что, должно быть легко подправить под другую ширину полосы. Соединение с обратной стороны:
Центральную часть я решил сделать разборной. На случай если надо будет куда-то убрать или перевезти снежинку. Пока не пригодилась, так и провисела на балконе, пока летом на жаре термоклей не размяк и она не свалилась вниз. Снежинка, что с неё взять, она и должна падать, работа у них такая. Но выжила, даже без повреждений.
Для возможности разъединения проводов припаял обычные штырьки 2.54мм. 4 штырька на каждый луч. Три пина припаиваются прямо к ленте, земля, данные, +5 вольт. А на четвертый возвращается провод данных с дальнего конца луча. В центре это соединяется вот таким пауком (и да, я знаю, что у паука 8 лап, мой просто жертва беспощадного диайвая):
В каждом луче схема соединения аналогична маленькой снежинке. Что радует, паять тут столько же, хоть и размер в 5 раз больше. Над лентой тут нет крышки-рассеивателя, для любования с большого расстояния она и не требуется, светодиоды слепят только вблизи. Да и красоту особо наводить не требуется, с улицы не видно, далеко, а изнутри помещения изнанка вполне приличная. Так что я повода фиксировал термоклеем, только чтобы они не попадали в свет диодов, не перекрывали их.
Попробовал взять «мозги» от мелкой снежинки и подключить к новой. Тут-то мне памяти и перестало хватать. Нет, впихнуться, я уверен, было можно. В оптимизацию я могу и умею. Я, к примеру, делал LED куб 8*8*8 диодов на ATmega32U4. Таких кубиков в инете полно. Вот только мой был ещё и с градациями яркости, динамическая индикация слоев одновременно с ШИМом отдельных диодов. Выглядит гораздо интереснее. (Видео плохо передаёт яркость, но примерно понять можно: youtu.be/tFre3wmwgtU). Так вот, в этот раз я заленился и решил просто взять что-то побольше. АТмеги памятью не славятся. STM32F100 с оперативкой более 8КБ идут в больших корпусах, что тоже какой-то оверинжиниринг, учитывая что нужен всего один пин для управления лентой. Да и цены на них росли ещё до силиконового кризиса, не говоря уж о дефиците сейчас. Наверное, STM32F103Cx, который стоит на BluePill, подошел бы, 20КБ памяти, 72МГц. Но я в итоге выбрал esp8266 в виде модуля ESP-07. Оверинжиниринг, скажете? Ну, вроде как да. Зато дешево, компактно, много памяти. И у меня их в запасе больше сотни, для меня — рабочая лошадка. Использую их в приводах штор LazyRolls. Что касается лишнего Wi-Fi, да пусть будет, хоть и не нужен. Пока что я его не использую. Но можно и задействовать, использовать как вход для цветомузыки. Или для обновления прошивки, если потом захочется добавлять эффектов, не снимая с окна. И чем ещё еспшки мне нравятся, они проще новичкам. Я не думал, что снежинку буду предлагать для повторения, но если вдруг кто захочет, ему будет проще, всякие NodeMCU широко распространены, код можно по своему вкусу быстренько подправить в Arduino IDE, которая для новичка гораздо проще, чем ставить Keil или PlatformIO, которые использовал я. А библиотека FastLED, хоть её иногда критикуют за монструозность, поддерживает разные типы управляемых лент, что делает прошивку более универсальной.
Что мне не нравится в тех проектах, что я видел, так это анимация. Я пробовал и WLED, и прошивку для ёлки от Jason Coon (Evil Genius Labs). Нет, эффекты красивые, тут вопросов нет. Но вот смена эффектов обычно происходит мгновенно, вот были «искорки», вдруг бац, уже радуга. Кому как, а мне такой вариант не по вкусу. Мне хотелось сделать так, чтобы один эффект плавно переходил в другой. Яркость предыдущего эффекта снижается, а следующего — нарастает. При этом какое-то время оба эффекта движутся по своим программам одновременно. Это требует несколько больших вычислительных мощностей. Зато перетекание одного эффекта в другой само по себе даёт причудливые эффекты, иногда удачные, иногда и нет. Но разнообразия добавляет. Вот что у меня получилось. Видео снято изнутри. Наледь на стеклах балкона хорошо рассеивает диоды и их так проще заснять. Да и зима на улице не располагает к съёмкам дрожащими руками на большом зуме.
Цвета для анимации считаются в HSV координатах. Т.е. тон, насыщенность, яркость. Так гораздо проще делать яркие эффекты. К примеру, плавный переход между красным и голубым проходит по всем оттенкам радуги, через оранжевый, желтый, зеленый. Достаточно только плавно менять значение цвета H, оставляя насыщенность S и яркость V в максимуме. В RGB такое считать очень неудобно. Перед выводом ещё желательно немного скорректировать гамму. Глаз воспринимает яркость нелинейно. Половинная яркость диода выглядит всего лишь чуть-чуть менее яркой. Я в мелкой снежинке сделал простейшую коррекцию по степеням двойки, рассчитанная яркость в диапазоне 0-255 превращается в фиксированные десять уровней: 0, 1, 2, 4, 8, 16, 32, 64, 128, 255. Неидеально, но на практике даёт вполне приличный результат. На украшении такое упрощение совсем незаметно. В библиотеке FastLED гамма-коррекция уже есть, стал использовать её.
Палитры для эффектов задаются из 6 цветов в HSV. Мне этого представляется достаточным, учитывая что промежутки между ними интерполируются. Можно задать как радугу, так и палитры из трех и двух цветов, повторяя нужные цвета. Например, белый, синий и красный для флага. Или палитра «кока-кола» из чистых красного и белого. Камрадам из РБ может понравится, но будьте осторожны, если решите повторить.
Эффекты считаются в двухмерных координатах. Для каждого светодиода в прошивке рассчитаны координаты, по ним и определяется цвет в каждый момент времени для каждого светодиода. Такой подход офигителен тем, что прошивку легко модифицировать под любое число диодов, расположенных произвольным образом. Достаточно только рассчитать (ручками, линейкой или в какой-нибудь программе) координаты светиков в пространстве. Можно хоть матрицу сделать, хоть надпись, хоть снежинку. И будет работать. Поэтому мне было легко отмасштабировать маленькую снежинку в большую, взяв тот же код. Сами эффекты, конечно, я затачивал под круговой рисунок, у которого есть центр и на котором хорошо смотрится, к примеру, вращение. Но потом добавил и эффекты типа «развевающийся флаг», который подошёл бы на прямоугольное украшения даже лучше, чем на снежинку.
Координаты диодов рассчитаны как в декартовых координатах (0-255 по X и Y), так и в угловых (угол от вертикали и расстояние от центра, оба параметра 0-255). Одно в другое можно легко пересчитать программно. Для такой формы, как снежинка, проще вручную задать угловые координаты, а программно пересчитать в декартовы. Для других узоров, возможно, будет проще наоборот, забить константы X-Y, а в угловые пересчитать программно. Для снежинки я добавил ещё одну «координату», по ней можно определить, к чему относится диод, центральной точке, основному лучу или боковым отросткам. Это тоже можно использовать в эффектах. Только когда готовил иллюстрации к этому тексту, я заметил, что не совсем точно задал угловые координаты для второстепенных лучей, получились слегка куриные лапки. Ну и ладно, запишем криворукость в фирменный авторский стиль.
Помимо того, что для анимации выбираются случайным образом эффект и палитра, ещё выбирается случайно параметр, который, в зависимости от эффекта, может менять направление анимации на обратное, отображать эффект горизонтально или вертикально, менять скорость и т.п. Это ещё увеличивает разнообразие. Был бы я китайцем, посчитал бы все комбинации, говорил бы про 100500 эффектов. Но это не наш путь.
Линейная волна
Самый примитивный эффект, в общем-то сделан просто для теста работы диодной ленты, но остался. Просто бегущая волна по всем диодам подряд, без учёта координат. Из параметров только смена направления и переворот палитры в обратном направлении.
Радиальная волна
Расходящиеся круги на воде. За счёт более высокой плотности диодов у краёв снежинки получается более яркий всплеск. Немного напоминает этим салют. Параметры могут сделать круги сходящимися к центру и отзеркалить палитру.
Вращающаяся волна
Эффект вращения вокруг центра. Тут уже немного больше разнообразия. Может меняться не только направление вращения и палитры. Хвостики снежинки могут вращаться навстречу основным лучам (как на примере). Или могут вращаться только хвосты, получается такой хоровод. Неплохо смотрится вариант с палитрой «flash», где яркие цвета чередуются с чёрным. Вращающиеся желтый, зеленый и красный изображают векторную диаграмму напряжений трехфазной сети :)
Потоковый накопитель
Две встречные волны по четным и нечетным лучам снежинки. Навеяно машиной времени из «Назад в будущее». Там было три сходящихся луча. Ну а тут удвоенная версия :) Мне особенно нравится в варианте чередующихся черного и зеленого.
Вспышки
Случайные вспышки, плавно затухающие. Или, как вариант, капли дождя. Разноцветного, правда, ну, уж какая экология есть. Эффект не зациклен, поэтому на превью дергается в месте склейки, в железе такого, конечно, нет.
Бегающие огни
Немного схоже с эффектом радиальной волны, но тут не полная волна пробегает, а что-то вроде отдельных точек. Достаточно сильно модифицируется параметрами, направление (расходящиеся, сходящие, пульсирующие), одна или две точки одновременно на каждом луче, сдвиг точек по фазе, дающий эффект спирали. Вот два примера вариабельности:
Спираль
Отдельно эффект спирали. Похоже на вращающийся фейерверк. Тут наверное стоит разнообразить параметрами, сейчас только направление и палитра меняются. Но эффект достаточно симпатичный, пока не надоел.
Деревья
Стволы и ветви переливаются по отдельности. Эффект мигания, меньше анимации, больше привлечения внимания :) Для разнообразия и такое полезно. Смахивает на простую двухканальную гирлянду.
Флаг
Развевающийся флаг. Может быть отзеркален и повернут на 90 градусов. Я в прошивке добавил 33% вероятности выпадения цветов флага РФ для этого эффекта. Но можно поменять на любую другую палитру или вообще убрать приоритет. Для флага РФ также отключаются вращение и отзеркаливание. Вот чего я не подумал, что надо добавить запрет на флаг в сочетании с палитрой «радуга». А то мало ли. Выглядит, кстати, красиво, но показывать не буду.
Плоская волна
Дабы закрыть тему волн, добавил ещё одну, в декартовых координатах, т.е. прямоугольную. С вариациями вертикальной, горизонтальной, диагональной, угловой, в разных направлениях.
Один цвет
Ещё один простой эффект без изысков. Просто монохромно переливается по заданной палитре. Скучновато, но с разными цветами пойдёт. В сочетании с переходами к соседним эффектам тоже даёт неплохие комбинации.
Бегущие огни 2
Алгоритм смешанный из бегущих огней 1, спирали и вращающейся волны. Сильно зависит от параметров. Палитра может вращаться по кругу или нет. Кольца/спирали. Пульсация.
Прожекторы
Алгоритмически это должны были быть 3 круга, движущиеся в пространстве, как световые пятна от поисковых прожекторов, каждый по двум противоположным веткам. На снежинке это выглядит странновато, но в целом что-то в этом есть.
Стрелки
Эффект с акцентом на хвостики, стрелочки, куриные лапки. Параметрами может меняться радиальная или угловая анимация, добавляться бегающие посередине точки
Прожектор 2
Ещё один прожектор. Если честно, я сам не знаю, что я тут навертел. Вроде как несколько пятен, движущихся случайно в пространстве, накладываются друг на друга. Издалека, когда не видно отдельных диодов, вполне угадывается что-то похожее.
Плазма
Кто помнит, во времена VGA графики был достаточно популярен во всяких демках алгоритм генерации плазмы, когда разноцветные пятна причудливо движутся и смешиваются, как какие-то волны или масляные пятна на воде. Википедия. Вот взял какой-то готовый алгоритм из инета, попытался его подогнать. Получилось так себе, на мой вкус. В силу малого «разрешения» снежинки, плазма не особо угадывается. Но как динамический эффект вполне сойдёт. Только похоже я где-то накосячил с зацикливанием, вроде как лагает в некоторые моменты. Ну и ладно.
Для иллюстраций к этому обзору я накалякал приложение под десктоп для симуляции снежинки. Его же можно будет использовать и для отладки новых эффектов. Код анимаций взят прямо из прошивки большой снежинки. В том числе можно заценить и плавные переходы между эффектами. Кнопка save сохраняет последовательность png'шек для анимированных gif'ок (делать сохранение сразу в анимированный gif было лень). Компилируется в QT5.7. Бинарник под винду есть на гитхабе, если кто не брезгует запускать незнакомые exe. Под линукс тоже должно скомпилироваться, но мне лень проверять, у меня лапки, я виндузятник.
Прошивку для esp8266 я писал в PlatformIO IDE, это гораздо удобнее, чем Arduino IDE. Но если нужно что-то подправить по мелочи, то можно сделать и в последней, через неё же и прошить. Достаточно взять файл «src\main.cpp» из исходников, переименовать в snowflake.ino и открыть в ардуине. И не забыть подключить библиотеку FastLED 3.4.0.
В самом начале прошивки есть константы настроек. Тип ленты, порядок цветов, пин для подключения.
Можно изменить число светодиодов, но это немного сложнее, так как потребует пересчёта координат. Массив led_coord_r содержит расстояния диодов от центра, диапазон значений 0-255. Так как лучи одинаковые, симметричные относительно центра, то в массиве 6 одинаковых строк:
Легко увидеть, что первые 15 диодов расположены на примерно равномерно возрастающем удалении от центра, а две группы по 5 диодов стартуют где-то между 10-11 диодами основной ветки и также удаляются от центра. Угловая координата диодов (примерно как время на стрелочных часах) указывается в массиве led_coord_a. Так как лучи снежинки, опять таки, повторяются, только сдвигаются на 60 градусов, то координаты достаточно рассчитать для одного, а потом повторить 6 раз с прибавлением константы. Делается это так:
определяется «базовый» угол t для луча. У меня снежинка расположена в двух створках окна, поэтому повернута одним лучом горизонтально, а двумя другими — по диагонали. Т.е. первый луч имеет наклон 30 градусов, что в диапазоне 0-255 даёт значение 30/360*256 = 21. Все 15 диодов на основной ветви имеют этот угол. Ну а диоды отростков расставляем со сдвигом 3-15 в одну и другую сторону. Остальные лучи копируем и меняем только значение t. Довольно просто.
Ещё для некоторых эффектов используется псевдо-координата led_coord_br. Она определяет принадлежность к основной или боковой ветви. Тут вообще просто, основные диоды обозначаем 0, боковые — 128. Получается 6 таких строчек:
Если рисунок снежинки модифицировать, то таким образом можно выделить какие-то участки.
Если прошивку нужно адаптировать под какой-то более сложный рисунок, то можно наоборот, вручную задать координаты X/Y диодов, а программно пересчитать в угловые. Вот к примеру, можно как-то так сделать, останется только гирлянду разложить в нужном порядке:
Как прошить esp8266, я писать не буду, это уже тысячи раз написано, легко гуглится. Прошить можно как готовую прошивку, так и прямо из исходников.
С подключением ленты есть небольшой нюанс. WS2812B питается от 5 вольт. И за логическую единицу, по даташиту, принимает сигналы выше 0.7VDD, т.е. от 3.5В. Еспшка же питается от 3.3В, соответственно столько и выдаёт в качестве единицы. Из-за этого бывают сбои в данных, выглядящие как случайные цветные вспышки части диодов. Может зависеть от гирлянды, у меня было так, с одной работает, с другой — подглючивает. Идеальный вариант — использовать преобразователь уровней (level shifter). Его можно сделать из куска ленты в один светодиод и обычного диода, hackaday.com/2017/01/20/cheating-at-5v-ws2812-control-to-use-a-3-3v-data-line/ Я же решаю проблему проще. Для большой звезды нужен блок питания 5В и хотя бы 3А (2А точно не хватает на некоторых эффектах). Я использую 5В 5А, и на нём есть подстройка напряжения. Достаточно снизить до ~4.8В и глюки пропадают. На яркости это визуально никак не сказывается.
Прикинем бюджет для большой снежинки:
122+122+75 = 219р — алюминиевая полоса
$10.52 — лента, первый лот, что попался (5M 30 IP30). https://aliexpress.com/item/item/4000875413944.html
3D печать, около 60 грамм. Ну т.е. около 50р за сам пластик.
Модуль NodeMCU — около $2 https://aliexpress.com/item/item/32656401198.html
Провода, блок питания — лучше найти что-то в хозяйстве. Можно старый компьютерный БП использовать или мощную зарядку для мобил. У меня питается от Mean Well RS-25-5, 5В 5А, просто он у меня был. Цена нового 990р в бутике Чип и Дип. На авито б.у. сильно дешевле можно найти. Провод можно из витой пары взять, как вариант. Больше всего, около 5 метров, нужно под линию данных, а там любого сечения хватит, даже самого тонкого. Да и на питание много не надо.
Итого где-то 1200-2200р или US$16-30. Много это или мало — решайте сами. По мне, радость от результата — бесценна. Ах, да, ещё на электричество раскошелиться придётся. Посмотрим, что там умная розетка нам говорит:
В среднем около 15 ватт. Треть киловаттчаса в сутки, если не выключать. 2 рубля каждый день. Дорого, я днём выключаю :)
Все исходники, прошивки, модели для печати, демо приложение под Win доступны на github'е. Но про код хочу сразу предупредить. Писал как попало, местами экспериментировал и потом оставлял, как есть, не приводя в порядок. Работает и ладно. В качестве примера брать только чтобы пугать детей. Но если что-то непонятно, спрашивайте в комментариях, постараюсь разъяснить.
https://github.com/ACE1046/Snowflake
Когда-то давно, на рубеже тысячелетий, встречался софт, помимо распространенных freeware и shareware, который назывался cardware. Автор разрешал пользоваться его программой бесплатно, а взамен просил прислать ему открытку. Так вот, если используете что-то из этого проекта или повторите его, как есть, то не поленитесь, скиньте фотку в комментарии. Мне будет приятно.
Ничего принципиально нового я, конечно, не придумал. Светодиодная лента с адресными диодами, которыми можно управлять индивидуально, появилась уже достаточно давно. Ну и идея делать на её основе новогодние снежинки была уже давно успешно реализована, в том числе и тут, на mysku. Акрил и лазерная резка от sav13, 3D печать от An_private, для примера. Но повторять готовые конструкции не так интересно, как изобретать свои велосипеды. Авторам же спасибо за вдохновение и мотивацию. Без них лента у меня так и лежала бы неиспользованной. А мне нечем было бы похвастаться.
Малая снежинка
Начал я с «комнатной» снежинки диаметром примерно 24 см. Делал из расчёта использовать 1 метр ленты с низкой плотностью, всего 30 диодов на метр. У снежинки 6 лучей, по 5 светиков на каждый. Но потом добавил ещё один диод, 31й, в центр. Не очень удобно, но так получалось гораздо симпатичнее. Вживую выглядит лучше, камера не вытягивает диапазон яркостей и пересвечивает, делает белыми участки рядом с диодами.
Корпус печатный. Нарисовал в Solid Works, не потому, что он такой сложный. Наоборот, я тогда только изучал эту систему, вот и тренировался на простеньких моделях. Каждый луч и крышка к нему печатаются отдельно, напечатать снежинку целиком не хватает области печати 20х20 см моего принтера. Да и частями печатать проще, как по мне. Лучи потом приклеиваются к центральной части. Печатал белым PETG, при тонком слое он хорошо работает рассеивателем, яркости диодов хватает с запасом.
Паять её довольно муторно и долго, много проводочков нужно отмерить нужной длины, зачистить и припаять. Удобно делать разными цветами, питание красным и черным, желтым — сигнал управления. Питание для боковых диодов можно брать в любой удобной точке основной ветви, старался так, чтобы меньше перекрещивались провода. Главное соединить питание всех трех отрезков ленты на каждом из 6 лучей. Сигнальный канал же соединяется в определенном порядке, выход одного куска с началом следующего. Вначале основная ветвь, потом две боковые и обратно, к следующему лучу. Аккуратнее всего разводка получается, если делать как на нижнем левом луче.
В центре собираем красно-черный хоровод. Самый первый луч начинается с центрального диода.
По началу я повозился, подбирая наиболее удачную топологию проводов, но потом дело пошло побыстрее. В итоге я осилил 3 такие снежинки. Две из них потом украшали кафешку, пока пандемия её не убила.
В принципе, 31 диод — это немного, должно хватить и классической ардуины (ATmega168). Но я выбрал микроконтроллер stm32f030f4p6. Он тогда стоил вообще копейки, 69 центов, поэтому я его купил пару десятков и использовал в различных поделках. 16КБ под прошивку, 4КБ памяти, сказка за такие деньги. А при его богатой периферии, можно ещё и всё управление лентой переложить на железо. Рассчитал в софте цвета диодов для следующего кадра, подготовил всё в буфере, дал команду железу — и оно само отправляет это всё ленте, а пока отправляется, можно уже считать следующий кадр. Для трех десятков диодов не так уж нужно, но очень удобно. Минус такого подхода только один, из-за особенности протокола ws2812b, под буфер требуется много памяти, по 24 байта на пиксель (по байту на бит цвета). Так получается из-за протокола, используемого WS2812, если его эмулировать через UART или timer->dma->pwm. До сотни диодов хватает 4 килобайт оперативки, а вот 150 уже впритык, не останется на расчеты эффектов. Код управления светодиодами я взял готовый, было лень писать самому. Из этого ebrombaugh.studionebula.com/embedded/lightshow/index.html проекта. Платку под микроконтроллер взял из того, что было под рукой. Это макетка сразу под esp8266 и stm32f030. Делал для себя. Может и стоит заменить на покомпактнее вариант, но работает — не трогай. Оставлю как есть. С обратной стороны выглядит так, простите за неотмытый флюс, термоклей, грязный кабель… диайвай с изнанки — он такой:
Если захотите повторить, то можно использовать платку от китайцев, вот таких полно на али, цена в районе 3 долларов. Прошивается через UART или дешевым программатором ST-Link.
ШИМ на видео, особенно на синем цвете, это только на камере.
Большая снежинка
Такая снежинка хорошо смотрится в помещении, но, когда я повесил её на окно, посмотрел с улицы и понял, что на высоте 12 этажа она выглядит слегка переливающимся пятнышком. Так не интересно. Ну и на следующий год решил запилить снежинку побольше. Чтобы она выглядела вот так (на два окна правее как раз видна точка маленькой снежинки):
На неё ушло ровно 5 метров ленты, с той же плотностью 30 диодов на метр. Это самый дешевый вариант адресной ленты. В качестве каркаса — алюминиевая полоса из строймага. Я взял 20*2 мм, три штуки по 2 метра, метровый кусок остался. В Леруа мне сейчас показывает цену 122 рубля за двухметровую, 75р за метровую.
Соединители и центральную шайбу печатаем на принтере. Нет принтера? Какой же диайвай без принтера то? Шучу. Можно взять полосу с запасом, сложить внахлест и скрутить болтами с боков от ленты. А центральную часть выпилить из фанеры. Или сделать сурово, сварить всё из стальной полосы. Лишь бы такая снежинка не упала на кого-нибудь. Конструкция простая, точность особая не нужна, проблем быть не должно. Хотя, мне кажется, сейчас не так сложно найти кого-нибудь рядом, кто напечатает. Чертил в OpenSCAD, если что, должно быть легко подправить под другую ширину полосы. Соединение с обратной стороны:
Центральную часть я решил сделать разборной. На случай если надо будет куда-то убрать или перевезти снежинку. Пока не пригодилась, так и провисела на балконе, пока летом на жаре термоклей не размяк и она не свалилась вниз. Снежинка, что с неё взять, она и должна падать, работа у них такая. Но выжила, даже без повреждений.
Для возможности разъединения проводов припаял обычные штырьки 2.54мм. 4 штырька на каждый луч. Три пина припаиваются прямо к ленте, земля, данные, +5 вольт. А на четвертый возвращается провод данных с дальнего конца луча. В центре это соединяется вот таким пауком (и да, я знаю, что у паука 8 лап, мой просто жертва беспощадного диайвая):
В каждом луче схема соединения аналогична маленькой снежинке. Что радует, паять тут столько же, хоть и размер в 5 раз больше. Над лентой тут нет крышки-рассеивателя, для любования с большого расстояния она и не требуется, светодиоды слепят только вблизи. Да и красоту особо наводить не требуется, с улицы не видно, далеко, а изнутри помещения изнанка вполне приличная. Так что я повода фиксировал термоклеем, только чтобы они не попадали в свет диодов, не перекрывали их.
Попробовал взять «мозги» от мелкой снежинки и подключить к новой. Тут-то мне памяти и перестало хватать. Нет, впихнуться, я уверен, было можно. В оптимизацию я могу и умею. Я, к примеру, делал LED куб 8*8*8 диодов на ATmega32U4. Таких кубиков в инете полно. Вот только мой был ещё и с градациями яркости, динамическая индикация слоев одновременно с ШИМом отдельных диодов. Выглядит гораздо интереснее. (Видео плохо передаёт яркость, но примерно понять можно: youtu.be/tFre3wmwgtU). Так вот, в этот раз я заленился и решил просто взять что-то побольше. АТмеги памятью не славятся. STM32F100 с оперативкой более 8КБ идут в больших корпусах, что тоже какой-то оверинжиниринг, учитывая что нужен всего один пин для управления лентой. Да и цены на них росли ещё до силиконового кризиса, не говоря уж о дефиците сейчас. Наверное, STM32F103Cx, который стоит на BluePill, подошел бы, 20КБ памяти, 72МГц. Но я в итоге выбрал esp8266 в виде модуля ESP-07. Оверинжиниринг, скажете? Ну, вроде как да. Зато дешево, компактно, много памяти. И у меня их в запасе больше сотни, для меня — рабочая лошадка. Использую их в приводах штор LazyRolls. Что касается лишнего Wi-Fi, да пусть будет, хоть и не нужен. Пока что я его не использую. Но можно и задействовать, использовать как вход для цветомузыки. Или для обновления прошивки, если потом захочется добавлять эффектов, не снимая с окна. И чем ещё еспшки мне нравятся, они проще новичкам. Я не думал, что снежинку буду предлагать для повторения, но если вдруг кто захочет, ему будет проще, всякие NodeMCU широко распространены, код можно по своему вкусу быстренько подправить в Arduino IDE, которая для новичка гораздо проще, чем ставить Keil или PlatformIO, которые использовал я. А библиотека FastLED, хоть её иногда критикуют за монструозность, поддерживает разные типы управляемых лент, что делает прошивку более универсальной.
Что мне не нравится в тех проектах, что я видел, так это анимация. Я пробовал и WLED, и прошивку для ёлки от Jason Coon (Evil Genius Labs). Нет, эффекты красивые, тут вопросов нет. Но вот смена эффектов обычно происходит мгновенно, вот были «искорки», вдруг бац, уже радуга. Кому как, а мне такой вариант не по вкусу. Мне хотелось сделать так, чтобы один эффект плавно переходил в другой. Яркость предыдущего эффекта снижается, а следующего — нарастает. При этом какое-то время оба эффекта движутся по своим программам одновременно. Это требует несколько больших вычислительных мощностей. Зато перетекание одного эффекта в другой само по себе даёт причудливые эффекты, иногда удачные, иногда и нет. Но разнообразия добавляет. Вот что у меня получилось. Видео снято изнутри. Наледь на стеклах балкона хорошо рассеивает диоды и их так проще заснять. Да и зима на улице не располагает к съёмкам дрожащими руками на большом зуме.
Софт
Цвета для анимации считаются в HSV координатах. Т.е. тон, насыщенность, яркость. Так гораздо проще делать яркие эффекты. К примеру, плавный переход между красным и голубым проходит по всем оттенкам радуги, через оранжевый, желтый, зеленый. Достаточно только плавно менять значение цвета H, оставляя насыщенность S и яркость V в максимуме. В RGB такое считать очень неудобно. Перед выводом ещё желательно немного скорректировать гамму. Глаз воспринимает яркость нелинейно. Половинная яркость диода выглядит всего лишь чуть-чуть менее яркой. Я в мелкой снежинке сделал простейшую коррекцию по степеням двойки, рассчитанная яркость в диапазоне 0-255 превращается в фиксированные десять уровней: 0, 1, 2, 4, 8, 16, 32, 64, 128, 255. Неидеально, но на практике даёт вполне приличный результат. На украшении такое упрощение совсем незаметно. В библиотеке FastLED гамма-коррекция уже есть, стал использовать её.
Палитры для эффектов задаются из 6 цветов в HSV. Мне этого представляется достаточным, учитывая что промежутки между ними интерполируются. Можно задать как радугу, так и палитры из трех и двух цветов, повторяя нужные цвета. Например, белый, синий и красный для флага. Или палитра «кока-кола» из чистых красного и белого. Камрадам из РБ может понравится, но будьте осторожны, если решите повторить.
Эффекты считаются в двухмерных координатах. Для каждого светодиода в прошивке рассчитаны координаты, по ним и определяется цвет в каждый момент времени для каждого светодиода. Такой подход офигителен тем, что прошивку легко модифицировать под любое число диодов, расположенных произвольным образом. Достаточно только рассчитать (ручками, линейкой или в какой-нибудь программе) координаты светиков в пространстве. Можно хоть матрицу сделать, хоть надпись, хоть снежинку. И будет работать. Поэтому мне было легко отмасштабировать маленькую снежинку в большую, взяв тот же код. Сами эффекты, конечно, я затачивал под круговой рисунок, у которого есть центр и на котором хорошо смотрится, к примеру, вращение. Но потом добавил и эффекты типа «развевающийся флаг», который подошёл бы на прямоугольное украшения даже лучше, чем на снежинку.
Координаты диодов рассчитаны как в декартовых координатах (0-255 по X и Y), так и в угловых (угол от вертикали и расстояние от центра, оба параметра 0-255). Одно в другое можно легко пересчитать программно. Для такой формы, как снежинка, проще вручную задать угловые координаты, а программно пересчитать в декартовы. Для других узоров, возможно, будет проще наоборот, забить константы X-Y, а в угловые пересчитать программно. Для снежинки я добавил ещё одну «координату», по ней можно определить, к чему относится диод, центральной точке, основному лучу или боковым отросткам. Это тоже можно использовать в эффектах. Только когда готовил иллюстрации к этому тексту, я заметил, что не совсем точно задал угловые координаты для второстепенных лучей, получились слегка куриные лапки. Ну и ладно, запишем криворукость в фирменный авторский стиль.
Помимо того, что для анимации выбираются случайным образом эффект и палитра, ещё выбирается случайно параметр, который, в зависимости от эффекта, может менять направление анимации на обратное, отображать эффект горизонтально или вертикально, менять скорость и т.п. Это ещё увеличивает разнообразие. Был бы я китайцем, посчитал бы все комбинации, говорил бы про 100500 эффектов. Но это не наш путь.
Эффекты
Линейная волна
Самый примитивный эффект, в общем-то сделан просто для теста работы диодной ленты, но остался. Просто бегущая волна по всем диодам подряд, без учёта координат. Из параметров только смена направления и переворот палитры в обратном направлении.
Радиальная волна
Расходящиеся круги на воде. За счёт более высокой плотности диодов у краёв снежинки получается более яркий всплеск. Немного напоминает этим салют. Параметры могут сделать круги сходящимися к центру и отзеркалить палитру.
Вращающаяся волна
Эффект вращения вокруг центра. Тут уже немного больше разнообразия. Может меняться не только направление вращения и палитры. Хвостики снежинки могут вращаться навстречу основным лучам (как на примере). Или могут вращаться только хвосты, получается такой хоровод. Неплохо смотрится вариант с палитрой «flash», где яркие цвета чередуются с чёрным. Вращающиеся желтый, зеленый и красный изображают векторную диаграмму напряжений трехфазной сети :)
Потоковый накопитель
Две встречные волны по четным и нечетным лучам снежинки. Навеяно машиной времени из «Назад в будущее». Там было три сходящихся луча. Ну а тут удвоенная версия :) Мне особенно нравится в варианте чередующихся черного и зеленого.
Вспышки
Случайные вспышки, плавно затухающие. Или, как вариант, капли дождя. Разноцветного, правда, ну, уж какая экология есть. Эффект не зациклен, поэтому на превью дергается в месте склейки, в железе такого, конечно, нет.
Бегающие огни
Немного схоже с эффектом радиальной волны, но тут не полная волна пробегает, а что-то вроде отдельных точек. Достаточно сильно модифицируется параметрами, направление (расходящиеся, сходящие, пульсирующие), одна или две точки одновременно на каждом луче, сдвиг точек по фазе, дающий эффект спирали. Вот два примера вариабельности:
Спираль
Отдельно эффект спирали. Похоже на вращающийся фейерверк. Тут наверное стоит разнообразить параметрами, сейчас только направление и палитра меняются. Но эффект достаточно симпатичный, пока не надоел.
Деревья
Стволы и ветви переливаются по отдельности. Эффект мигания, меньше анимации, больше привлечения внимания :) Для разнообразия и такое полезно. Смахивает на простую двухканальную гирлянду.
Флаг
Развевающийся флаг. Может быть отзеркален и повернут на 90 градусов. Я в прошивке добавил 33% вероятности выпадения цветов флага РФ для этого эффекта. Но можно поменять на любую другую палитру или вообще убрать приоритет. Для флага РФ также отключаются вращение и отзеркаливание. Вот чего я не подумал, что надо добавить запрет на флаг в сочетании с палитрой «радуга». А то мало ли. Выглядит, кстати, красиво, но показывать не буду.
Плоская волна
Дабы закрыть тему волн, добавил ещё одну, в декартовых координатах, т.е. прямоугольную. С вариациями вертикальной, горизонтальной, диагональной, угловой, в разных направлениях.
Один цвет
Ещё один простой эффект без изысков. Просто монохромно переливается по заданной палитре. Скучновато, но с разными цветами пойдёт. В сочетании с переходами к соседним эффектам тоже даёт неплохие комбинации.
Бегущие огни 2
Алгоритм смешанный из бегущих огней 1, спирали и вращающейся волны. Сильно зависит от параметров. Палитра может вращаться по кругу или нет. Кольца/спирали. Пульсация.
Прожекторы
Алгоритмически это должны были быть 3 круга, движущиеся в пространстве, как световые пятна от поисковых прожекторов, каждый по двум противоположным веткам. На снежинке это выглядит странновато, но в целом что-то в этом есть.
Стрелки
Эффект с акцентом на хвостики, стрелочки, куриные лапки. Параметрами может меняться радиальная или угловая анимация, добавляться бегающие посередине точки
Прожектор 2
Ещё один прожектор. Если честно, я сам не знаю, что я тут навертел. Вроде как несколько пятен, движущихся случайно в пространстве, накладываются друг на друга. Издалека, когда не видно отдельных диодов, вполне угадывается что-то похожее.
Плазма
Кто помнит, во времена VGA графики был достаточно популярен во всяких демках алгоритм генерации плазмы, когда разноцветные пятна причудливо движутся и смешиваются, как какие-то волны или масляные пятна на воде. Википедия. Вот взял какой-то готовый алгоритм из инета, попытался его подогнать. Получилось так себе, на мой вкус. В силу малого «разрешения» снежинки, плазма не особо угадывается. Но как динамический эффект вполне сойдёт. Только похоже я где-то накосячил с зацикливанием, вроде как лагает в некоторые моменты. Ну и ладно.
Для иллюстраций к этому обзору я накалякал приложение под десктоп для симуляции снежинки. Его же можно будет использовать и для отладки новых эффектов. Код анимаций взят прямо из прошивки большой снежинки. В том числе можно заценить и плавные переходы между эффектами. Кнопка save сохраняет последовательность png'шек для анимированных gif'ок (делать сохранение сразу в анимированный gif было лень). Компилируется в QT5.7. Бинарник под винду есть на гитхабе, если кто не брезгует запускать незнакомые exe. Под линукс тоже должно скомпилироваться, но мне лень проверять, у меня лапки, я виндузятник.
Прошивку для esp8266 я писал в PlatformIO IDE, это гораздо удобнее, чем Arduino IDE. Но если нужно что-то подправить по мелочи, то можно сделать и в последней, через неё же и прошить. Достаточно взять файл «src\main.cpp» из исходников, переименовать в snowflake.ino и открыть в ардуине. И не забыть подключить библиотеку FastLED 3.4.0.
В самом начале прошивки есть константы настроек. Тип ленты, порядок цветов, пин для подключения.
Можно изменить число светодиодов, но это немного сложнее, так как потребует пересчёта координат. Массив led_coord_r содержит расстояния диодов от центра, диапазон значений 0-255. Так как лучи одинаковые, симметричные относительно центра, то в массиве 6 одинаковых строк:
17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255, 180, 192, 204, 216, 228, 180, 192, 204, 216, 228
Легко увидеть, что первые 15 диодов расположены на примерно равномерно возрастающем удалении от центра, а две группы по 5 диодов стартуют где-то между 10-11 диодами основной ветки и также удаляются от центра. Угловая координата диодов (примерно как время на стрелочных часах) указывается в массиве led_coord_a. Так как лучи снежинки, опять таки, повторяются, только сдвигаются на 60 градусов, то координаты достаточно рассчитать для одного, а потом повторить 6 раз с прибавлением константы. Делается это так:
#define t 21
t, t, t, t, t, t, t, t, t, t, t, t, t, t, t, t-3, t-6, t-9, t-12, t-15, t+3, t+6, t+9, t+12, t+15,
определяется «базовый» угол t для луча. У меня снежинка расположена в двух створках окна, поэтому повернута одним лучом горизонтально, а двумя другими — по диагонали. Т.е. первый луч имеет наклон 30 градусов, что в диапазоне 0-255 даёт значение 30/360*256 = 21. Все 15 диодов на основной ветви имеют этот угол. Ну а диоды отростков расставляем со сдвигом 3-15 в одну и другую сторону. Остальные лучи копируем и меняем только значение t. Довольно просто.
Ещё для некоторых эффектов используется псевдо-координата led_coord_br. Она определяет принадлежность к основной или боковой ветви. Тут вообще просто, основные диоды обозначаем 0, боковые — 128. Получается 6 таких строчек:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
Если рисунок снежинки модифицировать, то таким образом можно выделить какие-то участки.
Если прошивку нужно адаптировать под какой-то более сложный рисунок, то можно наоборот, вручную задать координаты X/Y диодов, а программно пересчитать в угловые. Вот к примеру, можно как-то так сделать, останется только гирлянду разложить в нужном порядке:
Как прошить esp8266, я писать не буду, это уже тысячи раз написано, легко гуглится. Прошить можно как готовую прошивку, так и прямо из исходников.
С подключением ленты есть небольшой нюанс. WS2812B питается от 5 вольт. И за логическую единицу, по даташиту, принимает сигналы выше 0.7VDD, т.е. от 3.5В. Еспшка же питается от 3.3В, соответственно столько и выдаёт в качестве единицы. Из-за этого бывают сбои в данных, выглядящие как случайные цветные вспышки части диодов. Может зависеть от гирлянды, у меня было так, с одной работает, с другой — подглючивает. Идеальный вариант — использовать преобразователь уровней (level shifter). Его можно сделать из куска ленты в один светодиод и обычного диода, hackaday.com/2017/01/20/cheating-at-5v-ws2812-control-to-use-a-3-3v-data-line/ Я же решаю проблему проще. Для большой звезды нужен блок питания 5В и хотя бы 3А (2А точно не хватает на некоторых эффектах). Я использую 5В 5А, и на нём есть подстройка напряжения. Достаточно снизить до ~4.8В и глюки пропадают. На яркости это визуально никак не сказывается.
Прикинем бюджет для большой снежинки:
122+122+75 = 219р — алюминиевая полоса
$10.52 — лента, первый лот, что попался (5M 30 IP30). https://aliexpress.com/item/item/4000875413944.html
3D печать, около 60 грамм. Ну т.е. около 50р за сам пластик.
Модуль NodeMCU — около $2 https://aliexpress.com/item/item/32656401198.html
Провода, блок питания — лучше найти что-то в хозяйстве. Можно старый компьютерный БП использовать или мощную зарядку для мобил. У меня питается от Mean Well RS-25-5, 5В 5А, просто он у меня был. Цена нового 990р в бутике Чип и Дип. На авито б.у. сильно дешевле можно найти. Провод можно из витой пары взять, как вариант. Больше всего, около 5 метров, нужно под линию данных, а там любого сечения хватит, даже самого тонкого. Да и на питание много не надо.
Итого где-то 1200-2200р или US$16-30. Много это или мало — решайте сами. По мне, радость от результата — бесценна. Ах, да, ещё на электричество раскошелиться придётся. Посмотрим, что там умная розетка нам говорит:
В среднем около 15 ватт. Треть киловаттчаса в сутки, если не выключать. 2 рубля каждый день. Дорого, я днём выключаю :)
Все исходники, прошивки, модели для печати, демо приложение под Win доступны на github'е. Но про код хочу сразу предупредить. Писал как попало, местами экспериментировал и потом оставлял, как есть, не приводя в порядок. Работает и ладно. В качестве примера брать только чтобы пугать детей. Но если что-то непонятно, спрашивайте в комментариях, постараюсь разъяснить.
https://github.com/ACE1046/Snowflake
Когда-то давно, на рубеже тысячелетий, встречался софт, помимо распространенных freeware и shareware, который назывался cardware. Автор разрешал пользоваться его программой бесплатно, а взамен просил прислать ему открытку. Так вот, если используете что-то из этого проекта или повторите его, как есть, то не поленитесь, скиньте фотку в комментарии. Мне будет приятно.
Самые обсуждаемые обзоры
+79 |
4244
150
|
+60 |
4414
74
|
ЗЫ: за исходники, отдельный, особый респект(!).
По-поводу RGB, вот усредненная и подкорректированная гама-коррекция:
Использовать так:
где WSR/G/B — то, что отправлять в ленту, R/G/B — обычные значения цвета.
По таблице гаммы видно, как там все плохо с цветами )
Я вот на HD107S / SK9822 / APA102 засматриваюсь — все таки 16 бит и высокочастотный ШИМ — это что-то + возможность задавать яркость не поганя цвет из коробки.
За таблицу гаммы спасибо, как раз лень было считать табличку, утащу в закрома.
Для данного проекта и для ESP в целом это совершенно неактуально, т.к. таблица гаммы занимает всего 256 байт. Однако, для более мелкого МК (типа Atmel) лишние 256 байт могут оказаться проблемой (лично делал контроллер RGB-ленты на attiny с 4 КБ ПЗУ и там это было значимо).
В таком случае можно воспользоваться «хаком» — принять значение гаммы за 2 и получать значение для ШИМ простым возведением яркости в квадрат. Визуально это практически неотличимо от гаммы 2.2, зато позволяет сэкономить немного памяти.
Особенно исходя из того, что мы работаем с целочисленными значениями, а замена степени на 2, дающая возможность просто перемножить даст достаточно ощутимую погрешность. Как вариант — можно, но гораздо проще использовать табличку.
Я об этом выше сразу же написал — это актуально только если в МК мало ПЗУ.
За софтварный симулятор — отдельное мерси.
В Избранное, однозначно.
До подороже получится, но не так уж дорого, вроде
но тут вся прелесть в том, что как писал глубокоуважаемый автор плавность переходов между эффектами. Я в прошлом году искал снежинки, но то что находил совсем не впечатляло, в эту можно сказать влюбился. При наличии всех компонентов повторить можно за один вечер, если что-то уже делал подобное.
Я в программировании понимаю плоховато, хоть и не прочь поучится, но как всегда весь запал заканчивается на том, что когда упрешься в какую то непонятку, вроде как мелочь, а спросить некого, и на этом останавливаешься.
В данной снежинке при повторе в скетче можно вообще ничего не менять, ну или только информационный пин ленты.
ACE, благодарю за подаренные исходники. Про приложение для симуляции снежинки отдельный респект, очень интересно было почитать, буду пробовать разбираться дальше. Про угловую координату даже не слышал, не знал, что так можно.
Но, насколько вижу, XLights поддерживает WLED, который можно прошить в esp8266, так что аппаратно всё готово, если кто хочет поэкспериментировать.
светодиоды (отдельно русыпью) и есть Вемос. Лучи хочу, и надеюсь
успеть, собрать из пластиковых кабель каналов. Единственное
препятствие — что прошивать в вемос? Прочто бин файл?
светодиоды (отдельно русыпью) и есть Вемос. Лучи хочу, и надеюсь
успеть, собрать из пластиковых кабель каналов. Единственное
препятствие — что прошивать в вемос? Прочто бин файл? И сколько диодов на один луч?
Да, можно просто бин файл залить. Или из Ардуино ИДЕ из исходников. Как удобнее.
На один луч 25 диодов.
У меня валялся не использованный Sonoff. Подключил его к гирлянде ws2811, залил прошивку WLED, наделал пресетов. Жду белую искусственную елку, чтобы вся светилась )
Хотя wled и имеет линейную структуру, но поскольку в наших маленьких квартирах елки в основном стоят у стены и сзади не видны wled визуально эмитирует 2d пространство отблесками сквозь елку.
Пластик hips, стм32 и какая-то либа линейная. Пока ваши эффекты не смотрел
Пожалуйста подскажите? Какая длина одного большого луча снежинки.
Длина луча ровно полметра. Боковушки — 16.6см, т.е. двухметровую полосу распилил на 12 штук. Пилил вначале на 6 частей, потом ещё пополам, но уже под углом 60 градусов, чтобы лучше примыкало к основному.
Проверьте, чтобы F_CPU в компиляторе совпадала с реальной, выставленной фьюзами.
И ещё, на странице баблиотеки есть такой код:
Ну и смотреть, есть ли вообще данные на линии и что там происходит.
Завтра куплю кабель-каналов и попытаюсь повторить до НГ…
Ещё раз большое спасибо!
Плюсанул и забрал в избранное)
через пару дней соберу
А по факту, красиво получилось… ))
ЕСП 12-я, разьем питания 5х2.1 круглый
Разводку выполнил МГТФ толь 0.07 или 0.12 — на питание 5 светиков хватит, зато глаза не мозолит, закрепил после термоклеем аккуратно
Чтоб заюзать 2А блок питания (жалко 5в 6А) уменьшил макс яркость с 255 до 150
Но т.к. 3D-принтера нет, то буду крепить к лучи к фанерному кругу в середине.
И второй вопрос: через что у вас подключен желтый провод?
Через штатный для лент резистор 330 ом… Был смд, одной стороной припаян, на втором провод, держаться будет
Или по каким ключевым словам их искать.
Та ссылка, что в обзоре видимо устарела.
А я не сильно в них шарю. Боюсь ошибиться.
Очень уж хочется сделать такую же красоту.
Вот лот с наибольшим числом заказов, для примера:
https://aliexpress.com/item/item/4000160133215.html (варианты NodeMcu v3 CH340 и NodeMcu Lua CH340 — вполне подойдут)
Или такой
https://aliexpress.com/item/item/32831353752.html (D1 MINI)
тоже пойдёт, он чуть компактнее.
спасибо за stl, попробую повторить.
Не нашел их вначале.
Если заливаете прошивку из исходников, то поменяйте FRAMES_PER_SECOND в самом начале, это кадров в секунду, поставьте меньше.
Для проверки ленты можно в конце кода, после строки
void loop(void)
убрать комментарии ( // ) у 8 строчек. Должно просто тестовую статичную радугу вывести.
И ещё вопрос, сама esp от того же блока питания запитана или от usb отдельно? Если раздельно, обязательно минус ленты и Gnd вемоса должны быть соединены.
Всё запитано от одного БП. Минус один у всех.
Радугу запускал — мерцание есть.
Увеличивал сопротивление с 330 до 430 ом. Безрезультатно.
Перепаял все провода силовые и сигнальные от концов лент. Думал, может сечения не хватает.
Не помогло.
Но выяснилась одна закономерность. Мерцают все сильнее те лучи, которые дальше от начала входного сигнала. И при повышении напряжения количество мерцающих лучей увеличивается. Ниже 4.25 В на моем БП подать не удается.
Какие ещё могут быть варианты?
Может быть при снижении напряжения на БП снижается и напряжение 3.3В на есп из-за регулятора напряжения на вемосе. Попробовать вемос запитать от USB, отдельно от ленты.
Вторую сделаю как сам освою 3D редактор и принтер.
Так же перед тем как закрыть рассеиватели одену на каждый диод линзочки, посмотрим будет ли эффект.
/>>
Через Arduino IDE имеет смысл заливать из исходников, если что-то нужно подправить в прошивке.
Перед заливкой проверьте размер bin файла. Он должен быть в районе 280 килобайт. Иногда браузеры с github'а скачивают неправильно.
Можно поставить arduino ide и из неё из исходника прошить.
Все поместилось в ардуино, но есть проблема, в какой то момент все гаснет (похоже отрабатывает какой то эффект или палитру ) и дальше продолжает работать. Скетч из файла «src\main.cpp»,
внесенные изменения и
#define NUM_LEDS 60
Что у меня не так?
С уважением, Сергей.
Я думаю, это эффект «стрелки» так выглядит. Попробуйте в массив led_coord_br какие-то светодиоды пометить как 128. Например, три последние в каждой строке. Мне кажется, дело в этом.
С уважением, Сергей.