Адаптивная подсветка телевизора у вас дома
Друзья, сегодня будем создавать амбилайт или технологию адаптивной подсветки, которая была впервые презентована компанией Philips. Амбилайт представляет собой динамическую подсветку, которая “анализирует” цвета отдельных пикселей по периметру изображения экрана и воспроизводит рассеянный свет на поверхность стены за корпусом телевизора, повторяя цвета взятые с периметра. Данный эффект визуально увеличивает размер и световую интенсивность изображения.
Наш самодельный амбилайт не будет работать на обычных телевизорах, которые принимают цифровое или кабельное телевидение. Для этого нам потребуется приставка с медиацентром Kodi, а уже с неё можно брать любой видеопоток и применять данную технологию. Максимальная частота обновления экрана через приставку (x96 Mini) с медиацентром Kodi — 60 Герц.
Что вам понадобится
- Телевизор с HDMI входом (в моем случае это телевизор Sony, 42 дюйма по диагонали)
- Кабель HDMI 1.4
- ТВ-приставка X96 Mini
- MicroSD карта 32ГБ (10-й класс скорости)
- Микроконтроллер Arduino Uno R3
- Кабель USB Tybe A Папа x Папа USB Type B
- Угловые коннекторы для пайки проводов к Arduino Uno
- Корпус для Arduino
- Адресная светодиодная лента WS2812B (60 светодиодов на метр)
- Блок питания 5Вольт, 7 Ампер (один светодиод потребляет 0.2 Ватт)
- Коннектор для блока питания
- Двухжильный провод (для подсоединения к блоку питания и Arduino, диаметр сечения 0.8мм)
- Трёхжильный провод (для соединения углов адресной светодиодной ленты, а также её подсоединению к терминальному 3-х контактному коннектору на заднем корпусе телевизора, диаметр сечения 0.8мм)
- Терминальный коннектор (3-и контакта, для удобного соединения и отсоединения основных проводов от адресной светодиодной ленты)
- Обжимные соединители проводов
- Инструмент для обжима проводов
- Платформы со стяжками или платформы для проводов (для фиксации трёхжильного провода к корпусу телевизора)
- Термоклей для фиксации платформ к корпусу телевизора (родной двусторонний скотч на платформах не держит)
Шаг 1 : Установка медиацентра Kodi на ТВ-приставку X96 Mini
Медиацентр Kodi будет базироваться на LibreELEC или урезанном Linux, достаточным для того, чтобы запускать с него Kodi.
Прошивать X96 Mini мы не будем, а установим Kodi на microSD карту, которую затем вставим в ТВ-приставку и будем с неё грузить Kodi.
Качаем образ Kodi отсюда или отсюда. Затем перезагружаемся в Windows и скачиваем программу Rufus и устанавливаем с помощью нее скаченный образ LibreELEC на microSD карту.
Далее скачиваем файл dtb.img и копируем его в корень на microSD карту перезаписав существующий файл. Вставляем карту в слот для microSD карт на ТВ-приставке.
Далее, берём зубочистку и вставляем её в AV порт на ТВ-приставке и нажимаем ей на кнопочный переключатель, который находится внутри. Удерживая переключатель нажатым, подаём питание на приставку. В данный момент Kodi начнёт загружаться с SD-карты.
Шаг 2 : Подключение пульта дистанционного управления в Кodi на LibreELEC
По умолчанию с приставкой идёт дистанционный пульт управления.
Если вы установите Kodi на LibreELEC, то пульт перестанет работать. Чтобы пульт заработал, нужно скопировать файл remote.conf на приставку. Советую сначала подключить приставку кабелем к роутеру или свичу. Если нужен будет подключение по Wi-Fi, то можете сделать это позднее после подключения пульта дистанционного управления.
На данном этапе вам нужно знать локальный IP-адрес приставки. Сделать это можно, подключив USB клавиатуру к приставке, сначала зайти в Настройки — LibreELEC — Службы с помощью стрелок курсора клавиатуры и выбрав Включить SSH.
Выходить из разделов можно с помощью клавиши ESC, а передвигать бегунки выключателей можно с помощью Enter. Затем таким же способом зайти в Настройки — LibreELEC — Сведения о системе и посмотреть текущий IP адрес приставки.
Копируем файл remote.conf на приставку:
scp ~/remote.conf root@192.168.0.XXX:/storage/.config
где 192.168.0.XXX – адрес LibreELEC в локальной сети
Перезагружаем приставку, пульт должен заработать.
Шаг 3 : Установка службы Hyperion на Kodi
Используя пульт дистанционного управления в левом меню Kodi, заходим в Дополнения, далее выбираем Поиск в правом верхнем углу и набираем в строчке поиска Hyperion.
Жмём Enter, находим данную службу и устанавливаем её (приставка должна быть подключена к интернету через RJ-45 порт или Wi-Fi).
Также советую сразу же настроить вход на ТВ-приставку через SSH с другого компьютера. Для этого нужно прописать статический IP-адрес в самой Kodi и впоследствии заходить на приставку через SSH используя команду в Linux (в Windows это делается через Putty):
ssh root@ 192.168.0.XXX
Пароль по умолчанию libreelec.
Пароль, к сожалению, изменить нельзя, но можно создать ключи шифрования, переместить публичный ключ на ТВ-приставку с того компьютера, с которого вы будете на неё заходить и отключить вход на LibreELEC с паролем. Чтобы так сделать на Linux, открываем терминал на компьютере и вводим:
cd ~/.ssh ssh-keygen -t rsa
Система предложит ввести имя файла:
Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa):
Вводим, например, LE_rsa и нажимаем Enter.
Затем скопируем публичный ключ на LibreELEC:
ssh-copy-id -i LE_rsa.pub root@192.168.0.XX
Далее вводим команду:
ssh-add LE_rsa
Чтобы изменения не сбрасывались после перезагрузки компьютера, открываем файл config:
nano ~/.ssh/config
и вставляем в него строку:
IdentityFile ~/.ssh/LE_rsa
Сохраняем файл.
Шаг 4 : Прошивка Arduino Uno
Подключаем Arduino Uno к компьютеру, открываем Arduino IDE, устанавливаем библиотеку FastLED (Tools – Manage Libraries) и прошиваем микроконтроллер вот этим скетчем.
В данном скетче потребуется изменить три параметра: MAX_LEDS, LED_TYPE и DATA_PIN.
MAX_LEDS – общее количество светодиодов
LED_TYPE – используемый тип ленты (в моем случае это WS2812B)
DATA_PIN – цифровой пин на Arduino Uno для передачи данных (в моем случае это 13-й цифровой пин)
Саму Arduino Uno рекомендую установить вот в такую красивую коробочку.
Шаг 5 : Установка адресной светодиодной ленты и схема подключения
Аккуратно кладем наш телевизор матрицей вниз на пол, желательно на ковёр. До этого тщательно пылесосим ковёр, чтобы исключить любую возможность повреждения матрицы сторонними предметами.
Определяемся с углом начала наклейки светодиодной ленты (у меня верхний правый угол, если смотреть на задний корпус телевизора). Также соблюдайте направление ленты (на ленте оно указано стрелочками), это очень важно.
Ещё количество горизонтальных светодиодов должно быть равным сверху и снизу, количество светодиодов по бокам (вертикальные) может быть разным. Это правило диктуется средой настройки Hypercon конфигурационного файла для службы Hyperion.
Старайтесь максимально близко расположить светодиоды друг к другу в местах угловых стыков, цветовой охват в углах потом будет намного насыщеннее.
Соединительные провода в угловым стыках можно аккуратно уложить, используя платформы со стяжками или платформы для проводов.
Также, рекомендую убрать двусторонний скотч с платформ с помощью бензина Калоша и посадить их на термоклей. Начало и конец любого отрезка светодиодной ленты рекомендую дополнительно посадить также на термоклей.
Начало светодиодной ленты соединяем 3-х жильным проводом с терминальным коннектором, а сам коннектор крепим на задний корпус телевизора с помощью термоклея.
Также, не используйте угловые коннекторы для ленты, как сначала это сделал я.
Я получил очень много проблем даже после пропайки контактов. По какой-то причине при подаче напряжения на ленту на ней постоянно горел зелёным цветом один светодиод. Как только я отсоединил угловые коннекторы и спаял угловые контакты отрезков светодиодных лент обычными проводами, проблема исчезла. Потом пришлось по боковым отрезкам лент добавлять по одному светодиоду сверху и снизу, т.к. угловые коннекторы скрадывали это место.
Рекомендую при каждой пайке прозванивать контакты, чтобы сразу же отсечь дефекты.
Далее, вставляем в Arduino Uno плашку из угловых коннекторов. Рекомендую сразу устанавливать целую плашку, т.к. фиксация коннекторов будет намного лучше, чем их ставить по одиночке.
Припаиваем все провода согласно схеме:
Подавать ток будем с обоих концов ленты, т.к. если подавать с одного конца (в моем случае общая длина ленты 2.7 метра) будет наблюдаться значительное падение напряжения на другом конце и светодиоды будут светить не так ярко.
Для проводов подсоединяющихся к коннектору блока питания и терминальному коннектору на телевизоре рекомендую использовать обжимные соединители.
Шаг 6 : Настройка конфигурационного файла службы Hyperion через Hypercon
Установите Java и скачайте на компьютер (в моем случае это компьютер с Kubuntu) Hypercon для LibreELEC:
sudo apt install openjdk-7-jre cd ~ wget http://releases.libreelec.tv/hypercon-LE.jar
В Windows просто скачайте этот файл по ссылке http://releases.libreelec.tv/hypercon-LE.jar и запустите его. Java можно скачать по ссылке.
Запускаем Hypercon:
java -jar ./hypercon-LE.jar
Откроется красочное окно с целым набором различных вкладок.
Вкладка Hardware:
В Type выбираем Adalight
В Output выбираем /dev/ttyACM0
В Baudrate ставим скорость 460800
В RGB Byte order ставим RGB
В Direction ставим направление ленты. В данном случае направление определяется если вы смотрите на матрицу телевизора.
В LEDs horizontal ставим количество светодиодов одной полоски по горизонтали (сверху и снизу у вас должно быть их равное количество)
В LEDs left соответственно ставим количество светодиодов слева (лево, если смотрим на матрицу телевизора)
В LEDs Right соответственно ставим количество светодиодов справа (право, если смотрим на матрицу телевизора)
В Bottom gap ставим 0, если у вам нет промежутков в горизонтальном участке ленты внизу. Промежуток может быть, если к примеру у вас телевизор стоит на подставке и в этом месте невозможно проложить цельный кусок ленты.
1st LED offset, если поиграться с этим параметром, то можно точно настроить то место, откуда у вас будет начинаться первый светодиод ленты. В моем случае лента начиналась в левом верхнем углу (если смотреть на матрицу телевизора) и потом шла по часовой стрелке.
В Horizontal depth (глубина захвата пикселей изображения по горизонтали) по умолчанию будет стоять 8 процентов и этого значения будет вполне достаточно и его можно не менять.
Тоже самое можно оставить в Vertical depth, по умолчанию там будет значение в 5 процентов.
В Overlap я поставил 20 процентов, чтобы цвета светодиодов накладывались друг на друга на 20 процентов и переходы были более сглаженными.
В Threshold можно поставить 0.5%, это величина начала определения черных полос на изображении.
Вкладка Process:
Отмечаем галочкой Smoothing, если не был отмечен, в Time ставим 70 миллисекунд, а частоту обновления в Update Freq. (Hz) ставим 30. Остальные параметры в данной вкладке можно оставить без изменения.
Вкладка Grabber:
Активируем службы захвата экрана (грабберы) Internal Frame Gtabber и AML Frame Grabber. Интервалы ставим одинаковые в 25 миллисекунд, но приоритет разный. Для внутреннего граббера ставим 891, а для AML граббера 890. При таком расположении приоритетов у меня захватываются практически все фильмы и передачи ТВ без проблем.
Вкладка External:
В данной вкладке можно убрать галочки с Menu, Audio и Pause. В Effect выбрать нужный эффект при старте службы Hyperion, а также выбрать статический цвет светодиодов в Static Color, когда ни один граббер не сможет захватить пиксели с экрана.
Вкладка SSH:
В данной вкладке можно настроить доступ по SSH и автоматически скопировать конфигурационный файл на приставку, но я не рекомендую этого делать, т.к. у меня постоянно копировался файл с какими-то закешированными значениями и пришлось этот файл впоследствии копировать на приставку вручную.
После всех манипуляций, нажимаем на кнопку Create Hyperion Configuration и сохраняем в нужное место на компьютере. По умолчанию имя конфигурационного файла будет hyperion.config.json
Далее, соединяем Arduino Uno c приставкой x96 Mini через кабель USB Tybe A Папа x Папа USB Type B, саму x96 Mini соединяем через HDMI с телевизором. Адаптер светодиодной ленты (предварительно соединив его с лентой) включаем в сеть. Включаем в сеть x96 Mini. Дожидаемся загрузки Kodi.
Скопировать файл на приставку из терминала можно через следующую команду:
scp ~/hyperion.config.json root@192.168.0.XXX:/storage/.kodi/userdata/addon_data/service.hyperion
После внесения изменений заходим на приставку через SSH и перегружаем службу Hyperion следующей командой:
systemctl restart service.hyperion
Пробуем включить какой-нибудь фильм, предварительно скопировав его на флешку и вставив в приставку. Если все сделано правильно, то подсветка телевизора будет динамично изменяться согласно цветам по периметру изображения экрана.
Друзья, на этом все, если возникнут вопросы, пишите в комментариях и я постараюсь на них ответить.
Понравилась инструкция? Тогда поделитесь ей со своими друзьями или попробуйте написать свою собственную!