Адаптивная фоновая подсветка Ambient light

ambilight

Адаптивная фоновая подсветка Ambient light, без преувеличения, потрясающая технология. С такой адаптивной подсветкой меньше устают глаза при просмотре в темноте, усиливается эффект присутствия, расширяется область просмотра изображения и пр. Ambient light применима не только к видео и фото контенту, но и к играм. Реализация такой подсветки на Android TV приставке или Android телевизоре с установленной версией Android выше 5.1(Lollipop) теперь стала возможна благодаря программе Ambient light Application for Android. Далее мы расскажем вам как построить такую подсветку с небольшими затратами у себя дома.

О программе



Ambient light Application for Android является одной из немногих программ для Android, которая позволяет реализовать Ambient light подсветку без использования настольного ПК, как в большинстве прочих вариантов. Ambient light Application for Android имеет три основные режима работы, таких как:

Screenshot_1527689167

!!! Это важно знать !!!
Изображение с ТВ-тюнера не обрабатывается на уровне ОС Android, подсветка с обычными телеканалами работать не будет. Подсветка работает только в приложениях на ОС Android, которые не используют защищенный контент. Производительность 4K зависит только от возможностей оборудования. К сожалению, такие программы, как YouTube и Netflix используют защищенный контент, подсветка в таких программах не будет работать.

SINGLE COLOR MODE — Этот режим позволяет включать всю подсветку одним, выбранным в настройках программы цветом. Данный режим хорошо подходит в качестве ночного освещения комнаты, удивительным образом меняя привычный интерьер.

COLOR EFFECT MODE — Это режим отображения цветовых эффектов. Динамическая подсветка может менять цвета, в зависимости от того, какой из предустановленных эффектов вы выбрали в настройках.

SCREEN CAPTURE MODE — Это, наверно, самый востребованный режим работы подсветки, который позволяет менять её цвета в зависимости от того какой контент в данный момент отображается на экране.

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

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

Screenshot_1527689091

 

На этом изображении показан экран настройки цветовой гаммы, настройки яркости, насыщенности и выбора цветовых эффектов.

Screenshot_1527580065

 

Экран вывода вспомогательной информации — инструкции по сборке аппаратной части, инструкции по настройке аппаратной части, инструкции по настройке программы Ambient light Application for Android.

Screenshot_1526590961

Сборка подсветки



Аппаратная часть

Для реализации понадобится четыре основных компонента:

1. Управляемая светодиодная RGB лента,
2. Блок питания,
3. Микрокомпьютер Arduino,
4. Программа Ambient light Application for Android.

Сначала небольшое количество объяснений.

WS2811 — это трёхканальный канальный контроллер/драйвер (микросхема) для RGB светодиодов с управлением по одному проводу (адресация к произвольному светодиоду). WS2812B — это RGB светодиод в корпусе SMD 5050, в который уже встроен контроллер WS2811.

Подходящие для проекта светодиодные ленты для простоты так и называют — WS2811 или WS2812B.

WS2812B лента — это лента, на которой последовательно размещены светодиоды WS2812B. Лента работает с напряжением 5 В. Существуют ленты с разной плотностью светодиодов. Обычно это: 144, 90, 74, 60, 30 на один метр. Бывают разные степени защиты. Чаще всего это: IP20-30 (защита от попадания твёрдых частиц), IP65 (защиты от пыли и водяных струй), IP67 (защита от пыли и защита при частичном или кратковременном погружении в воду на глубину до 1 м). Подложка чёрного и белого цвета.

Вот пример такой ленты:

WS2811 лента — это лента, на которой последовательно размещены WS2811 контроллер и какой-то RGB светодиод. Есть варианты, рассчитанные на напряжением 5 В и 12 В. Плотность и защита аналогичны предыдущему варианту.

Вот пример такой ленты:

Какую ленту выбрать, WS2812B или WS2811?

Важный фактор — питание ленты, о чём я расскажу чуть позже.

Если у вас дома окажется подходящий по мощности блок питания (часто дома от старой или испорченной техники остаются блоки питания), то выбирайте ленту, исходя из напряжения блока питания, т.е. 5 В — WS2812B, 12 В — WS2811. В этом случае вы просто сэкономите деньги.

От себя могу дать рекомендацию. Если общее количество светодиодов в системе будет не более 120, то WS2812B. Если более 120, то WS2811 с рабочим напряжением 12 В. Почему именно так, вы поймёте, когда речь зайдёт о подключении ленты к блоку питания.

