RSS блога
Подписка
Клон Ambilight на связке Raspberry Pi3, Arduino и ленте WS2812B
- Цена: $19.61
- Перейти в магазин
К написанию данного опуса меня сподвигло не сколько желание похвастаться красивостью, сколько описать новый гайд для желающих повторить данную конструкцию без «фигурных танцев по граблям».
Проблемма заключается в том, что все существующие гайды и мануалы датируются в лучшем случае 2014-м годом и, в связи с шагнувшими вперед технологиями и переделанными интерфейсами основных програмных продуктов, неприменимы. Пытаемся, к примеру настроить Kodi (libreelec, OpenElec). Вбиваем в Putty sudo ap-get..., а оболочка отбивает ответ в формате «не, ну вы ж тут под рутом уже и так зашли, такшо давайте без этих формальностей. Фыркаешь, забиваешь уже напрямую apt-get install. И шо? Говорят „не, ну то вы под дебианом/убунтой так можете, а тут у нас своя атмосфера“. Пытаешься достать шо-либо с репозитория через wget — N wget — ругается, говорит „параметра такого не знаю“. Повторяешь команду с длиннющей ссылкой на github — а ответ 404. Переместили, или вообще проект накрылся. Не, ну не свинство?
Итак:
вводные задачи:
Делаем Медиаприставку/медиасервер на Raspberry Pi3 под управлением системы (оболочки, операционки) на базе Kodi ( я использовалOpenElec 8.0.4, а самые свежие гайды — говорили, шо работают с версией 4.0 и конфликтуют с 5.0). Захват экрана выполняет демон (програмная надстройка) Hyperion (с Boblight не сложилось вообще) и отдается управление на ленту WS2812B.
За основу был взят мануал от Christian Moser, опубликованный на techtalk под названием »How to build your own Ambilight TV with Raspberry Pi and XBMC" и датируемыйFebruary 20, 2014 (почти 5 лет назад, шо в условиях современных реалий — ОЧЕНЬ много).
Продолжаем.
Список необходимостей недурственно описан в гайде вверху, только с небольшими изменениями. Блок питания на 5-7ампер только для ленты в принципе неплохо иметь, но чересчур. Для ленты, которую я применил ( Ссылка на Али Куплена за кровные свои, 5метровый рулон без защиты ) с плотностью 60 модулей/метр (при 30 на метр — неравномерная засветка, а 144/метр меня бы разорила и по БП и по деньгам) — потребление тока при 5,15В питающего и 172 штуках светодиодов в итоге на старый Samsung LE37A656 составило чуть более 2А при полной яркости белого свечения
Камера в телефоне слегка краснит
Собственно потребление 172 штук модулей на максимальной яркости в режиме белого света
при красном свечении только по бокам
Потребление 0,6А
Сборка/приклейка/пайка — осталась за кадром.
Фотки готового решения с неудобных ракурсов:
Провода лучше применять в силиконовой изоляции (их можно купить в авиа/коптерном модельном магазине) — они мягкие как по изоляции, так и по жилам. Мной использованы провода 28-го калибра. По углам провода дополнительно застраховал кусочками каптонового скотча.
За скобками данного опуса оставлю страдания с неработающими устаревшими решениями. Методы с переназначением 12-го пина (GPIO18) с режима SPI в режим PWM с отключением аудиовыхода — не работает по причине изменений в оболочках.
Предполагается, что человек, который будет это повторять — априори не пугается Ардуино и паяльника. Также предполагается, что Raspberry уже сконфигурирована в качестве медиаплеера и подключена по HDMI к телевизору.
Перехожу к собственно методу решения загвоздок с адаптивной подсветкой.
Берем Ардуино Нано. У меня вот такая Куплена тоже за свои для другого проекта, но пришлось пересаддить сюда. (мануалы говорят, что лучше Мега/Уно, но практика показала, что 172 модуля для Нано по зубам). Ардуино Про не пойдет — нам нужен USB вход для связи между Hyperion и Arduino, которая, в свою очередь, управляет лентой из WS2812.
Скетч, который заливаем в Ардуину имеет вид:
Для корректной работы необходимо иметь установленную библиотеку FastLED.
В строке #define NUM_LEDS — указываем итоговое количество светодиодов в проекте
Строка #define DATA_PIN — указывает к какому цифровому выходу платы будет подключен первый модуль.
#define serialRate 500000 — важный момент колдунства. Очень важный. Случайно обнаружен на немецком форуме. Только после обьявления данной скорости все завертелось!
В секции
void setup() {
// Uncomment/edit one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
снимаем комментарий (два прямых слэша) с строки, соответствующей применяемым модулям.
Компилируем, заливаем. При запуске ардуинки или после перезагрузки — вся лента приветственно переливается цветами. Запоминаем порядок следования цветов ( Видео запуска —
после перебора цветов Ардуиной идет запуск Гипериона и его приветственная радуга). Мы на половине пути к счастью!
Подключаем Ардуинку подходящим кабелем к свободному порту Малины.
Включаем все компоненты
Далее скачиваем на компьютер HyperCon.jar и запускаем его.
На экране появится окно конфигурации нашей адаптивной подсветки. Наступает второй этап сильного колдунства.
Итак:
Строка Configuration name — указываем приятное нам имя, на работоспособность не влияет никак.
Строка Type — в выпадающем меню выбираем Adalight. Данная строка указывает, что наша конструкция управляется внешним устройством с библиотекой Adafruit, которую мы залили в Ардуинку.
Строка Output (этап очень мощного колдунства) — выбираем /dev/ttyUSB0 Конкретно ваш случай может отдичаться от данного перимера — поэтому подсмотрите через консоль Putty командами lsusb и ls /dev где у вас присутствует Ардуина. Некоторые (как у меня — дают ответ типа «СН430...» — имя контроллера порта)
Строка Baudrate — вбиваем 500 000 (чтобы Гиперион и Ардуина общались на одной скорости). Скорости, отличные от 500 000 — НЕ РАБОТАЮТ!..
Строка RGB byte order — GRB (порядок адресации цветов в модулях 2812В и подсмотренные при запуске скетча на ардуине)
Дальнейшие действия — обьявление количества светодиодов и их конфигурация на плоскости, нулевой (начальный) светодиод, глубина захвата, создание файла конфигурации, установка Hyperion через SSH и отправка конфигурационного .json-файла не отличаются от всех известных мне гайдов в Сети.
После перезапуска Гипериона (команды в вкладке SSH — сначала Stop потом Start) — лента должна ожить сначала скетчем ( сначала перебор 3х основных цветов, потом инициализируется Hyperion и выдает вращающуюся радугу).
Вуаля!
Коротенькое видео работы данного решения:
Проблемма заключается в том, что все существующие гайды и мануалы датируются в лучшем случае 2014-м годом и, в связи с шагнувшими вперед технологиями и переделанными интерфейсами основных програмных продуктов, неприменимы. Пытаемся, к примеру настроить Kodi (libreelec, OpenElec). Вбиваем в Putty sudo ap-get..., а оболочка отбивает ответ в формате «не, ну вы ж тут под рутом уже и так зашли, такшо давайте без этих формальностей. Фыркаешь, забиваешь уже напрямую apt-get install. И шо? Говорят „не, ну то вы под дебианом/убунтой так можете, а тут у нас своя атмосфера“. Пытаешься достать шо-либо с репозитория через wget — N wget — ругается, говорит „параметра такого не знаю“. Повторяешь команду с длиннющей ссылкой на github — а ответ 404. Переместили, или вообще проект накрылся. Не, ну не свинство?
Итак:
вводные задачи:
Делаем Медиаприставку/медиасервер на Raspberry Pi3 под управлением системы (оболочки, операционки) на базе Kodi ( я использовалOpenElec 8.0.4, а самые свежие гайды — говорили, шо работают с версией 4.0 и конфликтуют с 5.0). Захват экрана выполняет демон (програмная надстройка) Hyperion (с Boblight не сложилось вообще) и отдается управление на ленту WS2812B.
За основу был взят мануал от Christian Moser, опубликованный на techtalk под названием »How to build your own Ambilight TV with Raspberry Pi and XBMC" и датируемыйFebruary 20, 2014 (почти 5 лет назад, шо в условиях современных реалий — ОЧЕНЬ много).
Продолжаем.
Список необходимостей недурственно описан в гайде вверху, только с небольшими изменениями. Блок питания на 5-7ампер только для ленты в принципе неплохо иметь, но чересчур. Для ленты, которую я применил ( Ссылка на Али Куплена за кровные свои, 5метровый рулон без защиты ) с плотностью 60 модулей/метр (при 30 на метр — неравномерная засветка, а 144/метр меня бы разорила и по БП и по деньгам) — потребление тока при 5,15В питающего и 172 штуках светодиодов в итоге на старый Samsung LE37A656 составило чуть более 2А при полной яркости белого свечения
Камера в телефоне слегка краснит
Собственно потребление 172 штук модулей на максимальной яркости в режиме белого света
при красном свечении только по бокам
Потребление 0,6А
Сборка/приклейка/пайка — осталась за кадром.
Фотки готового решения с неудобных ракурсов:
Провода лучше применять в силиконовой изоляции (их можно купить в авиа/коптерном модельном магазине) — они мягкие как по изоляции, так и по жилам. Мной использованы провода 28-го калибра. По углам провода дополнительно застраховал кусочками каптонового скотча.
За скобками данного опуса оставлю страдания с неработающими устаревшими решениями. Методы с переназначением 12-го пина (GPIO18) с режима SPI в режим PWM с отключением аудиовыхода — не работает по причине изменений в оболочках.
Предполагается, что человек, который будет это повторять — априори не пугается Ардуино и паяльника. Также предполагается, что Raspberry уже сконфигурирована в качестве медиаплеера и подключена по HDMI к телевизору.
Перехожу к собственно методу решения загвоздок с адаптивной подсветкой.
Берем Ардуино Нано. У меня вот такая Куплена тоже за свои для другого проекта, но пришлось пересаддить сюда. (мануалы говорят, что лучше Мега/Уно, но практика показала, что 172 модуля для Нано по зубам). Ардуино Про не пойдет — нам нужен USB вход для связи между Hyperion и Arduino, которая, в свою очередь, управляет лентой из WS2812.
Скетч, который заливаем в Ардуину имеет вид:
#include "FastLED.h"
// How many leds in your strip?
#define NUM_LEDS 172
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 2
//#define CLOCK_PIN 13
#define COLOR_ORDER BRG
// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 500000
// Define the array of leds
CRGB leds[NUM_LEDS];
void setup() {
// Uncomment/edit one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// initial RGB flash
LEDS.showColor(CRGB(255, 0, 0));
delay(500);
LEDS.showColor(CRGB(0, 255, 0));
delay(500);
LEDS.showColor(CRGB(0, 0, 255));
delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print("Ada\n"); // Send "Magic Word" string to host
}
void loop() {
// wait for first byte of Magic Word
for(i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) ;;
// Check next byte in Magic Word
if(prefix[i] == Serial.read()) continue;
// otherwise, start over
i = 0;
goto waitLoop;
}
// Hi, Lo, Checksum
while (!Serial.available()) ;;
hi=Serial.read();
while (!Serial.available()) ;;
lo=Serial.read();
while (!Serial.available()) ;;
chk=Serial.read();
// if checksum does not match go back to wait
if (chk != (hi ^ lo ^ 0x55))
{
i=0;
goto waitLoop;
}
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// read the transmission data and set LED values
for (uint8_t i = 0; i < NUM_LEDS; i++) {
byte r, g, b;
while(!Serial.available());
r = Serial.read();
while(!Serial.available());
g = Serial.read();
while(!Serial.available());
b = Serial.read();
leds[i].r = r;
leds[i].g = g;
leds[i].b = b;
}
// shows new values
FastLED.show();
}
Для корректной работы необходимо иметь установленную библиотеку FastLED.
В строке #define NUM_LEDS — указываем итоговое количество светодиодов в проекте
Строка #define DATA_PIN — указывает к какому цифровому выходу платы будет подключен первый модуль.
#define serialRate 500000 — важный момент колдунства. Очень важный. Случайно обнаружен на немецком форуме. Только после обьявления данной скорости все завертелось!
В секции
void setup() {
// Uncomment/edit one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
снимаем комментарий (два прямых слэша) с строки, соответствующей применяемым модулям.
Компилируем, заливаем. При запуске ардуинки или после перезагрузки — вся лента приветственно переливается цветами. Запоминаем порядок следования цветов ( Видео запуска —
после перебора цветов Ардуиной идет запуск Гипериона и его приветственная радуга). Мы на половине пути к счастью!
Подключаем Ардуинку подходящим кабелем к свободному порту Малины.
Включаем все компоненты
Далее скачиваем на компьютер HyperCon.jar и запускаем его.
На экране появится окно конфигурации нашей адаптивной подсветки. Наступает второй этап сильного колдунства.
Итак:
Строка Configuration name — указываем приятное нам имя, на работоспособность не влияет никак.
Строка Type — в выпадающем меню выбираем Adalight. Данная строка указывает, что наша конструкция управляется внешним устройством с библиотекой Adafruit, которую мы залили в Ардуинку.
Строка Output (этап очень мощного колдунства) — выбираем /dev/ttyUSB0 Конкретно ваш случай может отдичаться от данного перимера — поэтому подсмотрите через консоль Putty командами lsusb и ls /dev где у вас присутствует Ардуина. Некоторые (как у меня — дают ответ типа «СН430...» — имя контроллера порта)
Строка Baudrate — вбиваем 500 000 (чтобы Гиперион и Ардуина общались на одной скорости). Скорости, отличные от 500 000 — НЕ РАБОТАЮТ!..
Строка RGB byte order — GRB (порядок адресации цветов в модулях 2812В и подсмотренные при запуске скетча на ардуине)
Дальнейшие действия — обьявление количества светодиодов и их конфигурация на плоскости, нулевой (начальный) светодиод, глубина захвата, создание файла конфигурации, установка Hyperion через SSH и отправка конфигурационного .json-файла не отличаются от всех известных мне гайдов в Сети.
После перезапуска Гипериона (команды в вкладке SSH — сначала Stop потом Start) — лента должна ожить сначала скетчем ( сначала перебор 3х основных цветов, потом инициализируется Hyperion и выдает вращающуюся радугу).
Вуаля!
Коротенькое видео работы данного решения:
Самые обсуждаемые обзоры
+72 |
3453
145
|
+51 |
3663
67
|
+31 |
2645
51
|
+39 |
3032
42
|
Только зачем оно на телеке?
Про природу надо, что-то покрутить.
я вот как бы уже 8лет смотрю и разницу-то нагрузки для глаз в живую ощущаю.
да массовые и самопальные клоны явно не на пустом маркетинге выросли.
но глазами сабж, скорее всего, нормально выглядит, такие резкие границы освещенности это из за камеры, глазом ровнее должно быть
хотел было новый телик с Ambilight… обязательно с Ambilight
теперь уже сильно сомневаюсь
если оно работает на этот финальный генератор эпилепсии похоже — нафиг лесом :)
www.youtube.com/watch?v=iovD1PiCryA
Старые решения вполне работают и на 10ке
Вот результат youtu.be/S3kFE0pSh_Q
Тв бокс под управлением alexelec так как там boblight работает из коробки
Но сменил ТВ на 4К HDR и уже DreamScreen не подойдет т.к. hdmi 1.4 тока и 4К HDR он не передает.
Расскажите пожалуйста про sk9822, схему подключения и ПО.
Скетч предположительно этот, сложно сказать точно, давно дело было.
//
// Arduino interface for the use of ws2812 operated LEDs
// Uses Adalight protocol and is compatible with Boblight, Prismatik etc
// «Magic Word» for synchronisation is 'Ada' followed by LED High, Low and Checksum
//
#include <FastLED.h>
///// User definitions /////
// Define the number of LEDs
#define NUM_LEDS 107
// Define SPI Pin
#define DATA_PIN 7
#define CLOCK_PIN 5
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200
// Adalight sends a «Magic Word» (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
// initialise LED-array
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<SK9822, DATA_PIN, CLOCK_PIN, BGR>(leds, NUM_LEDS);
// initial RGB flash
LEDS.showColor(CRGB(255, 0, 0));
delay(500);
LEDS.showColor(CRGB(0, 255, 0));
delay(500);
LEDS.showColor(CRGB(0, 0, 255));
delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print(«Ada\n»); // Send «Magic Word» string to host
}
void loop() {
// wait for first byte of Magic Word
for(i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) ;;
// Check next byte in Magic Word
if(prefix[i] == Serial.read()) continue;
// otherwise, start over
i = 0;
goto waitLoop;
}
// Hi, Lo, Checksum
while (!Serial.available()) ;;
hi=Serial.read();
while (!Serial.available()) ;;
lo=Serial.read();
while (!Serial.available()) ;;
chk=Serial.read();
// if checksum does not match go back to wait
if (chk != (hi ^ lo ^ 0x55))
{
i=0;
goto waitLoop;
}
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// read the transmission data and set LED values
for (uint8_t i = 0; i < NUM_LEDS; i++) {
byte r, g, b;
while(!Serial.available());
r = Serial.read();
while(!Serial.available());
g = Serial.read();
while(!Serial.available());
b = Serial.read();
leds[i].r = r;
leds[i].g = g;
leds[i].b = b;
}
// shows new values
FastLED.show();
}
Настройки в Ambibox на свой вкус и цвет стены:)
У меня так, но склонным к эпилепсии и фанатам оригинального тормозного амбилайта не рекомендую.
Если кому понадобится скетч для sk9822 (apa102) для ambibox тут
Аппаратное ускорение — работает, без проблем. Гасить специфические функции — не пришлось (тем более, что структура команд и расположение конфигурационных файлов поменялись и их выколупывать и гасить — нетривиальный ребус)
Описал — компиляцию/выжимку правильного применения мелочей, найденных с разных форумов/мануалов.
Ну и просьба сильно не пинать — первый обзор на данном ресурсе.
На амложиковых ТВ-боксах с аппаратным ускорением захват не работает.
Штука прикольная, уж слишком много «но» и «если».
Но тут же крупноузловая сборка, и все такое.
Просмотровщик XnView, к тому же ещё и бесплатный. На скрине указан необходимый фильтр.
https://aliexpress.com/item/item/BEILAI-DC-12V-Dream-Color-LED-Controller-133-Mode-Colorful-Magic-RGB-LED-RF-Remote-Control/32809811094.html
Вот, напомнило :)
Имхо, вполне релевантно изображению на экране, что и нужно.
Вчера вечером смотрели grand tour а не мультики — абсолютно не отвлекало и не напрягало. А вот мультяхи — да, мельтешат мощно.
За обзор плюс. Положил в закладки.
Но теперь, благодаря автору, появилась идея приобретения малины и возрождение проекта уже на ней.
а сколько безусловных переходов вставляет вероломный компилятор в ваши свободные от goto программы, даже подумать страшно))
свою шерсть с государственнойассемблер и язык высокого уровня. На асме я тоже JMP использую, как там без этого.а так — оператор как оператор, циклами можно накрутить ещё хуже вермишели)
приведенная программа читается же нормально
Ушел исправлять недостатки по питанию
1) Можно ли как то обойти ограничение в 300шт на проект?
2) Можно ли вообще обойтись без arduino? Если нет может arduino mega позволит как то обойти ограничение в 300шт и будет работать пошустрее?
3) Как вообще все это соединить в плане софта, я имею ввиду подключение SK9288
Ну так ка задаю вопросы было бы неплохо ответить на пару вопросов от камрадов выше.
Если у вас дохнут WS2812B попробуйте WS2813 это более новая версия, в которой при помирании одного диода продолжают работать, так как у нее есть четвертая дублирующая дорожка.
Если вас раздражает мерцание и возникает эффект эпилептического припадка, а у оригинального амбилайта все ок, то секрет тут прост, у оригинального всегда есть подсветка даже на темных участках, чаще всего фмолетового цвета, а когда черный цвет на экране сменяется другим то фиолетовый меняется на нужный цвет с увеличением яркости, и по сути вы не яркую вспышку видите а смену цвета, что выглядит естественней, плавней и не раздражает нервную сиисмему, если такое можно реализовать в софте то было бы круто.
Вот интересный обзор и сравнение диодов apa102 и sk9288 думаю многим тут будет интересно
Вот еще в догонку с форума hyperion-project.org таблица по рекомендуемым к данному проекту светодиодам. Они пишут следующие:
Очень рекомендуем покупать 4-Wire/clocked/synchronous Chipsets они напрямую работают с RPis SPI-Port с ними нет проблем.
С диодами 3-Wire/nonclocked/asynchronous Chipsets напрмер WS2812B есть чиподрос в плане что их придется подключать через дополнительное железо, такое как Arduino
Вот таблица для сранения диодов, актуальна на февраль 2019