Давайте обсудим алгоритмы анимации моих акрилайтов

+108
INFERIONв блоге Электроброни3 мая 2016, 03:20
Прошло уже полтора года с тех пор, как я задумал собрать вот это:




И наконец-то у меня дошли руки собрать всё в кучу. У меня 15 штук таких подсветок, и я намерен освоить травление высококачественных изображений на акриле с помощью фоторезиста (используя специально написанный мною алгоритм дизеринга изображений). В данный момент я собрал прототип для отлаживания программного обеспечения, и сейчас всей анимацией управляет ПК (через USB). Но идея состоит в том, чтоб при отсутствии сигнала с компа подсветка работала в автономном режиме. С помощью заранее заданных утилитой параметров. У микроконтроллера (ATtiny2313A) имеется 128 байт EEPROM и довольно много флеш памяти (1024 инструкций). Он управляет независимо 15-ю каналами с глубиной 16 бит (и частотой модуляции несколько десятков килогерц), т.е. 5-ю RGB светодиодами независимо (на плате 10 светиков, соединены попарно). Эффекты могут быть какими угодно. От простого изменения цвета до переливания различных участков акрилайта. Платы можно соединять последовательно, наращивая количество каналов. Вопросы заключаются в следующем:

1. Какие будут ваши предложения по алгоритмам анимации? Напомню: 5 независимых RGB каналов на ленте, есть память для хранения пачки параметров.
Чтоб и МК потянул, и было красиво и функционально. Ну или хотя бы предложите какие-нибудь интересные, на ваш взгляд, варианты анимации. Мне на ум приходит только FM-модулятор, как в плагине sytrus к FL Studio, к примеру.

2. У меня нет опыта работы с графическим интерфейсом в прикладном ПО под винду. Всегда обходился консолью, но к данным акрилайтам необходимо написать что-нибудь удобное для обычных пользователей. Может ли мне кто-нибудь помочь с этим? На плюсах… Сам акрилайт система видит как Virtual COM Port, общаться с ним не проблема.

Исходниками проекта я, естественно, со всеми поделюсь. Фишка этой подсветки в компактности. Она имеет ширину 6мм и высоту 2мм. Приклеивается герметиком к торцу акрилайта и дополнительно фиксируется ножками самого акрилайта. Шнур тонкий, мягкий, трёхпроводной, на обратном конце — USB штекер. Должно получиться аккуратно и думаю в различном крафте пригодится. Буду благодарен за помощь, жду ваших комментариев. Спасибо.

31 комментарий

Класс! Нет слов)
Hachirocku
+1
Сам акрил ревекторил, гравировал и вырезал VGT ещё полтора года назад. Из моего тут только идея и реализация подсветки, которая и потребовала таких мелких аккуратных ножек.
INFERION
0
Впечатляет! Только не совсем пойму, картинка на акриле засвечивается только вот этой платой с десятком светодиодов или что-то еще подсвечивает дальнюю часть гривы слева?
Valyncer
+1
Только этой платой. У акрила критический угол полного внутреннего переотражения меньше 45-ти градусов (42,5, если быть точным), поэтому свет с торца попадает в световую ловушку в толще листа акрила и рассеивается только на неровностях (гравировке). Поэтому подобные вещи так и подсвечиваются по всей площади.
INFERION
0
Окай, понятно) Насчет анимации — я б сделал если умел) плавное мерцание, когда первые 100 мс (к примеру) четные огни горят на полную, затем 100 мс на половинной мощности, нечетные — в обратном порядке, чтоб получить что-то вроде лампового свечения элт-трубок, только это наверно лучше смотрелось бы с горизонтальным расположением подсветки. Ну и три режима работы девайса:
1) Обычное свечение, достаточно лишь подать питание на ленту и МК
2) МК управляется через комп в реальном времени — тут уже и цветомузыки можно пилить
3) МК запоминает у себя в постоянной памяти какой-нибудь простой алгоритм и мерцает огнями согласно ему
Valyncer
+2
2-й пункт реализован с самого начала. Комп без проблем управляет всеми каналами со скоростью, с какой позволяет интерфейс (115 килобод/с). 3-й то я как раз и хочу реализовать, но мне нужно придумать набор параметров, которыми можно было бы максимально гибко настраивать режим. Записать в программу заранее заложенные анимации и просто выбирать их — проще всего, но не гибко. Нельзя записать анимацию, которую не будет поддерживать контроллер. Хотелось бы реализовать универсальное решение. Набор каких-нибудь генераторов и мультиплексоров, чтоб можно было параметрами задать любой тип модуляции яркости всех этих каналов.
Ну а первый режим ненужен. Что мешает обычное свечение задать в 3-м?
INFERION
0
>Ну а первый режим ненужен. Что мешает обычное свечение задать в 3-м?
Это на случай, чтобы подсветку можно было подключить, например, к зарядке от мобильного. Хотя да, можно же этот режим задать по умолчанию в конфиге МК и потом уже при необходимости поменять его на что-нибудь замороченное.

>Нельзя записать анимацию, которую не будет поддерживать контроллер. Хотелось бы реализовать универсальное решение. Набор каких-нибудь генераторов и мультиплексоров, чтоб можно было параметрами задать любой тип модуляции яркости всех этих каналов.
Т.е сейчас всем рулит именно комп? Если например, в память МК записать массив навроде (ID пары диодов котрую нужно зажечь, RGB-код, время свечения указанной пары) и все это поместить с разбором в бесконечный цикл — сможет ли устройство без участия пекарни просто хотя бы зажечь указанные диоды?

И да, демо-видео было бы кстати. Я если честно, не вкуриваю, какие типы модуляции есть и как они выглядят)
Valyncer
+2
Сейчас лента работает по принципу сдвигового регистра с модуляторами. Комп прогоняет пачку байт через ленту, они проходят через буфер на 15 байт и вылазят с другой стороны ленты на Tx линию. То что оказалось в промежуточном буфере (15 байт) — защёлкивается в модуляторах как только данные перестают слаться на Rx линию с компа, и в этот момент картинка меняется. Дальше ничего слать ненужно — будут продолжать гореть определённые каналы с определёнными яркостями. Но до тех пор, пока есть питание. Память энергозависима. Это самая простая и гибкая реализация, но работающая только с мастер-контроллером. Что-то подобное используют смарт-леды в светодиодных уличных панелях. Сейчас я переписываю код так, чтоб модуляторы и обмен данными висели на прерывании таймера, а в фоновом режиме выполнялся сложный медленный код. Сам протокол обмена данными я тоже изменю. У МК есть энергонезависимая память, но у неё низкая скорость и очень маленький ресурс, поэтому писать в неё нужно что-нибудь только при необходимости (например, при нажатии на кнопку «ОК» в софте после конфигурации).

Если бы типы модуляции были мне уже известны — я бы не создавал этот пост. Сейчас можно абсолютно всё, т.к. есть комп. Задача — максимум возможностей перенести в условия дефицита ресурсов. Как памяти, так и вычислительных возможностей МК. Для этого мне нужно сообразить что вообще имеет смысл использовать в автономном режиме.
Как выглядят типы модуляции? Ну вот предлагайте, а я реализую на компе и запишу на видео. Сам я хочу попробовать бегущую волну и шум с закосом под горение языков пламени.
INFERION
+2
Ябпосмотрел на реализацию переливания как у надписи Lunar Ball в одноименной игре ( www.youtube.com/watch?v=cd2byIgxZn0 )
Valyncer
0
Ну это совсем просто. По-моему, даже китайские контроллеры светодиодных лент так умеют.
INFERION
0
А можно сделать неравномерный случайный период между сменами цветов?
Valyncer
0
Можно всё, но есть ли в этом смысл? Медленное плавное движение цвета по всему спектру вполне гармонично смотрится.
INFERION
0
Из готовых анимаций я с самого начала хочу реализовать бегущую волну (как цветовую, так и яркостную), возможность подмешивать шум (как цветовой, итак и яркостный), напоминающий горение пламени, да. Ну и просто вот сейчас оно у меня в качестве ночника работает с плавным переливанием всех цветов. Я решил подавать трёхфазный ток (синусоидальной формы), т.к. он наиболее мягко замещает все цвета, но не обеспечивает 100% контрастности. Обычно в таких задачах подают ток треугольной формы, но мне поведение такой анимации кажется жестким, раздражительным.
Можно реализовать несколько генераторов (шума, синуса, треугольника, меандра, пилы и т.п.), частоту и амплитуду которых можно задавать регистрами. А на выходе всё это микшируется отдельными регистрами и управляет яркостью и/или цветом.
INFERION
+2
ATtiny2313A, норм
idem_id
+1
Видео с анимацией, тут нет. А так хотелось увидеть, так сказать, в действии.
OSENSEI
+2
Могу записать, У меня есть несколько программ анимации давно уже. И даже видео с самым первым прототипом. Но я хотел видео выкладывать уже когда действительно будет что показывать. И в другом блоге (крафтеры и рукоделы).
INFERION
0
Какой максимальный потребляемый ток получился?
kt315
+1
10 светодиодов, 30 кристаллов, по 4мА на кристалл в среднем. МК жрёт миллиампер 6...8 и 15мА потребляет FT232RL в USB штекере. Получается до 150ти миллиампер.
INFERION
0
Возможность программировать это пользователю.