Какой уровень защиты ленты выбрать?

Для большинства подойдёт IP65, т.к. с одной стороны она покрыта «силиконом» (эпоксидной смолой), а с другой есть самоклеющаяся поверхность 3M. Эту ленту удобно монтировать на ТВ или монитор и удобно протирать от пыли.

Какую плотность светодиодов выбрать?

Для проекта подойдут ленты с плотностью от 30 до 60 светодиодов на метр (конечно, можно и 144, никто не запрещает). Чем выше плотность, тем больше будет разрешение Ambient light (количество зон) и больше максимальная общая яркость. Но стоит учитывать, что чем больше светодиодов в проекте, тем сложнее будет устроена схема питания, и понадобится более мощный блок питания. Максимальное количество светодиодов в проекте — 300.

Какой блок питания выбрать для ленты?

Блок питания подбирается по мощности и напряжению. Для WS2812B — напряжение 5 В. Для WS2811 — 5 или 12 В. Максимальная потребляемая мощность одного WS2812B светодиода 0,3 Вт. Для WS2811 в большинстве случаев аналогично. Т.е. мощность блока питания должна быть не ниже N * 0,3 Вт, где N — количество светодиодов в проекте.

Например, у вас ТВ 42″, и вы остановились на ленте WS2812B с 30 светодиодами на метр, вам нужно 3 метра ленты(все 4 стороны экрана). Вам понадобится блок питания с напряжением 5 В и максимальной мощностью от  5 В / 6 А. В случае если на нижней горизонтали экрана меньше диодов, чем на верхней, это всего порядка 60 светодиодов — мощность от 5 В / 4 А.

Пример блока питания для ленты:

Какой микроконтроллер выбрать?

Управлять Ambient light будет микрокомпьютер Arduino. Arduino Nano на Алиэкспресс стоит около 2,5$ за штуку.

Пример микроконтроллера:

Затраты на проект для обычного телевизора 42″:

12$ — 3 метра WS2812B (30 светодиодов на метр)
4$ — блок питания 5 В / 4 А
2,5$ — Arduino Nano
3$ — программа Ambient light Application for Android


Итого:    21,5$ или ~1400 рублей



Микроконтроллер Arduino Nano:

AliExpress
Banggood
Amazon US
Amazon UK
Amazon DE

Светодиодная лента WS2812B:

AliExpress
Banggood
Amazon US
Amazon UK
Amazon DE


Реализация аппаратной части

Самое главное — это правильно организовать питание ленты. Лента длинная, напряжение падает при большом токе потребления, особенно при использовании 5 В ленты. Большинство проблем, которые возникают у тех, кто делает себе Ambient light, связаны именно с питанием. Я пользуюсь правилом — нужно делать отдельную подводку питания на каждые 10 Вт потребляемой максимальной мощности при 5 В и 25 Вт потребляемой мощности при 12 В. Длина подводки питания (от блока питания до самой ленты) должна быть минимальной (без запаса), особенно при 5 В.

Общая схема подключения выглядит следующим образом (Arduino запитана от USB, а лента от БП):

connection scheme

К ленте с обоих концов подведено питание — два параллельных подключения. Для примера, если бы мы делали подсветку на все 4 стороны, а лента была бы по 60 светодиодов на метр (т.е. максимальная мощность 54 Вт), то мы бы сделали такой подвод питания:

pwoer connection

К Arduino от ленты идут два контакта. 1 — GND, который нужно подключить к соответствующему контакту на Arduino. И 2 — DATA, который нужно подключить к шестому цифровому контакту на Arduino через резистор 470 Ом. Если резистора у вас нет, то в большинстве случаев всё будет прекрасно работать и без него, но лучше, чтобы он был. Резистор можно купить за пару копеек в любом радиомагазине. Сам микрокомпьютер Arduino можете разместить в любом удобном корпусе, многие используют для этого контейнер от «Kinder Surprise». Arduino нужно размещать как можно ближе к ленте, чтобы подводка контакта от DATA на Arduino имела минимальную длину.

Припаивать провода к ленте просто. Главное правило — время контакта с паяльником должно быть минимальным!

Как изгибать ленту под прямым углом?

Есть два варианта. 1 — ленту нужно разрезать и соединять короткими проводами (разместив всё это в термоусадочной трубке).  2 — Можете купить специальные угловые коннекторы на три контакта для светодиодных лент:

