![]() |
![]() |
|||||||||||||||
Плейер световых эффектов
Автор: ARV Какая свадьба без баяна? Какой праздник без гирлянды мигающих огней? Раз уж мы с Котом вместе прожили последние 13 лет, это событие надо отметить так, чтобы в глазах рябило ну минимум до следующего праздника. И ничего лучше, чем автомат световых эффектов для сей цели не придумать. В качестве подарка предлагаю именно это: многофункциональный плейер световых эффектов для гирлянды светодиодов WS2812b. Вы спросите: а чего так пафосно – «плейер»? А потому что эффекты не прошиты жестко в микроконтроллере, а считываются из файлов, коих может быть огромное количество, с обычной SD-карты, т.е. как у музыкального плейера. Сами эти файлы я назвал скриптами, потому что они содержат описание эффекта на специально придуманном мной для этого ассемблероподобном языке. Для чего я сделал этот баян – автомат световых эффектов? Ну, во-первых, хотелось помигать светодиодами WS2812b, раз уж они у меня завалялись. Во-вторых, решил попробовать раз и навсегда избавить всех любителей праздничных «мигалок» от утомительного однообразия, предложив возможность быстро и гибко менять варианты мигания без необходимости перекомпилировать проект и перепрошивать микроконтроллер. Наконец, в-третьих, для упрощения самого процесса разработки эффекта – на словах-то мы легко опишем, что хотелось бы, а вот «зашить» это в программу далеко не каждому по силам. Итак, подробности об этом плейере, который я, кстати, гордо назвал DIGISCRIPT:
Из органов управления – только 1 кнопка сброса, которая требуется для приведения в чувство плейера при ошибках в скрипте. Из органов индикации – единственный светодиод, светящийся в моменты обращения к SD-карте. Плейер имеет возможность настройки некоторых своих режимов при помощи специального конфигурационного файла на той же карте, что и скрипты с эффектами. Чтобы плейер можно было эксплуатировать сразу, без необходимости самостоятельно создавать скрипт хотя бы для тех же «бегущих огней», я подготовил более 60 скриптов «базовых» эффектов для гирлянды светодиодов. Почти каждый базовый эффект имеет несколько вариантов (например, эффект «бегущий огонек» имеет варианты бега влево, вправо, в случайную сторону, случайным цветом и т.п). Таким образом, общее количество эффектов в виде готовых файлов (в архиве) превышает, пожалуй, сотню. Все готовые скрипты с кратким описанием основных особенностей перечислены в таблице Excel, прилагаемой к статье. На десятиминутном видео демонстрируются некоторые эффекты с ограничением времени работы эффекта в 20 секунд – можете визуально ознакомиться. К сожалению, звезды сложились так, что некоторые эффекты со случайным выбором цвета и скорости сработали не в самых красивых вариантах, и на видео это заметно… Но это Его Величество Случай. Схема тривиальна – см. рисунок ниже. Источник питания 5В в состав схемы не включен, т.к. его параметры зависят от количества светодиодов в гирлянде. Можно заметно упростить свою жизнь при повторении устройства, если воспользоваться готовым адаптером microSD-карты, обычно используемым ардуинщиками: В этом случае схема упрощается: DA1 и резисторы R6…R11 исключаются, а адаптер соединяется напрямую с линиями MOSI, MISO, SCK и SS в соответствии с нанесенными на нем пометками. Кстати, на видео вы могли видеть именно такой подход. Прошивка, документация (прочтите все прилагаемые текстовые файлы для получения полной информации о проекте), исходники и проект KiCAD для платы – все прилагается. Плата разведена в расчете на промышленное производство (дорожки 0,25 мм и переходные отверстия 0,4 мм) в Китае, в архиве проекта есть готовые Gerber-файлы, которые можно сразу загрузить на сайт JLCBCB.COM и примерно за 600 рублей с доставкой получить 10 штук таких плат. Кстати, разъем для microSD можно закупить тоже в Китае менее чем за 5 рублей. При прошивке необходимо установить FUSE-биты следующим образом: LOW_FUSES = 0xFF, HIGH_FUSES=0xC7. Так же можно ориентироваться на следующий скриншот: Исходник легко адаптировать под любой МК семейства AVR c бόльшим объемом FLASH/RAM, при этом может быть увеличено и количество прямоадресуемых светодиодов в гирлянде. Поясню, что я подразумеваю под «прямоадресуемостью». Для создания эффекта бегущего огня достаточно трех светодиодов. Если нам надо, чтобы бегущий огонь был на гирлянде из 90 светодиодов, мы соединяем их в чередующиеся группы по 30, и получаем 3 гирлянды. То есть для этого необходимо адресовать (т.е. управлять цветом/яркостью) всего 3 светодиода/гирлянды. В случае предлагаемого плейера это количество составляет 32, а исходники позволяют увеличить это количество до 128. Дальнейшее увеличение, с моей точки зрения, смысла уже не имеет, т.к. время обновления данных в таком количестве WS2812b будет слишком велико для сохранения исходной быстроты эффектов. 32 адресуемых светодиода – это, по моему мнению, оптимальное количество. Если надо удлинить гирлянду, то можно взять 2 или более гирлянды по 32 светодиода и, разместив их последовательно, подключить к плейеру параллельно – ну, вы поняли. Вы можете просто выбрать несколько наиболее подходящих вам скриптов из числа готовых, записать их на карту и наслаждаться, а можете подредактировать их по своему вкусу – это не сложно, т.к. основные моменты в скриптах прокомментированы. Ну а для более глубинных изменений или создания собственных эффектов вы можете изучить команды языка описания скриптов – файл прилагается. Так же прилагается и простой «редактор-симулятор», который позволит вам проверить прямо на компьютере созданный вами скрипт «в пошаговом режиме» почти как в реальности. Надеюсь, с того момента, как вы повторите эту конструкцию, ваши праздники станут не просто нескучными, а по-настоящему сверкающими и зажигательными. Успехов! Post Scriptum Предвосхищая возможный вопрос «Почему я придумал какой-то весьма странный язык для описания эффектов, разве нельзя было «просто» указать в файле состояние всех светодиодов в тот или иной момент времени?», отвечаю: можно было и так. И даже скажу больше: мне известно несколько систем эффектов на базе WS2812b, поступающих именно так. Но посмотрите, что получается в итоге! Вот пример файла (из проекта AURORA-HYBRID), в котором «просто» описан эффект бегущего по гирлянде из двадцати одного светодиода огонька какого-то фиксированного цвета 10 с фиксированной скоростью 30, числа 16 и 0 обозначают уровень яркости: 16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30 А вот скрипт, реализующий точно такой же эффект для предлагаемого плейера (комментарии для наглядности, их может и не быть, и даже лучше, если не будет): CLR инициализация и очистка Кстати, я соврал: этот скрипт реализует не точно такой же эффект, а гораздо лучше – бежать огонек будет корректно при любом допустимом прошивкой количестве светодиодов, т.е. от 16 до 128! А предыдущий файл будет пригоден только для 21, при 16 уже не сработает, как и при 128. Как, по-вашему, какой вариант на самом деле проще? Изменится ли ваш ответ, если вы оцените простоту модификации этих файлов для изменения цвета с красного на синий? А для изменения скорости бега? А для смены направления? А для количества одновременно бегущих огней? Обращаю ваше внимание, что в случае предложенного мной подхода каждая из этих модификаций реализуется изменением/добавлением одной-единственной команды скрипта.
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |