Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 3

Добавляем в плеер функцию ambilight при помощи умных ламп xiaomi

Пайка и сборка схемы освещения

Arduino Mega имеет несколько выходов с широтно-импульсной модуляцией (ШИМ). Для каждой светодиодной ленты нужно подключить красный, зеленый и синий провод к одному из этих выходов. Для того чтобы выполнить Ambilight для телевизора своими руками, используют контакты 2-4, где контакт 2 красный, контакт 3 зеленый, а контакт 4 — синий. Во второй линии используются контакты с 5 по 7, где контакт 5 красный, 6 — зеленый, 7 — синий и далее аналогично.

Arduino не может самостоятельно подавать напряжение на светодиодные линии. По этой причине нужен дополнительный источник питания. Будет достаточно адаптера 12 В, 1 А. Также понадобится резистор и транзистор для красного, зеленого и синего провода. Для установки потребуется три резистора 2200 Ом и три NPN-транзистора, которые смогут переключать 200 мА при 12 В для каждого канала.

Для того чтобы выполнить своими руками Ambilight ws2812b, подключают выход Arduino к резистору, а резистор — к базе транзистора. Подключают излучатель к заземлению Arduino, а коллектор — к соответствующему цвету светодиодной ленты для всех проводов RGB. Подключают общий положительный индикатор светодиодных полос к положительному значению адаптера 12 В, а отрицательный положительный элемент адаптера 12 В — к заземлению Arduino.

Выполнение схемы оформляют на небольшом фрагменте платы с обозначениями контактов, чтобы иметь возможность при необходимости отсоединить неисправные детали. Можно использовать старый корпус сетевого модема для размещения Arduino и электронных компонентов. Затем применяют кабели Ethernet в качестве силовых для светодиодных лент. В результате получается очень красивый и профессионально выглядящий корпус с хорошим креплением частей и проводов.

Как выбрать телевизор Ambilight – на что обратить внимание

Выбор телевизора всегда непростая задача, учитывая то, сколько моделей доступно на рынке, а некоторые отличаются, казалось бы, банальными пустякам, которые, однако, существенно повлиять на комфорт использования устройства.

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

Не всегда большой экран будет лучшим выбором, поэтому стоит просто обращать внимание на следующие параметры:

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

Диагональ экрана – стоит выбирать телевизор в зависимости от расстояния между экраном и зрителем. В небольших помещениях лучше проявят себя телевизоры с диагональю 43 или 49 дюймов, чем с диагональю 65 дюймов.

Тип подсветки Ambilight – наиболее гламурной будет четырёхсторонняя подсветка, но на небольших поверхностях лучше использовать двустороннюю.

Операционная система – в настоящее время используются Philips Smart TV или Android.

Дополнительные опции – телевизоры Smart TV и Smart TV Ambilight, как правило, поставляются с различного рода бесплатными услугами. Стоит обратить внимание на то, какие подарки и подписки готов предоставить производитель устройства.

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

Делаем ambilight своими руками для телевизора

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

Варианты реализации

Чтобы реализовать данный проект для телевизора существует несколько способов. Выбор варианта должен опираться не только на финансовые возможности, но и на другие, связанные с оборудованием факторы:

  • Подсветка с использованием ПК. Windows-бокс или другой компьютер, установленный рядом с телевизором прекрасно справится с этой задачей.
  • Использование андроид приставки. Такой вариант может быть немного проблемный из-за необходимости использования медиаплеера Kodi, который работает не со всем оборудованием.
  • Использование микрокомпьютера и устройства захвата видео. Этот вариант самый универсальный и способен обеспечить организацию подсветки от любого источника видеосигнала.

Определение функционала

Если вас интересует исключительно готовая программа, то вы можете сразу перейти к пункту «Для тех, кто просто хочет пользоваться готовым плеером».

  • Необходимо разработать функционал, позволяющий динамически изменять параметры (цвет или яркость/температура света в случае использования устройства без rgb светодиодов) умной лампы в зависимости от текущего изображения в окне медиаплеера.
  • Функционал должен поддерживать использование нескольких умных ламп разных моделей одновременно.
  • Функционал должен иметь механизм независимого анализа нескольких зон изображения, что позволит указывать зону «отслеживания» цвета для конкретной лампы.
  • Текущая конфигурация ламп должна сохраняться и загружаться при последующем использовании программы.
  • Функционал должен встраиваться в выбранный для проекта медиапроигрыватель.

Лучший опыт подсветки Philips