angled connectors

Программная часть

Это самое простое.

Загружаем и устанавливаем Arduino IDE. Загружаем последнюю доступную версию библиотеки FastLED, распаковываем и кладём папку FastLED из архива, в папку с библиотеками Arduino IDE(C:Program Files (x86)Arduinolibraries). Запускаем Arduino IDE и закрываем её. В папке Документы будет создана папка Arduino. В ней создаём папку AAA и копируем туда скетч  — AAA.ino.

Подключаем микрокомпьютер Arduino по USB. Драйвер (последовательного интерфейса CH340) установится автоматически. Если этого не произошло, то в папке Arduino IDE есть папка Drivers со всем необходимым.

Запускаем Arduino IDE и открываем файл AAA.ino.

arduino 1

Изменяем(если нужно) скорость передачи данных:

arduino 2

Изменяем количество светодиодов. Количество должно быть равным количеству светодиодов в вашей светодиодной ленте:

aaa-4

Инструменты > Плата > Arduino nano
Инструменты > Порт > Выбираете COM-порт (там будет нужный вариант)

Нажимаем кнопку «Загрузить»:

arduino 3

Программа проинформирует, когда загрузка будет завершена (это буквально пара секунд).

Готово. Нужно отключить Arduino от USB и подключить заново. Лента загорится последовательно красным, зелёным и синим цветом — Arduino активировался и готов к работе.

Теперь можно подключить Arduino к TV приставке и приступить к настройке программы.



Программная часть для контроллеров ESP8266 WeMos D1R2 или NodeMCU V1.0. Подключение по WiFi.

 
WeMos D1R2

WeMos D1R2 (ESP-8266) — Бинарная прошивка для лент типа WS2812/WS2813/WS2815:
LEDStripWiFi_AAA.ino.d1_mini_WS2812.bin

Ленты типа NeoPixels (APA106, WS2811, WS2812, WS2813, WS2815 & SK6812, SK6813, SK6815)

Подключение:


WeMos D1R2 (ESP-8266) — Бинарная прошивка для лент типа APA102 (DotStar):
LEDStripWiFi_AAA.ino.d1_mini_APA102.bin

Ленты типа DotStars (APA102, LPD8806, SK9822, WS2801, P9813)

Подключение:



NodeMCU V1.0

NodeMCU V1.0 (ESP-12E) — Бинарная прошивка для лент типа WS2812/WS2813/WS2815:
LEDStripWiFi_AAA.ino.nodemcu_WS2812.bin

Ленты типа NeoPixels (APA106, WS2811, WS2812, WS2813, WS2815 & SK6812, SK6813, SK6815)

Подключение:


NodeMCU V1.0 (ESP-12E) — Бинарная прошивка для лент типа APA102 (DotStar):
LEDStripWiFi_AAA.ino.nodemcu_APA102.bin

Ленты типа DotStars (APA102, LPD8806, SK9822, WS2801, P9813)

Подключение:


Для загрузки прошивок в контроллер можно использовать утилиту например:
Flash Download Tool

Как работает прошивка

Количество светодиодов в прошивке указывать не нужно, определяется автоматически.
Максимально возможное количество светодиодов в прошивке — 1500.

В прошивке есть 3 основных цвета индикации
1 — Синий, 2 — Красный, 3 — Зеленый.

Определение состояния прошивки согласно цвету индикации:

Синий — Начало работы (инициализация), в этот момент нажатие кнопки сброса приведет к сбросу сохраненных параметров подключения WiFi, о чем прошивка сообщит тройным миганием синего цвета.

Красный — Начало процесса инициализации WiFi и подключение к WiFi сети. Если параметры подключения WiFi были сохранены ранее и подключение удалось — мы увидим индикацию зеленого цвета. Если параметры подключения WiFi ранее не были сохранены — индикация останется красной.

Зеленый — Подключение к WiFi выполнено успешно, система находится в ожидании подключения к программе Ambient light Application for Android

Хочу обратить внимание на то, что для передачи данных от программы на контроллер используется протокол UDP, который позволяет нам обеспечить скорость передачи потоковых данных, но не предоставляет никаких гарантий доставки сообщения, следует внимательно отнестись к качеству покрытия WiFi сигнала, чем хуже будет связь контроллера с WiFi, тем больше будет потерь данных.

Подключение контроллера к WiFi

Что бы подключить контроллер к сети WiFi необходимо:

1. Подключить LED ленту к контроллеру
2. Подключить питание к контроллеру
3. Дождаться когда LED лента загорится красным цветом
4. На любом устройстве с WiFi (телефон/планшет/ПК) выполнить поиск доступных WiFi сетей
5. Выполнить подключение к сети с именем типа — AAA_b3da7c (пароль — password), где b3da7c это последние 3 сегмента MAC адреса вашего контроллера.
6. Если подключение удалось, должен открыться браузер со страницей настройки WiFi контроллера, если браузер не открылся перейдите по ссылке http://192.168.4.1 вручную:

7. Выбрать желаемый тип подключения (Static IP/ DHCP), при подключении с DHCP IP адрес будет назначен автоматически и узнать какой адрес назначен можно будет только на роутере. Рассмотрим вариант с назначением статического адреса:

8. В списке сетей выберем нашу домашнюю сеть и введем пароль для подключения к ней, так же введем IP адрес, Шлюз и Маску сети:

9. На этом настройка подключения к WiFi завершена, светодиодная лента должна загореться зеленым и погаснуть:

10. Ваше устройство (телефон/планшет/ПК) должно снова подключиться к вашей домашней сети, а контроллер перейдет в режим ожидания подключения к программе.

Сброс настроек

Одинарное нажатие на кнопку сброса контроллера приведет его перезагрузке, настройки подключения к сети WiFi при этом сохранятся.
Повторное нажатие на сброс, пока лента горит синим цветом, приведет к сбросу настроек подключения к сети WiFi и перезагрузке контроллера.

Настройка программы



Настройки программы представлены двумя экранами настроек это экран основных настроек и экран настроек цветокоррекции. Ниже приведен список настроек для каждого из экранов:

Основные настройки программы

Чтобы перейти к экрану основных настроек необходимо нажать на соответствующую кнопку на главном экране программы, как показано на картинке ниже:

device_settings

Далее откроется окно основных настроек :

Screenshot_1527689091

На этом экране представлены три раздела настроек: LED STRIP SETTINGS, DEVICE SETTINGS и SCREEN CAPTURE SETTINGS, рассмотрим эти разделы подробнее:

LED STRIP SETTINGS — В этом разделе собраны настройки описывающие конфигурацию и размещение вашей светодиодной ленты на телевизоре или мониторе. Этот раздел имеет несколько настроек, давайте рассмотрим их подробнее:

led_strip_settings

LEDs Horizontal — Эта настройка задает количество светодиодов в нашей светодиодной ленте по горизонтали, в моем случае, для экрана 42″ получилось 28 светодиодов:

leds_horizontal

LEDs Vertical — Эта настройка задает количество светодиодов по вертикали, в моем случае, для экрана 42″ получилось 16 светодиодов:

leds_vertical

LEDs Bottom Gap — Если ваш экран стоит на подставке, вам может потребоваться промежуток, в котором нет светодиодов, в нижнем горизонтальном сегменте светодиодной ленты, данная настройка позволяет задать этот промежуток(измеряется в количестве светодиодов).

Если смотреть с обратной стороны экрана:

bottom_gap

То же самое в настройках программы:

bottom_gap1

bottom_gap2

LED Strip Direction — Эта настройка задает направление вашей светодиодной ленты и должна соответствовать маркировке нанесенной на саму светодиодную ленту, может принимать значения «CW»(Clock Wise) что значит — По часовой стрелке и «CCW»(Counter Clock Wise) — Против часовой стрелки.

First LED Offset — Данная настройка отвечает за смещение расположения первого светодиода в ленте относительно левого верхнего угла экрана(если смотреть на него спереди). Эта настройка показывает, в каком месте у нашей ленты начало, куда мы будем подключать наш микроконтроллер(Arduino) и откуда сигнал пойдет по цепи в направлении указанном в настройке «LED Strip Direction».

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

first_led_offset1

Смещение First LED Offset на четыре светодиода:

first_led_offset2

Направление светодиодной ленты «CW» — по часовой стрелке:

led_strip_direction

 

к содержанию


DEVICE SETTINGS — Данный раздел содержит базовые настройки программы, настройки скорости соединения с микроконтроллером(Arduino), настройки порядка вывода цветов при отправке данных на микроконтроллер, настройки автозагрузки программы при старте системы, настройки поведения программы при выключении экрана:

