Ambilight своими копытами! [v1.1]

+165
в блоге Электроброни
Говорят, не стоит забирать с собой в Новый год незаконченные дела. Поэтому, наконец-то, мне удалось заставить себя завершить давно начатый проект обвешивания своего окна в виртуальный мир ambilight-подобной системой. Столкнувшись с, казалось бы, нерешаемой проблемой, проект был заброшен, но снизошло чудо и решение оказалось чрезвычайно простым!



А что из этого получилось и как сделать такую же — Прошу под кат :)



Всё это началось полгода назад, когда, натолкнувшись на отечественный проект paintpack, я узнал, что хвалёная ambilight, фирменная технология Philips «расширения» изображения за границы экрана, доступна каждому. Сие поделие и было куплено. На первый взгляд, конечно, производит впечатление!

//к сожалению, видео из ВК не прикрепляется, поэтому оставлю в виде ссылки: vk.com/video107108312_456239032

Однако, у этого paintpack есть один существенный недостаток: он создаёт всего 10 независимых зон, которые, в свою очередь, создаются отрезками RGB лент. Погуляв по интернетам, натолкнулся на множество DIY версий на базе великолепной штуки Arduino! загуглено-сделано: воистину волшебная светодиодная лента WS2812b и Arduino отправились ко мне!

Алиэкспрессы (нет, это не реклама)

Ссылки:
ru.aliexpress.com/item/Free-Shipping-New-Pro-Micro-5V-16MHz-ATMega-32U4-Module-with-2-row-pin-header-For/2035459911.html?spm=2114.13010608.0.0.koW8aB
ru.aliexpress.com/item/DC5V-1m-4m-5m-WS2812B-Smart-led-pixel-strip-Black-White-PCB-30-60-144-leds/32337440906.html?spm=2114.13010608.0.0.koW8aB&detailNewVersion=&categoryId=200001051


На самом деле, можно использовать почти любую не совсем оригинальную arduino, Важно, чтобы она была на основе чипа AtMega32U4, но никак не ~16U2 поскольку в таком случае аппаратных возможностей arduinы не хватит на обработку всех светодиодов :(

Чем же волшебна эта лента? А тем, что в ней реализована давняя мечта: независимые светодиоды! В каждом из них свой микроконтроллер, который из всего потока данных отбирает предназначенный ему пакет данных с цветом. И это создаёт огромный потенциал для создания чего угодно, даже низкоDPIшных дисплеев!

примеры




А вот и посылка нагрянула!
Спойлер


На фотографии от ленты осталось метра полтора, изначально в ней было ровно 5 метров

Этапы:
1 — замерить длину и ширину экрана монитора

ну тут несложно, берем рулетку и отмеряем длину и ширину экрана, либо идём сюда и узнаем нужные
параметры

2 — разрезать ленту по размеру экрана и последовательно соединить отрезки
по полученным данным отмеряем нужную длину ленты и отрезаем. Далее раскладываем так, как это будет расположено за монитором. Важно!
необходимо, чтобы лента распологалась последовательно, по стрелочкам
Стрелочки


получится что-то вроде этого:
Осторожно, мыло!

3 — присоединить Arduino и ленты между собой
Собственно, самая трудоёмкая часть. Я соединял по такой схеме:
Схема


Важно! Земля у arduino, ленты и питания должна быть одна! Это необходимо для корректного распознавания ленты ардуиной
Важно[2]! Чем толще провода, тем лучше! Рекомендую использовать провода от Molex переходников, с ними потери будут минимальные!

В качестве питания я использовал зарядки от мобилок и раскуроченные USB провода. Желательно, конечно, поставить нормальный блок питания
на 5 вольт, но у меня и так работает с:

После загрузки первого попавшегося FastLED скетча в ардуину, всё это великолепие
стало выглядеть так:

Спойлер


Как загрузить скетч в ардуино? Очень просто! Для начала надо поставить программу c
официального сайта, в моём случае версию 1.6.10, поскольку последующие версии работали у меня некорректно :(
Установить методом «Далее->Далее->...->Готово», закрыть программу, перейти в папку со скетчем, найти там файл с расширением .ino,
даблклик, затем в открывшемся окне свежеустановленной программы Инструменты->выбираем порт с нашей ардуиной и кликаем на «загрузить».
Если всё прошло хорошо, то в конце лога будет что-то вроде «Done» или «Complete». Всё, плата готова к работе!

Именно тут у меня и возникла проблема, поскольку по какой-то причине fastled гонял радужный узор, но ни в какую не хотел делать что-
либо ещё с более чем ~60 светодиодами (у меня их оказалось 136). Ну и ладно, оставил пока так. Повесил ленты на двухсторонний скотч, на
заводском клее ленты отказались держаться

Промежуточный результат


Далее дело было заброшено, но недавно-таки я натолкнулся на великолепную библиотеку Adalight, которая-таки у меня заработала в связке с приложением Ambibox! Это был запах… Победы! :)

Чтобы всё заработало так как надо, нужно изменить 3 строчки в этом скетче:
1- выставить количество светодиодов
2- выставить номер того порта, от которого идёт «зеленый» провод схемы, он же DATA
3- выставить яркость в пределах от 0 до 255. Настоятельно рекомендую не увлекаться, попробуйте сначала яркость 100. И если всё работает
стабильно, нигде ничего не мерцает и не меняет цвет, можно и поднять этот параметр.

Спойлер


После чего загружаем этот скетч в нашу ардуину, потом идём в Ambibox и проводим настройку там: Сначала выбираем устройство
(adalight), выставляем COM порт ардуины (номер USB порта, к которому она подсоединена), количество светодиодов, а затем в мастер настройки зон.

Спойлер


Затем идём во вкладку «дополнительная настройка зон», компенсируем цвет стены за монитором, играемся с настройками… И проверяем
результат!



//Если вдруг видео отвалится, то вот ссылка: youtu.be/XY9VaYNC-PM

ПостскриптумыДа, я знаю, что инструкций на подобные штуки в интернетах много, но почему бы не добавить ещё одну, да ещё и с теми нюансами, которые
кому-нибудь (например мне:) ) были непонятны…
И отвечая на вопрос «зачем?»: данная система это не «нужно», это «можно!». Помимо снижения нагрузки на глаза при сидении в темноте,
появляется некоторая «атмосферность», которую трудно передать словами:)
И да, я сдуру удалил первую версию поста, поскольку половины всего там почему-то не оказалось… Впредь обещаю быть внимательнее >_<


и самое главное!
— С наступающим Новым Годом, Табун! Пусть в наступающем году будет больше светлых моментов^^

Fix1.0: починены гиперссылки
Fix1.1: добавлены некоторые пояснения
Fix1.2: добавлены ссылки на али

45 комментариев


Скидыдыщ в ленту!
David2015
+5
Тоже задумывался над таким вариантом, но ПК и так на пределе своей производительности и нужно посмотреть как оно с двумя мониками работает
Hoopick
0
i5 2320, кушает 5-10% цпу независимо от разрешения и количества зон, надо пробовать…
David2015
0
у меня проц-мутант, 3х ядерный феном, с разблокированным 4ым, теперь именуется В95, даже на 3ГГц частенько проседает… наверное все таки нужно делать апгрейд
Hoopick
0
тю, этот монстр влёгкую потянет такую систему :)
David2015
0
Интересно было почитать. Недавно делали макет-визуализацию для ПФР. Там тоже RGB-лента, блоки питания и чип-контроллер. Меня работа нашего электронщика заинтересовала.
А тут твой пост. Лови плюсов.
KaspianMonster
0
— Спасибо^^
Тут прелесть в том, что единственное требование- уметь держать в руках паяльник, всё остальное уже готово, «бери и делай». Вовсе необязательно быть электронщиком/сварщиком/мастером Йода
David2015
0
В последние дни, пока игрался на работе с адресной лентой и pro mini, как раз хотел загуглить на тему ambilight (каникулы — будет время смонстрячить), но в силу лени копыта так и не дошли). Так что спасибо — инструкция шикарна и ко времени)
brass-cheetah
0
Всем котиков под новый год, поняшки!
EpicMan2
-8
Просто потрясно!
Жаль времени сейчас нет, как-нибудь обязательно зумучу себе такое же.
mutronics
0
Годная тема. Ещё бы рамку самого монитора более тонкую.
ameg0
0
Всё-же напильником это не исправить :D
Другу тоже сделал тпкую штуку и у него, как раз, монитор с тонкими рамками
Получилось вот так:
David2015
0
Зря вы сомневаетесь в возможности кастомизации мониторов напильниками.
Я так думаю, существует способ крепления самого монитора без защитного корпуса на стену, дабы избавиться от рамки совсем.
Кстати, может мне показалось, но у системы установленной у друга имеется «мертвая зона» примерно посередине снизу.
ameg0
0
там не мертвая зона, там вообще нет ленты, ибо форма не позволяет прикрепить туда кусок без жутких извращений
David2015
0
Uh, я бы запилил такую вещь себе, но пк даже овервотч не тянет, куда это то.
WintaXP
0
То самое чувство, когда говеная казуальщина для нового железа стала показателем производительности.
KaspianMonster
+2
Ух ты, круто получилось! Утащил в избранное, будет время обязательно попробую сделать=)
sergioahmett
0
Ссылки на продавцов в Али дай, пожалуйста
Sparin
0
Добавил под спойлер «Алиэкспрессы»
David2015
0
По хорошему, необходимо предварительно обрабатывать сам видеофайл, достраивая заэкранное пространство, и после этого выводить в подсветку уже именно это пространство, а не брать цвет с границы видимой области изображения.
INFERION
+1
А если ты не видео смотришь?
koghs
0
А что? Статичное изображение? Оно тоже достраивается математически…
INFERION
+1
Это же прекрасная идея для стартапа!©
Но для этого нужны проекторы и ну очень умный алгоритм обработки изображения, но это уже не DIY проект, доступный каждому «чайнику»
David2015
0
И еще лазеры! Много-много лазеров!

А ваще при современных ценах на мониторы, можно купить 50" телевизор с низким разрешением и повесить его за экраном.
Smikey
0
Одна из идей ambilight — снижение нагрузки на глаза, а сидение перед двумя экранами этому не сильно поспособствует >_<
David2015
0
Если на большом экране показывать приглушенную тень изображения на главном экране? Смысл обойтись без проэкторов, но получить более сложную картинку, чем можно с просто лентой светодиодов.
Smikey
0
Ещё как способствует, если размыть границы нормально. Проектор тут бы хорошо сработал, это да.
INFERION
+1
RGB ленты тоже покатят, и с ними у текущих алгоритмов проблемы имеются. Ну а алгоритм нужен умный, да, который написать достаточно один раз, какому-нибудь умному DIY'еру…
INFERION
+1
Да че там думать, разбить экран на сектора, найти самый встречающийся в секторе цвет и его на светодиод подавать. Или можно света смешивать, тут надо посмотреть что лучше смотрится.
Smikey
0
На сектора разбивают сейчас. На самом деле, подсветка должна сопровождать заэкранное пространство. То, что находится за кадром. К примеру, если луна спускается к горизонту и появляется в кадре сверху — в этой области подсветка должна отобразить эту луну заранее, как бы спускающуюся к монитору, и приобретающую всё более чёткие контуры. Если за экран уходит какая-то сцена — она как бы сдвигается в эту область с подсветкой, размывается и теряет детали, постепенно растворяясь в темноте. Чтоб провернуть такие финты — необходимо заранее достроить изображение в каждом кадре, тут нужны хитрые пространственные (векторные) фильтры. Идея интересная, но реализаций не встречал.
INFERION
+2
Кстати да, такая обработка, одновременно, делает передискретизацию видео. Можно подогнать заодно FPS под собственный монитор, чтоб картинка не дёргалась.
INFERION
+2
Вот пример работы подобного алгоритма:

