Создание эффектов для WS2812B

Новый год не за горами, а это такой праздник, в который ни один уважающий себя ардуинщик не упустит случая, чтобы сделать что-то новенькое для его украшения. Понятное дело, что всяческие механические игрушки не каждому по силам (да и не по деньгам тоже). Чаще всего это новогодняя иллюминация: гирлянды, панно, настенные фигуры и многое другое. За годы существования Arduino придумали великое множество скетчей, обеспечивающих различные световые эффекты и многочисленные компьютерные программы, которые позволяют эти эффекты создавать.
Решил и я внести свои пять копеек в это благородное дело. Не то, чтобы другие программы мне не нравятся, просто для меня своё всё же милее. Итак, что же я предлагаю? Прежде всего компьютерную программу, написанную на моём любимом Delphi, которая создаёт световые эффекты для лент, построенных на светодиодах WS2812B и им подобных. В этой конкретно версии, которая вам предлагается, можно управлять лентами, содержащими от двух до трёхсот всетодиодов (т.е. лент длиной 5 метров с плотностью 60 диодов на метр).
Как создаются эффекты? Для этого используются… самые обычные рисунки! Вплоть до ваших личных фотографий. Но это ещё не всё. Программа умеет сама создавать подходящие для наших целей изображения в любом количестве и с любой цветовой гаммой. А если ещё и прибавить к этому целую галерею графических фильтров, позволяющих искажать рисунки, поворачивать, разворачивать, симметрировать, размывать и так далее… Это и обеспечивает нам бесконечное число уникальных световых эффектов.
Результаты ваших экспериментов можно сохранить на диске и в любой момент открыть нужный файл и воспроизвести его снова (или отредактировать). Мало того, из этих файлов, особенно если их уже много, можно составить длиннющую по времени комплексную программу светового шоу. Вы сами делаете наборку из отдельных, уже готовых, фрагментов, определяя время “звучания” каждого из них. Запустив эту наборку на воспроизведение, вы получите на выходе эффектное шоу, которое будет “крутиться” в цикле до тех пор, пока вам не надоест, и вы не нажмёте на кнопку “Стоп”.
Программа имеет несколько необычный, чисто “кнопочный” интерфейс. Ну, я же её для себя писал, мне так удобно. В принципе, ничего сложного - все кнопки, ползунки и поля ввода данных либо подписаны, либо имеют хинты. Файл с подробным описанием программы ещё не готов, но уже в работе. Если будет в том интерес со стороны посетителей форума, то выложу, когда допишу.
Комплекс рассчитан на использование Arduino Uno, Nano, Pro Mini и им подобных. Правда, в случае использования Pro Mini, не содержащей конвертора USB на борту, понадобится ещё и он. Но владельцы таких ардуин его, как правило, уже имеют. Сама Arduino использует для управления лентой любой выход, кроме 0, 1, A6, A7. Не забывайте подключить его к
входу данных светодиодной ленты через резистор от 100 ом до 1 ком. И всё, только один пин и кабель USB к компьютеру, больше никаких подключений! А, нет, ещё общий провод ардуины нужно соединить с общим проводом ленты. Но саму светодиодную ленту следует запитывать ТОЛЬКО от отдельного источника соответствующей мощности! Более подробно об этом сказано в пояснениях в скетче.
Несколько важных замечаний:

  • В скетче и в компьютерной программе должно быть указано ОДИНАКОВОЕ количество светодиодов. Критической ошибки не будет, но на ленте вы увидите совсем не то, что ожидали.
  • Цветовая гамма компьютера, увы, довольно значительно отличается от того, что “выдают” светодиоды, особенно в фиолетовой части спектра. Некоторую корректировку я сделал, но этого недостаточно. Придётся приспосабливаться, тем более, что и сами светодиоды различных производителей могут сильно различаться в этом плане.
  • Прежде, чем запускать компьютерную программу, подключите питание ленты и кабель USB к компьютеру (о том, что в Arduino уже должен быть залит скетч, я умалчиваю). Когда программа загрузится, выберите нужный COM-порт в списке и нажмите кнопку с изображением электрической вилки. Если вы забыли подключить USB кабель до загрузки программы, то нужного порта в списке не будет. Подключите кабель, а затем нажмите кнопку с изображением круговой стрелки (справа от кнопки с вилкой). Список портов обновится, а дальше так, как сказано выше.
  • Компьютерная программа не требует установки. Создайте какую-нибудь папку на диске и разархивируйте туда дистрибутив. Исполняемый файл - LedsImg.exe. Скетч для ардуино перепишите (вместе с папкой, в которой он находится!) туда, где хранятся ваши проекты.