Philips Ambilight — это захватывающая система освещения, встроенная в некоторые модели телевизоров. Вокруг последнего есть светодиоды, которые в реальном времени отображают цвета экрана на стенах позади него. Этот продукт доступен не во всех странах и может быть довольно дорогим. Но, к счастью, есть его DIY версия, которую можно установить своими руками. Клон Ambilight стал возможен благодаря использованию Raspberry Pi, некоторых светодиодов и бесплатных программ.

Оборудование и материалы:

  1. Любой источник HDMI.
  2. Двухсторонний скотч для крепления частей к телевизору, 3 м.
  3. Raspberry Pi 2/3.
  4. Карта памяти Micro SD размером не менее 8 ГБ и блок питания 2,5 А.
  5. Светодиодная лента (5 м для 40-дюймового телевизора).
  6. Источник питания для светодиодов 5 В 10 А.
  7. Разветвитель HDMI.
  8. Переходник с HDMI на AV.
  9. Видео граббер.
  10. HDMI-кабеля.
  11. Паяльник.

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

При подаче питания на светодиодные полосы без программного обеспечения некоторые светодиоды могут не загореться. Это не означает, что они не работают. Нужно подождать, пока ПО не будет установлено, прежде чем делать вывод, что они неисправны.

Настраивают raspberry pi и устанавливают операционную систему OpenELEC. На этом этапе запускают приложение Hyperion на компьютер и ssh в Raspberry Pi. Настройки, которые нужно выбрать для приложения Hyperion, будут различаться в зависимости от марки телевизора. Следование чужим настройкам может не всегда давать отличные результаты на конкретном устройстве.

Есть удобное приложение для телефона Hyperion Remote, которое позволяет пользователю легко подключаться к системе и точно настраивать световые эффекты по своему вкусу, а также использовать предустановленные режимы, например, при выполнении своими руками «Эмбилайта» для телевизора «Самсунг».

Эффект фонового освещения Lightberry HD

Для того чтобы иметь эффект Philips Ambilight, необязательно покупать новую панель, можно его получить на любом плазменном экране. В торговой сети продаются комплекты с программами, создающие гораздо более захватывающие проекты и применимые к существующим телевизорам. Одной из самых известных является Lightberry — компания, которая расширила возможности просмотра и игр благодаря использованию цветных светодиодов аналогично системе Philips Ambilight.

Теоретически система довольно проста — используется Raspberry Pi в качестве процессора в схеме выполнения Ambilight своими руками для телевизора через HDMI. Кабель проходит от разветвителя к комплекту Lightberry HD, который анализирует внешние края изображения, выводимого на телевизор. Затем он воссоздает цвет и яркость с почти мгновенным эффектом. Огни, отображаемые по краям телевизора, создают иллюзию изображения, выходящего за края телевизора, и в целом улучшают общее восприятие картины.

Установка образа системы на Raspberry Pi при выполнении своими руками «Эмбилайта» для телевизора:

  1. Скачивают образ системы с веб-сайта Lightberry HD. Это модифицированная версия популярной системы KODI для Raspberry Pi, предназначенная для работы с Lightberry HD.
  2. Загружают программное обеспечение для установки образа системы на карту microSD. Пользователи Mac могут использовать ApplePi Baker, а пользователи Windows — Win32DiskImager, они бесплатны и в точности выполнят свою работу.
  3. Вставляют карту microSD в ПК или Mac. Это можно сделать через слот для SD-карты или через USB-устройство чтения SD-карт.
  4. Устанавливают образ системы на карту microSD.
  5. В разделе находят загруженный образ системы, щелкнув три точки в разделе IMG Recipe и «Восстановить резервную копию» для установки.
  6. Пользователям Windows необходимо запустить Win32DiskImager от имени администратора, для этого щелкнуть правой кнопкой мыши утилиту и выбрать «Запуск от имени администратора».
  7. Затем просмотреть образ системы, загруженной ранее, выбрать букву драйвера SD-карты на компьютере.
  8. Далее помощник программы поможет выполнить настройку ПО.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Serial Baud Rate — Данная настройка позволяет выбрать скрость передачи данных между вашим Android устройством и микроконтроллером Arduino

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

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

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

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

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

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

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

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

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

Инструкция по подключению Arduino

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

Открывают файл pde в среде и выбирают правильную модель, перейдя в «Инструменты> Панель» и Arduino Mega. Также выбирают правильный порт в «Инструментах>» (последовательный). Затем нажимают кнопку «Загрузить». После загрузки кода Arduino должен автоматически запуститься и будет открываться каждый раз, когда получит питание либо через USB-кабель, либо через силовой адаптер.