P.S. Уже отвык, что редактировать сообщения можно. Жаль только время редактирования ограничено…
INFERION
+2
В играх эта штука будет здорово так мешать: смотришь направо, на стене блеснул прицел снайпера, глядишь, а на самом мониторе ни снайпера, ни горы, на которой он сидел- ничего нет. Только в фильмах, может быть, и то, детали ландшафта/интерьера могут не совпасть и получится нехилый такой brainfuck.
В играх тогда проще поставить 3 монитора, эффект будет куда круче, но тут упрёмся в возможности видеокарты
David2015 Изменён автором
+1
В играх закадровое пространство рендерится непосредственно, так что снайпера ты увидишь за кадром и будешь знать куда поворачивать «камеру». Это как ориентироваться на звук, когда источник за кадром. На мой взгляд — наоборот удобно.
Детали ландшафта/интерьера в фильмах вычисляются по известной информации ровно так же, как мозг бы сам достроил эти детали. К тому же мелкие погрешности вычислений всё равно незаметны из-за низкого разрешения подсветки.
INFERION
0
Тогда уж точно нужно ставить трёхмониторный конфиг и не париться с подсветками
David2015
0
Наверно такая обработка каждого кадра потребует дофига ресурсов (это вообще возможно сделать в реальном времени? То есть скажем видео файл можно просто весь переработать в этот новый формат, а как быть с игрой?), плюс будут всякие артефакты вылазить иногда, сбивающие с толку.
Smikey
0
За ресурсы не скажу, сам ещё не экспериментировал с такими многомерными преобразованиями информации. Видеофайл нужно готовить предварительно, об этом я уже писал. Хотя бы потому, что необходимо наперёд знать что сейчас появится в кадре и откуда, т.е. нужно видеть «будущее» — анализировать сразу весь видеофайл. Артефакты могут возникнуть из-за неправильной записи и/или монтажа самого видео, это да. Основная проблема — алиасинг из-за низкого FPS камеры. Однако, фон то всё равно сильно размыт, как и артефакты вместе с ним.
В играх вообще не проблема — рендерить там можно хоть панораму целиком, в реальном времени. Высокое разрешение не требуется, на этом можно сэкономить.
INFERION
0
Знал что увижу тебя здесь)
Пришёл народ подразнить?)
VGT
0
Идея хороша, но есть два «но»: 1. Комптектуха достаточно дорога для безделушки 2. Софт поедает процессорное время, а это очень, очень плохо.
Про кляксу в центре монитора уже спрашивали?
Equine
0
1)Судя по форумам, CPU отнимает у всех одинаково. Если очень хочется — ставьте плату захвата, разветвитель и HTCP, но это другой уровень расходов и требуемых скиллов
2)полторы тысячи за такую штуку мне отдать не жалко, готовые аналоги стоят гораздо дороже
кусок изоленты отмечает середину экрана, в шутерах помогает
David2015
0
Про изоленту поподробнее. Прям заинтриговал.
KaspianMonster
0
Нубский приёмчик для первичного наведения оружия на противника не используя прицел:)
David2015
0
Иногда бывает встроенная аппаратная поддержка.

6EPKYT:

Пришли 2 геймера покупать Самсунговский моник 22 дюйма, начали проверять на битые пиксели… нашли… один… ровно посередине… Ради прикола решили проверить, действительно ли посередине — перезагрузили комп… и… о чудо — кончик стрелки курсора указывает точно на него!!! Эти идиоты неверили своему счастью, мол в контру играть о@уенно и в прочую @уйню!!! Они меня на руках готовы были носить!

http://bash.im/quote/400360
DDM
+2
ЛОЛ
KaspianMonster
0
Неоновая Мечта…
MetalBlaze
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Скрыто Показать