Вот, пожалй, и всё об этом проекте. Но есть ещё и другие. Например, в той же самой компьютерной программе (LedsImg.exe) мы можем создавать и записывать файлы для другой, уже автономной от компьютера, конструкции, которая будет их считывать с SD карточки. Эта конструкция построена на двух Arduino Uno/Nano, LCD экране, аналоговой клавиатуре и резистивных регуляторах яркости и скорости воспроизведения. При этом одна ардуино обеспечивает всю функциональность, кроме вывода на ленту, а вторая - только вывод на ленту. Связаны ардуино между собой через Serial. Но есть версия, когда ардуины связаны между собой по беспроводной связи на NRF24. И ещё есть версия, где используется Arduino Mega2560, которая одна управляется со всем этим хозяйством, да ещё и обслуживает большее количество светодиодов.

1 лайк

Другие проекты не выкладываете - понятно, но Вы и на этот ссылку не дали.
Или я чего-то не вижу?

Дружище, этот раздел - для готовых проектов, а не для рекламы. Ссылка-то где?

Я новичок на форуме. Текст только что выложил, картинку тоже, но как загрузить архивы не знаю. Подскажите.

С удовольствием выложу архивы, если подскажете, как их загрузить.

Они у вас только в виде файлов, на гитхаб не выложено? Ссылку было бы удобнее

На тему программы - выглядит прикольно, но что так мало - 300 пикселей всего? На пару десятков тысяч сложно будет расширить? И с передачей фреймов по сети или DMX? По сути что-то типа аналога LedEdit или Madrix, только с открытыми исходниками?

Мне слово понравилось.

Потому что невсетодиоды не канают )))

невсетодиоды что блестят - пословица

3 лайка

Вы забыли написать, что является результатом работы программы (для ПК):

  • файл со скетчем,
  • файл с массивом данных для скетча.
    Впрочем, и в том, и в другом случае “ОДИНАКОВОЕ” получается автоматически.

я так понял, что оно фигачит команды в Сериал, по которым ардуинка переключает всетодиоды на ленте

  • Ссылки я в текст вставил, файлы на Гугл-диске.
  • Программа для ДОМАШНЕГО использования, как я в тексте и оговаривал, поэтому мало пикселей. Но и UNO/Nano, которые используются, больше 410 пикселей не потянут. С библиотекой FastLed, так точно. Памяти не хватает.
  • Расширить возможности программы до обслуживания десятков тысяч пикселей элементарно, вопрос только зачем? И во что эти пиксели будут организованы - просто в ленту, панно или что-то ещё?
  • Передачей фреймов по сети или DMX не занимался, интереса не было. Хотя, если будут конкретные техусловия, то почему бы и нет?
  • Сравнивать упомянутые программы с моей я бы не стал. У каждой есть свои достоинства и недостатки. Поэтому вольному воля, какой пользоваться. А открытый исходный код или закрытый - тоже вопрос спорный. Изюминка моей программы в создании рисунков, которые я называю “фрактальными”. Алгоритмы достаточно сложные, вряд ли кто-то будет в них разбираться.

Ну тогда никто не мешает через сериал же передать и размер массива.

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

В результате работы программы на ПК получается массив данных для скетча. Но к количеству светодиодов, которое зашито в ардуино он никак не привязан, поэтому автоматически не определяется. Почему так? Во-первых, мне так было удобно. Во-вторых, программа рассчитана на обслуживание от 2-х до 300 пикселей. Любое количество, которое я укажу в ПРОГРАММЕ. А вот позаботиться о соответствии придётся уже перезалив скетч. Сегодня я хочу поиграться с полной лентой, на которую у меня задействована одна ардуино, а завтра - с настенным панно, в котором другое количество пикселей и к нему привязана уже другая плата. Указываю в программе другое количество пикселей, обзываю файлы как-нибудь так: pro300_001 или pro64_027 и вся проблема.

Позвольте поинтересоваться, исходного кода для Arduino или любого? Скетч для Arduino я выложил. А вот тот, что для ПК, увольте. Форум-то ардуинщиков, или где?

А зачем? Чтобы ардуино отказалась работать при несоответствии? Сделать действительно элементарно, но что это даст?

Что-то я их в упор не наблюдаю

Странно, у меня на странице всё есть. Тем не менее, повторю:
Дистрибутив программы
Скетч

А это скрин основного окна программы: