Pull to refresh

Механическая видеостена с ядерным Ambilight на 2300 зон

Level of difficultyEasy
Reading time8 min
Views51K

(на всякий случай, ссылка на видео: https://www.youtube.com/watch?v=N8NRuhs1RoU)

Однажды я подбирал себе новый монитор. Закончилось всё чудищем во всю стену из трёх телевизоров с ядерной 2318-зональной подсветкой 40000 люмен на STM32.

Список всех частей

Зачем?

Сейчас, когда подбираешь экран для максимального погружения, приходится выбирать между мониторами-сосисками 32:9 и телевизорами: производители внезапно и неожиданно заметили, что иногда телевизоры используют для игр, и стали пихать туда игромониторные функции. В первую очередь - это отключение всяческих улучшателей, уплавнялок и других функций: благодаря этому, картинка выводится оригинальная, плюс уменьшается задержка вывода изображения. И если качество картинки у такого телевизора хорошее (привет, OLED/QLED), то чем он тогда не монитор?

Сосиска 32:9 даёт площадь двух обычных экранов и усиливает окружение за счёт изогнутости
Сосиска 32:9 даёт площадь двух обычных экранов и усиливает окружение за счёт изогнутости

Для расширения обзора существует ещё вариант с тремя мониторами, который, из-за появления в продаже экранов 32:9, теряет популярность. В итоге ты выбираешь - либо у тебя экран большой, либо обзор.

Три экрана - тема довольно старая, а вот телевизоры ставить на стол как монитор стало возможным только после появления 4K, ибо плотность пикселей
Три экрана - тема довольно старая, а вот телевизоры ставить на стол как монитор стало возможным только после появления 4K, ибо плотность пикселей

Если говорить только о работе за ПК, без каких либо игр - то тут проблем нет, мы можем поставить кучу разных экранов, поворачивать их вертикально и размещать как угодно, расширяя место на рабочем столе столько, сколько нам нужно. В этом плане 4K и 8K телевизоры также хороши - они дают большую площадь рабочего стола без рамок и отличное качество изображения. Мы можем просто взять кучу хороших телевизоров и разместить их, как захочется.

Но вот с играми сложнее - игр, которые сознательно могут использовать несколько экранов, единицы. Исчерпывающее большинство игр работает только с одним монитором. Поэтому, у нас выбор - или один большой телевизор, или мониторососиска.

А есть ещё один вариант - три одинаковых экрана + специальный софт.

В этом случае, обычно, объединяют экраны в один виртуальный, и игра по-прежнему думает, что она запущена на одном мониторе, правда, очень-очень длинном, а драйвер-обманщик раскидывает картинку на три физических экрана. В 3D играх, при этом, картинка будет рендериться с очень большим углом обзора, и края картинки будут растянуты. Это немного непривычно, но не критично - когда играешь на трёх экранах, ты смотришь в центр, а боковые экраны отвечают за периферическое зрение. Хотя, конечно, если приложить усилия, растянутость и другие искажения картинки можно тоже убрать.

Если хочется и панорамности, и размера, и качества - то тут только три телевизора. Потому что мониторососисок с диагоналями 100-200 дюймов в продаже просто нет. Да и они бывают только с соотношением сторон 32:9, шире не выпускаются. А мы хотим 48:9.

Шейдеры - хороший способ генерировать кучу контента на всю площадь. Если GPU не порвётся, разумеется.
Шейдеры - хороший способ генерировать кучу контента на всю площадь. Если GPU не порвётся, разумеется.

Это не первая трёхэкранная конфигурация в моей жизни — до этого я сидел за тремя 24 дюймовыми TN‑мониторами, которые умели в стереоскопическое 3D. Как и 120 Гц, три монитора — это хорошо, и отвыкать от этого уже не захочется. Правда, новое железо, к сожалению, не умеет в стереоскопию (есть желание это исправить, правда, занятие обещает быть по сложности и боли сопоставимым с созданием подсветки).

Один из ключевых моментов — нынешние ТВ могут в задержку ~5 мс и честную частоту обновления 120 Гц. Человеческому глазу, конечно, достаточно 24 Гц, но увидеть мы можем и 1000, и даже 10 000 Гц, поэтому 120 Гц — весьма хорошая функция.

Три телевизора дают возможность получить максимум реализма, атмосферности и погружения, который можно получить без VR. Виртуальная реальность, при всех её бесспорных плюсах, на текущем уровне развития, имеет и минусы — ужасный угол обзора и пикселизацию. Плюс на тебе постоянно надеты всякие штуки. То качество, чёткость и углы обзора, который дают три 4K OLED HDR телевизора, даже близко не достижимо современными гарнитурами VR, к сожалению. В будущем, разумеется, эти минусы сойдут на нет, но пока этому препятствуют не только дисплейные технологии (хотя на горизонте маячит MicroLED), но и производительность видеокарт. Иными словами, три телевизора с подсветкой — не хуже и не лучше VR, это как‑бы отдельная, параллельная ветка эволюции. VR погружает тебя самого в виртуальный мир, а эта механическая простыня — всё помещение целиком, вместе с содержимым. На мой взгляд, в будущем, VR сможет это всё вытеснить, хотя появление голографических дисплеев этому будет противодействовать.

Места как на 12 обычных мониторах и минимум рамок. Впрочем, уже есть мысли убрать рамки совсем при помощи селенита, оптоволокна и светодиодных лент
Места как на 12 обычных мониторах и минимум рамок. Впрочем, уже есть мысли убрать рамки совсем при помощи селенита, оптоволокна и светодиодных лент

За компом можно работать не только в одиночку, но и вдвоём или даже втроём: три мышки, три клавиатуры и тул MouseMux дают три курсора на одном рабочем столе. Для моего поделия это более чем актуально — ширина экрана почти 4 метра. Курсоры не привязаны к телевизорам и могут ходить друг другу в гости. Можно открыть три VisualStudio и параллельно писать в них код на трёх клавиатурах. Фактически, это трёхместный комп.

MouseMux делает несколько курсоров
MouseMux делает несколько курсоров

Получилась механизированная HDR‑видеостена на 11 520×2160 пикселей с суровой двухконтурной подсветкой на 2318 независимых зон — она очень яркая и светит не только в стену, но и в пол, потолок и боковые стены. Заливает светом всё, до чего дотянется. По совместительству, эта подсветка — мой HelloWorld в мире контроллеров.

Когда комп не используется, экраны автоматически паркуются вдоль стены, а подсветка плавно приглушается
Когда комп не используется, экраны автоматически паркуются вдоль стены, а подсветка плавно приглушается

Краткие ТТХ

Экраны

  • 3 x LG OLED C1 (4K 120 Hz HDR 10bit RGB HDMI 2.1)

  • Объединены в цельный виртуальный экран

  • Суммарное разрешение: 11520x2160

  • Экраны установлены на специально спроектированных кронштейнах

  • Время парковки/полного открытия боковых экранов - 12 сек, можно управлять независимо, можно двигать руками. Когда двигаются, громко стрекочут шестернями и бесят. Думаю, как решить проблему.

Подсветка Ambiknight

  • Ленты RGB (не RGBW) WS2812b, 144 диода на метр, без влагозащиты (охлаждение важнее)

  • Независимых зон подсветки: 2318

  • Пиковая яркость: ~40 000 люмен

  • Максимальное энергопотребление: ~440 Вт

  • Два контура. Один светит назад, второй в стороны. Подсветка может создавать градиенты от пола до потолка, например, имитировать зарево

  • Число цветов: 16,7 млн (8 бит/канал, RGB)

  • Максимальная частота обновления: 40 Гц (производитель говорит до 30, но по факту работает 40)

  • Число физических сегментов лент: 36

  • Число отдельно управляемых лент: 17 (некоторые сегменты цепляются друг за друга и работают как 1 лента)

  • Контроллер: STM32F072RB Discovery (да, я уже в курсе, что надо BlackPill :3 )

  • Питание: три блока по 5В 40А, каждый отвечает за подсветку на своем экране

  • Ленты размещены на специально спроектированных рамах

Суммарно экраны с подсветкой могут кушать до 1500 Вт, но в среднем обычно 200-300 Вт
Суммарно экраны с подсветкой могут кушать до 1500 Вт, но в среднем обычно 200-300 Вт

Как работает

Телевизоры подключены по оптическим HDMI кабелям к ПК через специальные переходники, и объединены драйвером видеокарты в единый виртуальный монитор. Игры разворачиваются на все три монитора, окна программ — нет, т.к. драйвер кое‑что меняет в поведении Windows + я использую софтину FancyZones/PowerToys чтобы поделить экран на 50 виртуальных областей и MouseMux чтобы можно было сидеть толпой за одним компом. В итоге и работать, и играть хорошо. Кино разворачивается на весь экран, насколько это для него возможно — есть мысли проработать этот вопрос нейросетями или чем‑нибудь в таком духе.

Все части пазла - HDR, 120 Гц, 10 бит, полный диапазон и разрешение - заставить работать вместе не так просто, как кажется на первый взгляд. Постоянно что-нибудь хочет отвалиться.
Все части пазла - HDR, 120 Гц, 10 бит, полный диапазон и разрешение - заставить работать вместе не так просто, как кажется на первый взгляд. Постоянно что-нибудь хочет отвалиться.

За управление приводами кронштейнов отвечает отдельный выделенный контроллер. С помощью хоткеев, GUI или пультов можно регулировать углы поворота боковых экранов — вместе или по отдельности. При запуске боковые телевизоры сами открываются, при выключении, или когда запускается экранная заставка — паркуются вдоль стены. Пока активна экранная заставка, подсветка плавно приглушается.

Кронштейны и рамы лент проектировались с нуля, кое-где даже пришлось в 3D печать из алюминия
Кронштейны и рамы лент проектировались с нуля, кое-где даже пришлось в 3D печать из алюминия

Ленты стоят на специально изготовленных рамах из алюминия. Неожиданным оказалось то, что моделил я эти рамы гораздо дольше, чем кронштейны для экранов, хотя рамы, как бы, вообще не шевелятся, и должны быть простыми. Пару железяк даже пришлось печатать. Подсветка хорошо работает при любом расстоянии до стены, и суммарно заполняет почти половину поверхностей в комнате, остальное покрывает отражённый свет. Контуры - дальний и ближний - работают независимо.

Подсветка вместе с экранами может создавать в комнате любую атмосферу и настроение
Подсветка вместе с экранами может создавать в комнате любую атмосферу и настроение

Концептуально, работает подсветка по классической схеме: на компе стоит софт, он анализирует картинку на экране и формирует данные для контроллера - какой цвет должен быть у каждого из 2318 диодов. Эти данные через гальваническую развязку по длинному USB проводу отправляются в STM32, а он уже раскидывает данные на 17 лент параллельно через DMA по коаксиальным проводам - и так 40 раз в секунду. Один контроллер централизованно обслуживает ленты на всех трёх оледах.

Углы рам подсветки скошены не только для того, чтобы не цепляться за мимочеловеков, но и чтобы направить больше света в отдалённые части помещения. Впрочем, левый телевизор всё равно старательно вычёсывает штору и размахивает потом прилипшей к диодам мохнёй
Углы рам подсветки скошены не только для того, чтобы не цепляться за мимочеловеков, но и чтобы направить больше света в отдалённые части помещения. Впрочем, левый телевизор всё равно старательно вычёсывает штору и размахивает потом прилипшей к диодам мохнёй

Поскольку это мой первый раз с контроллерами, подсветка - это много-много боли. Софт на компе и прошивки контроллеров пришлось делать полностью с нуля: всё, что существует готовое, вплоть до библиотек работы с лентами, не подходит под пару тысяч диодов и разрешение в 25 мегапикселей, не говоря уже о всяких готовых коробочках и приложениях.

Пробовал Arduino, потом Rasberry Pi 4B, писать драйверы под линукс со всякими блокировками прерываний, думал уже ставить RTOS или вообще руками на FPGA расшифровывать HDMI 2.1, или посадить каждую ленту на свой контроллер с WiFi и через отдельный роутер ими управлять. Но всё-таки, у меня не получилось так жестко тупить длительное время, и однажды я решил всё же попробовать STM32. Плюс ещё много проблем по питанию - больше 80 ампер как-никак. Сжёг 5 контроллеров и пару лент, припаял пару сотен проводов и уничтожил тонны канифоли с припоем. В конце концов, оно заработало.

Во время работы подсветка ведёт себя спокойно и не мешает. Основная рабочая зона - центральный экран и ближайшие половины боковых экранов. Остальное - для вторичных окон.
Во время работы подсветка ведёт себя спокойно и не мешает. Основная рабочая зона - центральный экран и ближайшие половины боковых экранов. Остальное - для вторичных окон.

Когда работаешь, подсветка не расширяет изображение, а просто выводит всякие плавные спокойные штуки - градиенты, радуги-переливы, вот это всё, чтобы не отвлекать. Запускаешь игру/кино/шейдер - тогда уже активируется анализ картинки.

В софте, по мере эксплуатации, я наделал кучу настроек для цветокора отдельно дальнего и ближнего цвета, и, разумеется, божественный дизайн, потому что делал для себя и по-быстрому :)