Программное обеспечение при установке Ambilight-подсветки телевизора своими руками может быть выполнено на ОС Виндовс. Для этого загружают Amblone для Windows. Можно либо загрузить двоичные файлы, либо исходные коды и скомпилировать их самостоятельно. После запуска Amblone появится значок в системном трее. Нажимают правой кнопкой мыши значок и выбирают «Настроить Amblone».

Далее нужно установить важные параметры. Прежде всего выбирают монитор, с которого получают средний цвет, и указывают каналы RGB и часть экрана, которую они представляют. Например, если есть светодиодная лента RGB, расположенная в верхней части экрана телевизора, которая выбрана в качестве второго монитора, и светодиодная лента подключена к выходным контактам 2–4, нужно выбрать «Вспомогательный монитор» в разделе «Монитор источника» и часть экрана, которую полоса будет представлять в канале 1. Это, вероятно, будет «верхняя половина» или «весь экран». Полосы могут излучать нестандартный статический цвет. Для этого выбирают «статический» вариант.

Следующая важная настройка — это COM-порт. Выбирают COM-порт Arduino на ПК. Как только выбран правильный, Ambione должен автоматически начать связь с Arduino. Маленький светодиод начнет мигать, получая данные. При подключении адаптера светодиодных лент можно убедится, что они излучают нужные цвета.

Как подключить светодиод к Arduino Uno

Для теста нам понадобится:

  • Arduino Uno
  • макетная плата
  • светодиод
  • резистор для светодиода
  • соединительные провода

Все соединяем, согласно указанной схеме.

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

Как можно видеть, мы использовали два контакта Arduino. Первый из них pin13 будет служить для управления светодиодом, второй – минус схемы.

Следует обратить внимание на. Анод (+) светодиода нужно подключить через резистор к pin13. Катод (-) светодиода подключаем к минусу платы

После проверки правильности соединения мы можем перейти к написанию нашей первой программы

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

Наша первая программа позволит поочередно включать и выключать светодиод. Частота мигания светодиода составит около 1Гц.

const int ledPin = 13; // номер контакта для светодиода
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH); // устанавливаем высокое состояние на pin13
delay(500); //остановка 0,5 сек (500ms)
digitalWrite(ledPin, LOW); // устанавливаем низкое состояние на pin13
delay(500); // остановка 0,5 сек (500ms)
}

Программа начинается с объявления используемого контакт (ledPin). С этого момента везде, где мы будем ссылаться на «ledPin», будет ссылка на pin13 Arduino.

Затем в функции setup() мы указываем, что наш pin13 будет использоваться как выход.

Функция pinMode(pin, mode) позволяет определить, будет ли использоваться наш контакт как вход или как выход. Первый параметр функции это номер контакта, второй предопределенное значение INPUT (вход) или OUTPUT (выход).

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

Функция loop() содержит непосредственно сам код программы, который выполняется в бесконечном цикле.

Функция digitalWrite(pin, value) позволяет изменять статус каждого из контактов. Цифровые выходы могут иметь низкий (LOW) или высокий (HIGH) логический уровень. LOW (лог.0) — электрически замкнут на минус, а HIGH (лог.1) — около 5 В.

Номер порта в функции digitalWrite () может быть указан непосредственно в виде числа (в нашем случае 13) или обозначен так, как мы прописали его в функции pinMode () (т.е ledPin).

Последним элементом программы является функция delay(), которая останавливает выполнение программы на определенное время. Время задается в миллисекундах. Одна секунда это 1000 мс.

Зная, для чего служат отдельные функции программы, мы можем изучить работу программного кода целиком:

Итак, pin13 Arduino устанавливается как выход. Следующим шагом идет установка высокого состояния на Pin13 и приостановка дальнейшего выполнения кода на 0,5 сек. Затем Pin13 устанавливается в низкое состояние и исполнение кода приостанавливается на 0,5 сек. Согласно философии написания программ в Arduino IDE, функция loop () выполняется в бесконечном цикле, что вызовет визуальное мигание светодиода.

После того, как вы написали программу, скомпилируйте ее и отправьте в Arduino. Если все шаги были выполнены правильно, светодиод должен начать мигать с частотой примерно в 1 Гц.

При отсутствии положительного результата необходимо еще раз проверить правильность соединений и программный код.

Шаг 6. Скетч Arduino Ambilight

Ниже вы можете скачать или скопировать  код для нашей подсветки Ардуино Эмбилайт.

#include "FastLED.h"

#define NUM_LEDS 38
#define LED_DATA_PIN 3
#define NUM_BYTES (NUM_LEDS*3) // 3 colors  