device_settings

Рассмотрим эти настройки более подробно:

Serial Baud Rate — Данная настройка позволяет выбрать скрость передачи данных между вашим Android устройством и микроконтроллером Arduino. Важно понимать, что такая же скорость передачи данных должна быть выбрана и в настройках скетча(#define BAUD_RATE 115200) для Arduino AAA.ino о котором мы говорили в описании по сборке подсветки:

serial_boud_rate

 

RGB Byte Order — Настройка определяет в какой последовательности отправлять данные о цвете на микроконтроллер Arduino, RGB, RBG, GBR, GRB и т.д. Если вы ипользуете скетч для Arduino из этого описания, то данный параметр менять не требуется, по умолчанию RGB:

rgb_byte_order

 

Start On Boot — Настройка позволяет включить/выключить автозагрузку программы в последний активный режим работы на этапе загрузки операционной системы Android:

start_on_boot

 

Screen Off Action — Настройка позволяет выбрать поведение подсветки при отключении дисплея, например можно включать режим «SINGLE COLOR MODE» или «COLOR EFFECT MODE». Так же есть возможность выключать все активные режимы или бездействовать при отключении дисплея. При повторном включении дисплея, программа вернется к последнему активному режиму работы, который был до выключения дисплея:

screen_off_action

 

к содержанию


SCREEN CAPTURE SETTINGS — В данном разделе находятся настройки предназначенные для управления режимом работы подсветки «SCREEN CAPTURE MODE»:

screen_capture_settings

Рассмотрим эти настройки более подробно:

Horizontal Depth — Настройка задает глубину зоны захвата изображения по горизонтали. Глубина зоны захвата измеряется в процентах от размера экрана по высоте. Желтая пунктирная линия на картинке показывет текущую глубину зоны захвата:

horizontal_depth

horizontal_depth1

 

Vertical Depth — Настройка задает глубину зоны захвата изображения по вертикали. Глубина зоны захвата измеряется в процентах от размера экрана по ширине. Зеленая пунктирная линия на картинке показывет текущую глубину зоны захвата:

vertical_depth

vertical_depth1

 

Capture Quality — Настройка задает уровень качества захватываемого изображения. Чем выше качество, тем более точно и детально подсветка будет соответствовать изображению на экране. Высокие значения данной настройки могут снизить производительность на слабых системах:

capture_quality

 

к содержанию


Настройки цветокоррекции

Чтобы перейти к экрану настроек цветокоррекции необходимо нажать на соответствующую кнопку на главном экране программы, как показано на картинке ниже:

color_correction

Далее откроется окно настроек цветокоррекции:

Screenshot_1527580065

На этом экране представлены настройки управления цветокоррекцией и выбора цветовых эффектов подсветки: Single Color, Color Effect, Color Saturation, Color Brightness, Color Blur и настройки гаммы цветов RGB, рассмотрим эти настройки подробнее:

Single color — Настройка используется для выбора цвета подсветки. Настройка предназначена для режима работы подсветки «SINGLE COLOR MODE»:

single_color

 

Color effect — Настройка позволяет выбрать желаемый цветовой эффект подсветки. Настройка предназначена для режима работы подсветки «COLOR EFFECT MODE»:

color_effect

 

Color Saturation — Настройка насыщенности цветов подсветки. Настройка позволяет повысить/понизить уровень насыщенноси цвета подсветки:

color_saturation

 

Color Brightness — Настройка яркости цветов подсветки. Настройка позволяет повысить/понизить уровень яркости цвета подсветки:

color_brightness

 

Color Blur — Настройка смешивания цветов подсветки. Настройка позволяет повысить/понизить уровень размытия цвета светодиодов подсветки:

color_blur

 

Red/Green/Blue Color Gamma — Настройки коррекции гаммы для каждого из трех основных цветов в палитре RGB:

RGB_color_gamma

 

к содержанию


Новости

Программа обновлена до версии 1.0.7

Программа обновлена Текущая версия программы 1.0.7 Исправлены ошибки; Улучшена стабильность; Добавлена поддержка подключения контроллеров по WiFi для плат WeMos D1 R2 на чипах ESP-8266 и Node MCU v0.1 на чипах ESP-12 (бинарные версии прошивок для этих плат будут выложены на сайте); Добавлены настройки гаммы для каждого цвета в отдельности; Добавлена настройка «Display Frame Rate»; Добавлена …