К написанию данного опуса меня сподвигло не сколько желание похвастаться красивостью, сколько описать новый гайд для желающих повторить данную конструкцию без «фигурных танцев по граблям».
Проблемма заключается в том, что все существующие гайды и мануалы датируются в лучшем случае 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.
Продолжаем.
Список необходимостей недурственно описан в гайде вверху, только с небольшими изменениями. Блок питания на 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 и выдает вращающуюся радугу).
Вуаля!
Коротенькое видео работы данного решения:
Планирую купить+47Добавить в избранноеОбзор понравился+67
+117
у меня на филипсе 10го года рамка чуть-чуть меньше чем у автора(только диагональ побольше), глаза не режет, всё равно смотришь на картинку, а не на подсветку, она для бокового зрения.
они по-моему не просто крайние пиксели повторяют подсветкой, а квадранты изображения усредняют и не гасят подсветку, в отличие от сабжа, если край черный
но глазами сабж, скорее всего, нормально выглядит, такие резкие границы освещенности это из за камеры, глазом ровнее должно быть
Сделал себе тоже аналогичную штуку на ардуине, как то в итоге не зашло. у филипса эта технология работает более мягко, к тому же филипс как то всю картинку в целом анализирует и светит по всем сторонам, а ардуина захватывает края, в итоге на темных областях диоды отключаются, а с другой стороны наоборот что-то очень яркое и пол стены освещает. К тому же переключение между кадрами эти отключенные диоды включает на полную и получается подсветка мигает то в одной части экрана то в другой. Если картинка постоянно вся заполнена каким-то ярким цветом то работает хорошо, но для просмотра фильмов не особо подходит.
Во-во! Там надо перехватывать видеопоток HDMI, по-честному его распаковывать, пропускать через пару фильтров и мапить это всё на краевые диоды. Сделать можно, но железяка должна быть несколько другого уровня. И лучше таке делать на cpld-шке, наподобие как в осликах FFT и другие realtime math делают.
спасибо
хотел было новый телик с Ambilight… обязательно с Ambilight
теперь уже сильно сомневаюсь
если оно работает на этот финальный генератор эпилепсии похоже — нафиг лесом :)
А есть готовое решение если к телеку подключён комп на винде 10? Вводная — есть телек 49 дюймов, к нему подключён комп на винде, хочется чтобы он был как амбилайт…
Как раз месяц назад делал подсветку по этому проекту
Вот результат youtu.be/S3kFE0pSh_Q
Тв бокс под управлением alexelec так как там boblight работает из коробки
Есть готовые решения и Пк не требуется. я использовал DreamScreen для 50" 1080р ТВ. подключаешь к этой коробочки HDMI сигнал с источника и смотришь. В целом нормально. эффект Вау есть. но видны большие рамки ТВ были и это немного не нравилось. В фильмах тоже не от каждого был эффект Вау от подсветки. Например в Звездных войнах когда красным мечем махали по экране то и подсветка тоже красным горела там где надо. или допустим солнце показывают во весь кадр и комната желтым освещается от ТВ)
Но сменил ТВ на 4К HDR и уже DreamScreen не подойдет т.к. hdmi 1.4 тока и 4К HDR он не передает.
ага глянул. дороговато. 200$. Но я наигрался с этим. уже не интересно) да и в нынешних реалиях мне больше нравится 4K HDR в фильмах, и подсветки не надо по краям экрана. да и теперь у меня по бокам и снизу ТВ стоят колонки и их будет видно, а так в темноте их не видно.
покупал на ебей. для 50" ТВ обошелся в 11к рублей.но это года 2 назад было. это версия DreamScreen под 1080р ТВ. если диагональ меньше то цена чуть меньше была.
У меня WS2812B начали подыхать где-то через пол года. Сначала отдельные светодиоды неправильно показывали цвета, у них умирал канал определённого цвета, затем вообще лента переставала работать дальше сбойных диодов. Если надавить на сбойные, то начинало работать, но не на долго. Отодрал их от монитора и заказал SK9822, они уже полтора года где-то трудятся без единого битого пикселя. Стоят дороже, но на глаз цвета лучше, работают шустрее (фпс больше), говорят ещё ШИМ не виден на низкой яркости, но я и на 2818 не замечал.
Тоже такая же проблема с ws2812b, заказывал у разных продавцов разными партиями. В одной ленте почти сразу подыхать светодиоды стали, во второй спустя полгода. Питание стабилизированное, стоят резисторы на линии данных, перегрева нет. Поглядел парочку битых светодиодов в микроскоп, у всех отвалился контакт от кристаллика, толи сам кристалл греется и вызывает отпайку, толи такой контакт ненадёжный.
И у меня тоже через пол года стали сдыхать зимой, думал из-за статики, ставил подтягивающие к земле резисторы, электролиты. Не помогло.
Расскажите пожалуйста про sk9822, схему подключения и ПО.
Я использую с ПК, управляет Arduino nano, софт Ambibox. Питание взял из системника, подключив их к молексу. Земля у всего этого общая, CI (Clock) — 5й пин ардуины, DI (Data) — 7-й пин. Скетч, на сколько я помню, пришлось писать самому на базе скетча для WS2812, но там буквально пару строк поменять. Библиотека fastled вот такая у меня FastLED-3.1.8, думаю и на других будет работать. Никаких резисторов, конденсаторов, фильтров и прочего не использовал.
Скетч предположительно этот, сложно сказать точно, давно дело было.
Adalight_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>
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 тут
Дополнительная информация
// Slightly modified Adalight protocol implementation that uses FastLED
// library (http://fastled.io) for driving WS2811/WS2812 led stripe
// Was tested only with Prismatik software from Lightpack project
#include "FastLED.h"
#define NUM_LEDS 300 // Max LED count
#define LED_PIN 11 // arduino output pin
#define GROUND_PIN 10
#define BRIGHTNESS 255 // maximum brightness
#define SPEED 115200 // virtual serial port speed, must be the same in boblight_config
CRGB leds[NUM_LEDS];
uint8_t * ledsRaw = (uint8_t *)leds;
// A 'magic word' (along with LED count & checksum) precedes each block
// of LED data; this assists the microcontroller in syncing up with the
// host-side software and properly issuing the latch (host I/O is
// likely buffered, making usleep() unreliable for latch). You may see
// an initial glitchy frame or two until the two come into alignment.
// The magic word can be whatever sequence you like, but each character
// should be unique, and frequent pixel values like 0 and 255 are
// avoided -- fewer false positives. The host software will need to
// generate a compatible header: immediately following the magic word
// are three bytes: a 16-bit count of the number of LEDs (high byte
// first) followed by a simple checksum value (high byte XOR low byte
// XOR 0x55). LED data follows, 3 bytes per LED, in order R, G, B,
// where 0 = off and 255 = max brightness.
static const uint8_t magic[] = {
'A','d','a'};
#define MAGICSIZE sizeof(magic)
#define HEADERSIZE (MAGICSIZE + 3)
#define MODE_HEADER 0
#define MODE_DATA 2
// If no serial data is received for a while, the LEDs are shut off
// automatically. This avoids the annoying "stuck pixel" look when
// quitting LED display programs on the host computer.
static const unsigned long serialTimeout = 150000; // 150 seconds
void setup()
{
pinMode(GROUND_PIN, OUTPUT);
digitalWrite(GROUND_PIN, LOW);
FastLED.addLeds<SK9822, LED_PIN, 13, RBG>(leds, NUM_LEDS);
// Dirty trick: the circular buffer for serial data is 256 bytes,
// and the "in" and "out" indices are unsigned 8-bit types -- this
// much simplifies the cases where in/out need to "wrap around" the
// beginning/end of the buffer. Otherwise there'd be a ton of bit-
// masking and/or conditional code every time one of these indices
// needs to change, slowing things down tremendously.
uint8_t
buffer[256],
indexIn = 0,
indexOut = 0,
mode = MODE_HEADER,
hi, lo, chk, i, spiFlag;
int16_t
bytesBuffered = 0,
hold = 0,
c;
int32_t
bytesRemaining;
unsigned long
startTime,
lastByteTime,
lastAckTime,
t;
int32_t outPos = 0;
Serial.begin(SPEED); // Teensy/32u4 disregards baud rate; is OK!
Serial.print("Ada\n"); // Send ACK string to host
startTime = micros();
lastByteTime = lastAckTime = millis();
// loop() is avoided as even that small bit of function overhead
// has a measurable impact on this code's overall throughput.
for(;;) {
// Implementation is a simple finite-state machine.
// Regardless of mode, check for serial input each time:
t = millis();
if((bytesBuffered < 256) && ((c = Serial.read()) >= 0)) {
buffer[indexIn++] = c;
bytesBuffered++;
lastByteTime = lastAckTime = t; // Reset timeout counters
}
else {
// No data received. If this persists, send an ACK packet
// to host once every second to alert it to our presence.
if((t - lastAckTime) > 1000) {
Serial.print("Ada\n"); // Send ACK string to host
lastAckTime = t; // Reset counter
}
// If no data received for an extended time, turn off all LEDs.
if((t - lastByteTime) > serialTimeout) {
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB)); //filling Led array by zeroes
FastLED.show();
lastByteTime = t; // Reset counter
}
}
switch(mode) {
case MODE_HEADER:
// In header-seeking mode. Is there enough data to check?
if(bytesBuffered >= HEADERSIZE) {
// Indeed. Check for a 'magic word' match.
for(i=0; (i<MAGICSIZE) && (buffer[indexOut++] == magic[i++]););
if(i == MAGICSIZE) {
// Magic word matches. Now how about the checksum?
hi = buffer[indexOut++];
lo = buffer[indexOut++];
chk = buffer[indexOut++];
if(chk == (hi ^ lo ^ 0x55)) {
// Checksum looks valid. Get 16-bit LED count, add 1
// (# LEDs is always > 0) and multiply by 3 for R,G,B.
bytesRemaining = 3L * (256L * (long)hi + (long)lo + 1L);
bytesBuffered -= 3;
outPos = 0;
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
mode = MODE_DATA; // Proceed to latch wait mode
}
else {
// Checksum didn't match; search resumes after magic word.
indexOut -= 3; // Rewind
}
} // else no header match. Resume at first mismatched byte.
bytesBuffered -= i;
}
break;
case MODE_DATA:
if(bytesRemaining > 0) {
if(bytesBuffered > 0) {
if (outPos < sizeof(leds))
ledsRaw[outPos++] = buffer[indexOut++]; // Issue next byte
bytesBuffered--;
bytesRemaining--;
}
// If serial buffer is threatening to underrun, start
// introducing progressively longer pauses to allow more
// data to arrive (up to a point).
}
else {
// End of data -- issue latch:
startTime = micros();
mode = MODE_HEADER; // Begin next header search
FastLED.show();
}
} // end switch
} // end for(;;)
}
void loop()
{
// Not used. See note in setup() function.
}
Дальнейшие действия — [...] создание файла конфигурации, установка Hyperion через SSH и отправка конфигурационного .json-файла не отличаются от всех известных мне гайдов в Сети.
Так а что вы описали-то? Как скетч в ардуину залить? Вроде тоже от остальных гайдов не отличается ничем. Вы бы подробнее остановились как раз на настройке актуальных версий Коди и гипериона. Работает ли захват при использовании аппаратного ускорения различных видео форматов и пр. интересных деталях. Какие версии ПО использовали, под 18й коди нормально завелось? Обзор закончился на самом интересном месте.
Да что вы автору такие страшные вопросы-то задаете? Он вот магическую скорость на немецком форуме нашел, и радостно об этом докладывает, не потрудившись понять, а почему она, почему не работает на других, и так далее.
Ты не правильную цифру нашел. На самом деле там должно быть 516894 и в приложении и в ардуинке. Просто кто то округлил, а другие люди по незнанию копируют.
Ну вот у меня сборка на 17м KODI — на ней завелось, сборку на 18-й может сегодня-завтра опробую, но в другой конфигурации.
Аппаратное ускорение — работает, без проблем. Гасить специфические функции — не пришлось (тем более, что структура команд и расположение конфигурационных файлов поменялись и их выколупывать и гасить — нетривиальный ребус)
Описал — компиляцию/выжимку правильного применения мелочей, найденных с разных форумов/мануалов.
Ну и просьба сильно не пинать — первый обзор на данном ресурсе.
Дайте знать что получится с 18й версией. Как-то давно когда переходил, захват отвалился. Они там что-то прилично поменяли, с тех пор не разбирался.
На амложиковых ТВ-боксах с аппаратным ускорением захват не работает.
Штука прикольная, уж слишком много «но» и «если».
Коди с аппаратным работает. .mkv с разрешением 1080p (больше мой старичок не тянет) и звуком AC3 — тянет и больше 48 градусов проц с пассивным охлаждением не греется
Ну кагбе да, шо не ШИМ. Но сама суть управления последовательностью модулей по 1му проводу и 2-м имеют существенные отличия в реализации, чуть поболе, нежели в .json пару строк поправить (а с учетом, шо свежая версия Гипериона еще и файл в уматовом формате сохраняет...)
Вот вы не погуглили после моего комментария, а зря. Нет там никаких двух проводов, управление всегда по одному проводу. Просто от SPI там используется линия данных MOSI без CS, MISO и тактового сигнала.
Прошу прощения что немного не в тему, но может кто знает как подключить ленту ws2811 с 3 контактами к контроллеру с 4 контактами?что то методом тыка не хочется,
А есть автономный «ambiligth», который работает без привязки к конкретному источнику сигнала? Чтобы у него был HDMI вход, в который втыкаешь кабель от компа/тв бокса/консоли, он анализирует изображение и управляет свечением, а дальше через HDMI выход пробрасывает видео на телевизор.
Есть. Примеров море. HDMI преобразуется в аналоговый и идет на usb карту захвата, на raspberry pi софт захватывает экран и шлет данные на ардуинку, а та управляет лентой.
Для меня идеальным вариантом оказалась связка ТВ-бокс+Ардуино+БП+Лента. В ТВ-бокс установил и настроил с Play Mаркета приложение Android Ambilight Application. В Ардуино «залил» скетч от разработчика Android Ambilight Application, естественно подправленный под мою конфигурацию по количеству светодиодов. И теперь балдею. Это, в итоге оказалось самым простым вариантом. Рекомендую.
За воплощение пять, а вот идея — ну на любителя. Я лично когда смотрю фильм, концентрируюсь на том, что на экране, если за краном постоянно будут бегать световые зайчики — все время буду отвлекаться. Это круто только на медленных проходах, пейзажах например, особенно где есть небо. Но на постоянку — не не)
Вот как раз наоборот — за идею 5, а воплощение на троечку. У меня старенький Филипс с Ambilight — очень приятная штука. А тут какие то дикие скачки света высокой интенсивности — действительно эпилепсию заработать можно.
Как раз на OpiPC я в свое время делал. Пришлось отказаться от этой затеи из за невозможности на нем использовать Hyperion/Boblight одновременно с железным ускорением. А на программном, 720p идет с заметными фризами, 1080p вообще превращается в слайд-шоу.
Но теперь, благодаря автору, появилась идея приобретения малины и возрождение проекта уже на ней.
Рекомендую автору поставить подтягивающие резисторы к земле, электролиты побольше, снизить вольтаж до 4.9в. 2812 дохнут как мухи… У меня стали подыхать от начала к концу ленты. Быть может если бы я сделал это сразу, проработало бы дольше.
Зависит лишь от качества ленты. Одна с конца 14 года (после этого обзора сделал) работает без всяких конденсаторов/резисторов, местами болтаясь в воздухе по несколько часов ежедневно. Вторую брал позже для экспериментов с цветомузыкой — и питание правильное с парой резисторов и конденсатором и приклеена была к алюминиевому уголку по всей площади, а толку ноль.
Что-то я не уловил — а как kodi/openelec узнает, что что-то надо на ардуино слать? И что за специальный кабель нужен для связи малинки и ардуино? А запитать ардуино от ТВ не выйдет? У меня малинка от usb порта ТВ работает.
Хочу создать вот такого монстра с последующем описанием проекта на муське. хотелось бы взять диоды SK9288 Raspberry Pi 3 B+ Все это через тв приставку nVidia Shield TV подключить к телику 65` хотелось бы подключить в идеале ко всем 4м граням но думаю и 3 будет достаточно. общая длинна 3х граней 308см. Для жиру хотелось бы подрубить ленты по 144 диода на метр, ну ли хотябы 92 на метр. нашел такую на тао но вот какая загвоздка если подрубать ленту через arduino то там в скейтче есть какое-то ограничение в общее количество светодиодов на проект в 300шт. В моем случае в исполнении 144шт/м выйдет 444 диода на проект, в исполнении 92шт/м выйдет 284 диода на проект. Собственно вопросы:
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
Только зачем оно на телеке?
Про природу надо, что-то покрутить.
я вот как бы уже 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, к тому же ещё и бесплатный. На скрине указан необходимый фильтр.
aliexpress.com/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