Например TDA7294

РадиоКот >Конкурсы >Поздравь Кота по-человечески 2018! >

Теги статьи: WS2812BДобавить тег

Плейер световых эффектов

Опубликовано 20.08.2018.
Создано при помощи КотоРед.

Какая свадьба без баяна?

Какой праздник без гирлянды мигающих огней? Раз уж мы с Котом вместе прожили последние 13 лет, это событие надо отметить так, чтобы в глазах рябило ну минимум до следующего праздника. И ничего лучше, чем автомат световых эффектов для сей цели не придумать.

В качестве подарка предлагаю именно это: многофункциональный плейер световых эффектов для гирлянды светодиодов WS2812b. Вы спросите: а чего так пафосно – «плейер»? А потому что эффекты не прошиты жестко в микроконтроллере, а считываются из файлов, коих может быть огромное количество, с обычной SD-карты, т.е. как у музыкального плейера. Сами эти файлы я назвал скриптами, потому что они содержат описание эффекта на специально придуманном мной для этого ассемблероподобном языке.

Для чего я сделал этот баян – автомат световых эффектов?

Ну, во-первых, хотелось помигать светодиодами WS2812b, раз уж они у меня завалялись. Во-вторых, решил попробовать раз и навсегда избавить всех любителей праздничных «мигалок» от утомительного однообразия, предложив возможность быстро и гибко менять варианты мигания без необходимости перекомпилировать проект и перепрошивать микроконтроллер. Наконец, в-третьих, для упрощения самого процесса разработки эффекта – на словах-то мы легко опишем, что хотелось бы, а вот «зашить» это в программу далеко не каждому по силам.

Итак, подробности об этом плейере, который я, кстати, гордо назвал DIGISCRIPT:

  • Основа – микроконтроллер atmega8;
  • Количество прямоадресуемых WS2812b – от 16 до 32 штук;
  • Количество файлов скриптов на SD-карте – до 65536;
  • Порядок воспроизведения скриптов – последовательный или случайный;
  • Поддерживаемая файловая система SD-карты – FAT32.

Из органов управления – только 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
0-10,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;30
0-10,0-10,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;30
0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,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;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30
0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10,0-10,0-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10,0-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10,0-10;30
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,16-10,0-10,0-10;30
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,16-10,0-10;30
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,16-10;30

А вот скрипт, реализующий точно такой же эффект для предлагаемого плейера (комментарии для наглядности, их может и не быть, и даже лучше, если не будет):

CLR                инициализация и очистка
PC=FF0000 RGB-цвет огонька
GB=FF              максимальная яркость
PM=00              включаем первый огонек
RPT                начало цикла
   WT=05           обновить гирлянду и подождать 50 мс
   RCR             сдвинуть гирлянду по кругу
INF                конец цикла, повторять бесконечно

Кстати, я соврал: этот скрипт реализует не точно такой же эффект, а гораздо лучше – бежать огонек будет корректно при любом допустимом прошивкой количестве светодиодов, т.е. от 16 до 128! А предыдущий файл будет пригоден только для 21, при 16 уже не сработает, как и при 128.

Как, по-вашему, какой вариант на самом деле проще? Изменится ли ваш ответ, если вы оцените простоту модификации этих файлов для изменения цвета с красного на синий? А для изменения скорости бега? А для смены направления? А для количества одновременно бегущих огней? Обращаю ваше внимание, что в случае предложенного мной подхода каждая из этих модификаций реализуется изменением/добавлением одной-единственной команды скрипта.

 


Файлы:
Руководство по подготовке SD-карты
Полное описание языка скриптов
Архив с коллекцией готовых скриптов, сгруппированных по особенностям эффектов. Так же в архив включена таблица Excel с кратким описанием каждого из файлов.
Архив с простым графическим «редактором-симулятором» скриптов.
Архив с исходниками проекта. Папка m8 содержит уже готовый HEX-файл для прошивки микроконтроллера. Для пересборки проекта следует открыть консоль, перейти в эту папку и выполнить 2 команды: make clean make all AVR-GCC версии не ниже 6.3.0 должен быть предварительно установлен в системе.
Архив с проектом KiCAD, включающим схему, плату, папку с готовыми Gerber-файлами и дополнительные файлы.


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

33 8 6
1 0 0