Зато работает.
Зато работает.

Написано на C#, для захвата используется DirectX OutputDuplication, потом картинка уменьшается в 400 раз через Direct2D, потом переходит в ОЗУ, дальше картинку подхватывает и крошит туча очень оптимизированного и многослойного unsafe кода, по итогу отправляет пакетик в 6954 байт по виртуальному COM-порту на 6 млн бод в STM32, оттуда через DMA всё разлетается по лентам. CPU оно не грузит (поэтому C++ тут нет), а вот видеокарте, всё равно, приходится несладко.

Тут важно понимать - оно не просто должно успевать переваривать более 750 мегапикселей в секунду - оно должно это делать в фоне, чтобы не мешать компу делать основное дело.

Заключение

В ходе постройки этого компа пришлось делать много разных штук из разных областей: подбор телевизоров, выгорание OLED, пляски с подключением, проектирование и изготовление рам и кронштейнов, механизация, пайка, электроника, программирование, монтаж, прошивка контроллеров, работа с DirectX и создание драйверов под линукс, 3д печать по металлу и ещё много всего - чем глубже в лес, тем толще партизаны.

Если хабрасообществу данная тема покажется интересной, то могу раскрыть её подробнее в следующих частях.

Tags:
Hubs:
Total votes 111: ↑108 and ↓3+132
Comments136

Articles