Лично я предпочитаю радужное переливание… Т.е. чтобы красный плавно смещался на место фиолетового, оранжевый — на место красного и т.д. (или в обратном направлении).
В случае с Луной можно сделать переливание гривы. Но тут грива и голова — на одном слое
Farxial
+2
Ну так это переливание софтом задать можно. У меня он сейчас в таком режиме и работает. И да, деталь однослойная, так что и подсвечивать её участки по-разному можно только условно…
INFERION
0
В общем, я уже запилил пачку анимаций с использованием одного лишь генератора синуса. Напишу генератор шума и запишу ряд видео с различными комбинациями. Попробую смонтировать их в один ролик и выложу уже ближе к утру…
INFERION
+1
Ночной житель
хехе
VGT
0
Фиг там… Очень мало ресурсов, мои хотелки «православно» реализовать сложно. ОЗУ сильно поджимает, поэтому придётся генераторы синуса вместо алгоритмических реализовывать табличные (меньше динамических данных, а флеша пока хватает). Пытаюсь найти место для генератора розового шума, чтоб имитировать эффект огня…
INFERION
0
Вот чому никто не запилит нормальные микросхемы генерации синуса?
Farxial
0
Да без проблем генерируется синус любым куском говна, просто мне тут нужно 15 каналов генерить. 16-ти битных. Это по 4 байта памяти на канал. А у МК ОЗУ всего 128 байт. Если делать таблично, то в флеш закидывается массив а в ОЗУ достаточно хранить всего-лишь по байту на канал. В один байт поместится 256 ступенек (дискретов) этого синуса, чего для более менее плавной анимации должно хватить. Просто это не так интересно, как генерировать синус на лету.
INFERION
0
Вспомнил, что ты есть, перечитал еще раз, и заинтересовался а как на акриле травят изображения я не интересовался (травил только металлы) Есть идея по управлению но она банальная, Травим или делаем еще как акриллы с Дитзи она же Дёрпи и держащей в руке палку для пузыриков и сами пузырики, затем делаем анимацию как она их выдувает, так называемый динамический акрилайт, но это требует наверное пакет из акрилайтов небольшой толщины и послойную подсветку, а и пузырики можно разными цветами подсвечивать.
OSENSEI
0
С пакетами у нас любит VGT возиться, ему только подсветку нужную сделай и он с удовольствием потратит своё время :). Я пока лучше более базовыми «кирпичиками» позанимаюсь. Если травить, то экспонировать изображение лучше лазерным проектором. У меня есть гальво, оптика, фиолетовые мощные лазеры… Осталось от прошлого увлечения. Как руки дойдут — соберу для этого всего контроллер на STM32 и DrMOS'ах. Можно будет и для фотополимерного 3D принтера юзать, и для нормального рисования дорожек на печатных платах…

P.S. А подсветку я таки закончил, и SviMik софт на ПК написал для управления ею. В 2313 влез только синтезатор синуса, а шума увы… Акрилайты VGT уже даже прислать мне успел, это всё осталось только собрать в кучу. Думаю до Бронукона успею…
INFERION
0
Воу, тогда буду ждать, когда пройдет бронукон чтобы увидеть. Раньше смысла видео нет выкладывать наверное.
OSENSEI
0
Да я б выложил, просто сейчас снимать нечего ). Нужно докупить детали собрать всё это для начала.
INFERION
0
Еще круто было наложить цвета в акрилайте так чтоб получить цветовую гамму пони, но это наверное сложней либо потребует много попилов или пакетов ))
OSENSEI
0
Вы там LED-экраны ненароком не изобретите!
Nirton_the_brony
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.