#define BRIGHTNESS 100
#define UPDATES_PER_SECOND 100

#define TIMEOUT 3000

#define MODE_ANIMATION 0
#define MODE_AMBILIGHT 1
uint8_t mode = MODE_ANIMATION;

byte MESSAGE_PREAMBLE[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
uint8_t PREAMBLE_LENGTH = 10;
uint8_t current_preamble_position = 0;

unsigned long last_serial_available = -1L;

uint8_t led_counter = 0;
uint8_t byte_counter = 0;

CRGB leds;
byte buffer;


// Filler animation attributes
CRGBPalette16 currentPalette = RainbowColors_p;
TBlendType    currentBlending = LINEARBLEND;
uint8_t startIndex = 0;

void setup()
{
  Serial.begin(115200);
  FastLED.clear(true);
  FastLED.addLeds<WS2811, LED_DATA_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop()
{
	switch (mode) {
		case MODE_ANIMATION: 
			fillLEDsFromPaletteColors();
			break;
		
		case MODE_AMBILIGHT:
			processIncomingData();
			break;
	}
	
}

void processIncomingData()
{
	if (waitForPreamble(TIMEOUT))
	{
		Serial.readBytes(buffer, NUM_BYTES);

		/* DEBUG
		for (int i = 0; i < NUM_BYTES; i++)
		{
			Serial.write((char)buffer);
		}
		*/

		while (byte_counter < NUM_BYTES)
		{
			byte green = buffer;
      byte blue = buffer;
			byte red = buffer;

			leds = CRGB(red, green, blue);
		}

		FastLED.show();

		byte_counter = 0;
		led_counter = 0;
	}
	else
	{
		mode = MODE_ANIMATION;
	}
}

bool waitForPreamble(int timeout)
{
	last_serial_available = millis();
	while (current_preamble_position < PREAMBLE_LENGTH)
	{
		if (Serial.available() > 0)
		{
			last_serial_available = millis();

			if (Serial.read() == MESSAGE_PREAMBLE)
			{
				current_preamble_position++;
			}
			else
			{
				current_preamble_position = 0;
			}
		}

		if (millis() - last_serial_available > timeout)
		{
			return false;
		}
	}
	current_preamble_position = 0;
	return true;
}

void fillLEDsFromPaletteColors()
{
	startIndex++; // speed

	uint8_t colorIndex = startIndex;
	for( int i = 0; i < NUM_LEDS; i++) {
        leds = ColorFromPalette(currentPalette, colorIndex, BRIGHTNESS, currentBlending);
		colorIndex += 3;
    }

	FastLED.delay(1000 / UPDATES_PER_SECOND);

	if (Serial.available() > 0)
	{
		mode = MODE_AMBILIGHT;
	}
}

Управление светодиодной лентой

С помощью Arduino можно взаимодействовать с приложением Processing, чтобы интегрировать систему. В этом случае вполне реально выполнить Ambilight своими руками для телевизора без компьютера.

Можно использовать светодиодную ленту WS2811 RGB, она контролируется не сигналами RGB PWM, а другим протоколом, который требует только одного проводного соединения. Это довольно сложно сделать с нуля самостоятельно. К счастью, команда Adafruit разработала библиотеку для этого типа светодиодных лент — NeoPixel.

Для 25 светодиодов понадобится как минимум 75 данных, которые нужно отправлять каждый раз, когда делается снимок экрана. При отправлении добавляются постоянные значения, такие как символы О и Z. Это идентификатор для Arduino, поэтому он знает, что это начало новых данных. После их получения приложению поступит сообщение «Я готов, следующий пакет данных, пожалуйста». После чего выполняют небольшую корректировку положения светодиодов.

Программное обеспечение Amblone

Amblone, безусловно, — не первая система, которая создает эффект Ambilight. В сети предлагаются и другие решения, которые более или менее реализуют тот же эффект, что и Amblone. Некоторые из них являются законченными коммерческими продуктами, некоторые — проектами DIY, такими как Amblone.

Для того чтобы выполнить своими руками Ambilight для телевизора, потребуется следующее:

  1. ПО Amblone.
  2. Микроконтроллер, например, Arduino Mega.
  3. Кабель USB.
  4. Светодиодные полосы RGB, которыми можно управлять вручную. Предварительно нужно убедиться, что полоса не окрашивает светодиоды автоматически.
  5. Адаптер 12 В.
  6. Электрические провода.
  7. Двухсторонняя лента или другое оборудование для крепления светодиодных лент.
Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации