Управляем светодиодной лентой при помощи Raspberry Pi и Android

Здравствуй, завсегдатай и гость Хабра.

Давно читаю Хабр, но всё никак не было поводов написать статью, пока меня не накрыло мне очередной раз не напомнили о существовании Raspberry Pi и о такой вещи как WS2801 LED Strip. Тут уже однажды писали о подобной, но для связи с Ардуиной, чтобы получить Эмбилайт, поэтому я решил рискнуть и написать свою статью, с Лего и Котиками.

В статье будет мало картинок, несколько видео, много текста, включая лирические отступления не по сабжу и совсем мало кода, но в самом конце будут ссылки на проект на Гитхабе. А теперь обо всём по-порядку:

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


Но тут тот же коллега подкинул интересную инфу: можно заказать с Ибея управляемую (адресную) "гирлянду" (+ блок питания, коннекторы и соединительные проводки на свой вкус и цвет) и простейшим способом получить DYI Ambilight как это рассказано, например, тут. Или же, можно просто играться с этой гирляндой как душе угодно: в теории она позволяла в любой момент времени зажечь любую из лампочек любым RGB цветом, а ведь об обладании такой штукой я мечтал уже несколько лет!

Не долго думая, заказал необходимые части на Ибее. Расчётный срок доставки был порядка 3х недель, так что было пока время отвлечься на подготовку к поездке в отпуск на неделю в Швецию. По возвращении ещё был неделю дома, пытался заранее найти как можно больше информации о том как гирлянду надо будет подключать, искал различные скрипты и библиотеки для написания собственных алгоритмов управления. Толкового нашлось не очень много, одна Хабра-статья, правда она про связку с Ардуиной и несколько ссылок привели на этот Python-проект. Так как задачи делать эмбилайт у меня как раз таки не было, а к Python душа не лежит (сам люблю Java + Android), полезной информации там для себя нашёл не много. Время свободное было, гирлянда никак не приезжала, решил накатать на Андроиде простенькое приложение-симулятор гирлянды и написать пару алгоритмов управления последней. Приложение было на столько простое и не менее кривое, что даже показывать никому не стал.

В последние выходные отпуска мне привезли из Новосибирска долгожданную коробку Lego 42009, которая временно затмила мои мысли о гирлянде.

Планы по сборке Лего были назначены на следующие выходные, когда, примерно, ожидался и приезд посылки из Китая. Долго думал, чего же больше я жду — торжественного открытия коробки Лего и сборка топового на данный момент набора Lego Technic или же игра с мечтой последних нескольких лет. Посылка пришла вечером в пятницу, а на утро субботы планировалось начать сборку конструктора и снятие Time-Lapse процесса сборки.
Разумеется, я не смог удержаться в пятницу вечером и попытался подключить гирлянду в Пирожку, но в виду отсутствия необходимых проводков, подключение к GPIO портам RPi'я было затруднительно. Найдя какие-то старые проводки, разобрав старую мышку, начитавшись статей в Интернетах пытался подключить гирлянду хоть как-нибудь и запустить пробные скрипты. Но всё было тщетно. При подключении питания к гирлянде зажигалась первая лампочка белым светом и всё, никаких реакций не было независимо от того, что я запускал на Пироге. Изрядно помучавшись, решил отложить дело до утра.

Утром пришёл друг-фотограф для помощи в сборке и съёмки Лего, вместе с ним также безуспешно попытались подсоединить гирлянду к Пирогу. Через час бросили это дело, пошли готовить environment квартиры к сборке Передвижного Крана.
[лирическое отступление]
Сборка прошла на ура, кран оправдал все ожидания, оказался даже больше, чем думал, сам процесс сборки был непростой и увлекательный. Time-lapse видео сборки можно посмотреть тут.
[/лирическое отступление]

Так как начали позже, чем планировали, закончили ещё позже, к гирлянде не возвращались больше. Зато днём следующего дня приехал другой знакомый, который уже специалист — железячник, заодно и привёз очень нужные проводки разной длины и разъёмов для подключения гирлянды к Пирогу. Сели с ним ковыряться. Потратили часов 5, наверное и, казалось бы, безуспешно. Поначалу гирлянда не реагировала на внешние раздражители, то есть нас, никак. Потом иногда начали мигать несколько первых огоньков при касании разъёмов подключения к пирогу. Спустя час выяснили, что если замыкать пальцами провода, которые должны идти к Пирогу, то зажигаются или тухнут несколько первых огоньков гирлянды. Значит, она всё же рабочая, оставалось понять, почему же не работают скрипты. Беглый анализ Пайтоновского скрипта показал, что используется устройство /dev/spidev0.0, собственно у меня в системе он присутствовал. Параллельно пытался гуглить проблему, что-то находил, применял что скажут, но безуспешно.

К концу дня совсем выбившись из сил, гость меня покинул, а пока он ехал домой я решил забрести в конфиг Пирога
raspi-config
и обнаружить главный epic fail последних пары дней, а именно, что SPI у меня был выключен…
Включил. Скрипт заработал, можно было включать-выключать все диоды белым цветом и запускать два бесконечных действия — fade (постепенное появление и угасание рандомными цветами), или же chase — последовательно бегающий огонёк из начала в конец.

Счастью не было предела. Сделал даже пару фотографий построенного Лего-крана при свете гирлянды:
Lego 42009

Lego 42009

Cкудные возможности скрипта быстро надоели, а написать что-то своё на Пайтоне мне было достаточно проблематично. Поэтому, было принято решение написать своё простенькое Java-приложение для Raspberry и начать это завтра. А ведь «завтра» — это был понедельник. Именно в этот понедельник я не хотел идти на работу больше, чем во все остальные понедельники ранее. Пережив понедельник, убежав с работы пораньше, повесив гирлянду под потолок, на верхний край ковра, что висит и закрывает большую дыру в обоях, в моей квартире, уселся за код, но тут меня ждал ещё один подвох, впрочем, ожидаемый.
Установив все необходимые java-пакеты решил написать Hello World, скомпилить и запустить прям на пироге. Компиляция даже такого простого приложения на Rapsberry Pi-е заняла несколько секунд, порядка 5, что уж говорить о дальнейшем коде? Это было достаточно неудобно, также как и отсутствие нормальной IDE. Поэтому было принято решение писать код на большом PC, на пирог заливать по ftp скомпилированные классы и там их уже запускать. Позже, когда проект разросся до большого количества файлов стал собирать сразу в jar-ы. Подобрались к самому интересному. Стоял главный вопрос: как заставить гирлянду зажигаться используя Джаву. Поиск в Гугле ничего не дал, находились исходники на Си с использованием библиотек и пара скриптов на Пайтоне. На последнем это выглядело так:

spidev = file("/dev/spidev0.0", "wb")
spidev.write(pixels)
time.sleep(refresh_rate/1000)

где pixels — массив байтов, размером в 3 раза большим, чем количество лампочек в гирлянде. Каждые три элемента в массиве — это значения для RGB-каналов для каждой лампочки. Допустим, у нас есть гирлянда из 50 лампочек, чтобы её всю зажечь, нужно писать в файл /dev/spidev0.0 массив вида {R0, G0, B0, R1, G1, B1, ... R49, G49, B49}. Никаких заголовков, просто массив байтов и flush после.
Главная идея заключалась в том, что в каждый момент времени нужно писать в файл весь массив, даже если хочешь зажечь одну лампочку. Задержка по времени нужна для того, чтобы видеть все изменения на ленте, впрочем, её можно варьировать как угодно.



Возвращаясь к Java, там код записи в файл выглядит почти также (try-catch опущен):

FileOutputStream spidev = new FileOutputStream(new File("/dev/spidev0.0"));
spidev.write(bytes);
spidev.flush();
Thread.sleep();

Собственно, написав простенький класс работы с устройством, написал ещё пару классов-обёрток для различных простых действий, таких как зажечь определённую лампочку заданным цветом, зажечь всю гирлянду нужным цветом, тот же chase и fade. Днём позже прикрутил ещё визуализацию работы стека и чего-то ещё.



Но опять же, запускать эти «алгоритмы» — мало интереса и это тоже быстро надоело. Хотелось непосредственного управления. Было решено написать простенький сервер, опять же на Джаве, который принимал бы строковые данные, парсил их и взаимодействовал с гирляндой на основе присланных «команд». Для удобства было сделано так, что порт, количество лампочек в гирлянде и устройство (/dev/spidev0.0) задавались с помощью параметров при запуске сервера.
Клиент, в сою очередь, на Андроиде. В первой версии клиента был минимальный функционал — включить-выключить, установить цвет с помощью RGB-ползунков и «двигать» огонёк ещё одним ползунком. Не смотря на мою нелюбовь «с детства» к клиент-серверному коду, написанный код работал и даже правильно.
Довольно быстро понял, что 50 лампочек мне будет недостаточно и заказал ещё столько же в рассчёте на то, что позже их можно будет сложить в квадрат 10х10, а это новое поле для полёта фантазии, тут можно будет делать хоть классическую змейку.
Чуть позже мой знакомый студент помог переписать клиент-серверный код под более правильную архитектуру, теперь клиент общался с сервером с помощью заранее заданного набора команд, а данными для каждой команд служил параметр типа Object, следовательно, там могло быть всё, что угодно. Также, для защиты от «несанкцианированного доступа», на сервер добавил поле с паролем, а на клиенте посылал его первой командой. Если он не подходил, сервер отключал клиента. Это было сделано на тот случай, если кто-то знает по какому имени/айпишнику и порту доступен мой пирожок, чтобы не смог попытаться поиграться гирляндой.
Переделав код под новую архитектуру, начал наращивать функционал вширь: добавлял новые элементы интерфейса и новые алгоритмы управления лампочками.
Android Client
Добавилось и мерцание RGB-цветами и рандомными и радуга, в том числе двигающаяся. Был даже прикручен NFC для включения-выключения лампочек при чтении любой метки (удалено из финальной версии) Отдельно стоит упомянуть, что был прикручен Гугловый SpeechRecognizer, который был настроен на восприятие буквально 5ти команд: «красный», «зелёный», «синий», «жёлтый» и «радуга». Ну и самая, на мой взгляд, интересная функциональность — это использование всей длины гирлянды как… эквалайзера, наверное правильней сказать: количество последовательно зажжённых лампочек зависело от громкости звука, воспринимаемого микрофоном смартфона. Особенно эффектно это выглядит на примере трека Caspa — Sir Rock A Lot:


Общий обзор функциональности приложения:


После этого ещё немного побаловался с парой алгоритмов, правил найденные баги на сервере и клиенте, а также слегка рефакторил код. Сейчас главный управляющий экран выглядит так:
Весь код выложен на Гитхаб (библиотека, сервер и клиент) для неравнодушных. Буду рад, если он чем-то поможет. У самого планы сделать форк в версию 2.0, функциональность которой до конца я пока не определил для себя, но в планах примерно следующее:
  1. Выбор экрана управления: прямая лента, прямоугольник или квадрат.
  2. Расширение текущей функциональности для ленты, вытянутой в одну прямую.
  3. Написание пачки алгоритмов под вариант, когда лента сложена в квадрат и прямоугольник:
    • Управление зажжёной лампочкой
    • Эквалайзер из центра квадрата
    • Статичный текст/Бегущая строка
    • Змейка
    • что-нибудь ещё. Если будут идеи, пишите, с радостью обсужу и приму к сведению.

Из мелочей, что забыл вовремя написать:

1. Возможно надо корректировать цвет каждого диода перед записью в файл потому, что свет получается «холодный» и отдаёт в синеву при значениях 255-255-255. В Пайтоновском скрипте, что я находил, так и делается:

def correct_pixel_brightness(pixel):
corrected_pixel = bytearray(3)
corrected_pixel[0] = int(pixel[0] / 1.1)
corrected_pixel[1] = int(pixel[1] / 1.1)
corrected_pixel[2] = int(pixel[2] / 1.3)
return corrected_pixel

2. Иконку нарисовал мне тот же человек, что помогал записывать тайм-лапс постройки Лего. В основе неё лежит фотография моей кошки-упорошки
кошка-упорошка

3. Описанные действия с файлом /dev/spidev0.0 работают только для лент с контроллером WS2801. В прошлые выходные подарили на ДР знакомому (necrys) именно ленту, а не гирлянду (на этот раз как раз для эмбилайта), очень надеясь, что там тоже WS2801. Заказывать из Китая времени не было, покупали у нас в городе, продавец утрерждал, что контроллер такой же, хотя никаких надписей на упаковке и самой ленте не было. В самый разгар празднования Дня Рождения решили попробовать подключить. Безуспешно провозившись несколько часов, казалось бы, зная все подводные камни, включить так и не удалось, пока случайно не попробовали поменять протокол на SM16716, после чего она лента зажглась и даже работал chase, но гаснуть всё равно не хотела. Написание простой с-программы вопрос не решил, попытка записи массива по 3 байта зажигала такие участки ленты, что логику работы в тот день нам понять не удалось. После экспериментов, к середине следующего дня, новому обладателю ленты удалось таки раскурить-понять алгоритм работы с лентой: в файл нужно писать массив по 4 байта на светящуюся единицу, где первый байт должен быть всегда 0xFF, а остальные уже RGB. Изменение значения первого байта ведут к поведению ленты, смысл которого пока понять не удаётся. Именно в виду разницы контроллера, сборка и патчинг boblight, который с ним работал бы корректно и соединить его xbmc заняло несколько дней. Но после результат был достигнут:

За код просьба сильно не пинать, опыта написания больших проектов, к сожалению, пока не имею, да и когда начинал писать код, не думал, что вырастет до такого. А ещё это первый опыт работы с Гитом и выкладка своего кода в Open-Source.

Спасибо, надеюсь было интересно.
Поделиться публикацией
Ой, у вас баннер убежал!

Ну, и что?
Реклама
Комментарии 43
  • 0
    Готовимся к новому году? :)
    Давненько хотел попробовать сделать что нибудь на Raspberry Pi, спасибо за статью!
    • 0
      Хорошо получилось :) Особенно мобильное приложение порадовало :)
      Вдохновили на написание своей статейки. :)
      • 0
        Еще хотелось спросить, учитывалась ли нелинейность розжига светодиода?
        • 0
          Рад, что понравилось :)
          Что подразумевается под «нелинейностью розжига»?
          • 0
            Видимо, что светодиод горящий «на 0,5» выглядит «на 0,9».
            • 0
              А, если это, то да, замечал такое, но в проекте учёта не делал, как и не делал корректировки гаммы. Спасибо, что напомнили, запишу себе в ToDo, что нужно этим заняться.
              • 0
                Да, именно это :) решается банальным pow )
                • 0
                  Мимопробегал, ambilight из конца статьи запиливал я.

                  В boblight, который использовался для создания ambilight уже используется гамма-коррекция. Можно настраивать из конфига, что кстати само по себе неудобно. Каждая правка конфига — рестарт демона boblight, на что болезненно реагирует и xbmc, приходится рестартовать и его, в итоге настройка цветности для ambilight превращается в муторный процесс — поправил конфиг -> выключил xbmc, boblight -> включил xbmc,boblight. Думаю над правкой кода boblight, для интерактивной настройки параметров гаммы в boblight.
                  • 0
                    Помимо гаммы(конечная разность яркости светодиодов ргб), есть еще такое понятие как нелинейность(когда светодиод разжигается при 40% ШИМ как буд-то уже на 80% и дальнейшее повышение ШИМ с 40% глазом почти не котируется. Получается снижается разрешающая способность и общая няшность). Я думаю что там уже оно сделано, но проверить не помешает, картинка должна стать лучше :)
                    • 0
                      В коде boblight самая простая такая коррекция, степенной ф-ией делается для каждого канала (r, g, b) отдельно.

                        //gamma correction
                        if (m_gamma != 1.0)
                          outputvalue = pow(outputvalue, m_gamma);
                        //adjust correction
                        if (m_adjust != 1.0)
                          outputvalue *= m_adjust;
                      


                      code.google.com/p/boblight/source/browse/trunk/src/device/device.cpp#93
                  • 0
                    Банальным, но очень ресурсоёмким, проще табличным методом. Хотябы даже таблицы эти считать в процессе инициализвации.
                    • 0
                      извольте, у меня на stm32 56Mhz на 500 светодиодов считается с 60 кадрами в секунду и ничего ;)
                      • 0
                        Ничего конечно, но целая уйма энергии тратится впустую. Зачем? Лучше поспать подольше…
                        • 0
                          В моем проекте контроллер не спит, он всегда работает. если что то отображает )
                          • 0
                            ибо такое количество светодиодов жрут несоизмеримо больше чем контроллер считающий pow ))
        • +4
          Простите за оффтоп, но черт возьми! Отличный ковер!
          • +2
            Да еще и с эмбилайтом! Фантастика!
          • 0
            Жаль, что сейчас уже до НГ не дойдет, если заказывать. Но зато к следующему НГ можно подготовиться. Добавил в избранное. :)
            • 0
              Кстати, можно не обязательно из Китая заказывать эти гирлянды. Например у нас в городе есть такая замечательная вещь как «РадиоРынок», там я нашёл точно такие же гирлянды и просто ленты (одну из которых мы и подарили тов. Necrys, чтобы он потом сделал тот самый Ambilight, что в конце статьи). Разумеется, подороже, но некритично, процентов на 20, где-то. Так что, возможно и у Вас в городе можно приобрести такие же.
            • 0
              Класс! Очень полезный пост. Ждал я такого т.к. сам хочу смастерить что нить подобное
              • +3
                В этом посте есть все — Пай, котики, ковер, лего и новогоднее настроение. Спасибо =)
                • +3
                  Жду статью «Простой мультвибратор на процессоре Intel i7»
                  А вообще эмбилайт приколол. Хорошо получилось.
                  • +4
                    Мультивибратор надо из двух i7 делать! Это же знает каждый школьник…
                  • 0
                    для защиты от «несанкцианированного доступа»… поле с паролем, а на клиенте посылал его первой командой.… если кто-то знает по какому имени/айпишнику и порту доступен мой пирожок, чтобы не смог попытаться поиграться гирляндой.


                    Обычный пароль перехватывается анализом трафика, раз уж у НЕГО есть доступ в вашу сеть… Лучше бы по принципу вопрос-ответ — сервер шлет вопрос а подключившийся клиент должен выдать правильный ответ, ответ является преобразованием вопроса какой-либо функцией которая и является секретом. Вычислить функцию прослушиванием трафика будет сложно и скорей всего ЖЕЛАЮЩИЙ просто оставить все свои попытки взлома. Или даже нет, не говорить ему что все плохо — просто поступившие данные отправить в утильdev/null, а на малинке зажечь красную лампочку.
                    • 0
                      Да, это понятно, что пароль прослушивается и лучше всё делать так, как Вы описали. Вариант, что сделан у меня — лишь пробный и, по большей части, сделан так «чтобы был», как говорится, и уж точно не претендовал на премию как самый правильный и безопасный :)
                      К тому же, весь код выложен в общественный доступ, так что, все желающие могут его обновлять и дополнять.
                    • 0
                      Эмбилайт немного не правильный. Сделайте так чтобы, когда картинка тёмная чуть света все равно было, чтобы не было нагрузки на глаза. Вообщем для общего фона света добавить чуть белого.
                      • +1
                        Только это всё-таки не эквалайзер, а визуальный анализатор спектра. Почему-то их многие путают.
                        • 0
                          А в итоге получилось соединить несколько гирлянд? Давно хочется забацать Кубик, но в пайке я профан. А тут из коробки почти все готово.
                          • 0
                            Я для эмбилайта ленту порезал на 4 части, соединил специальными коннекторами (хотя можно и спаять, но хроническое рукожопие, не стал рисковать) — она заработала. На конце ленты при этом есть специальный штеккер, для подключения ещё одной секции, но насколько я понял из схем, найденых в интернете, для следующей секции нужно дополнительно подключать питание. Но, я так сам себе думаю, что смысл такой, что запитать можно и в одном месте, но с мощного источника, чтобы хватило всем — иначе под конец цвета начнут съезжать. Какая конкретно мощность нужна — надо смотреть у конкретных лент/гирлянд.
                            • 0
                              Мощность нужно именно что подводить в нескольких местах — на лентах обычно тонкие дорожки, не рассчитанные на удвоение её длины. Если просто разные цвета зажигать ещё получится, то белый вдруг внезапно рассыпется в набор разноцветных отсветов.
                            • 0
                              Пока что использовалась только одна, на 50 «лампочек». Буквально только сегодня днём пришло извещение с почты о том, что прибыла ещё одна такая же гирлянда. Завтра буду подключать-соединять. Отпишусь по результатам.
                              Кубик я видел, но пока не рвусь к его созданию по нескольким причинам:
                              0. В пайке я тоже профан.
                              1. Маленький, 8х8х8 уже требует изрядного количества диодов. Даже если учесть, что они там одноцветные.
                              2. (частично вытекает из п.1.) одноцветный как-то не очень интересно. Мне хотелось поиграться с алгоритмами, ориентированными именно на цвета.
                              3. в этом случае сильно возрастает сложность создания алгоритмов. Я больше недели ночей потратил на создание пачки алгоритмов для «одномерной» ленты, в планах стоит создание алгоритмов для двух-мерного прямоугольника, что уже на порядок сложнее. А уж про сложность для 3х-мерного куба я даже думать не хочу. Во всяком случае пока что.
                              • 0
                                Отписываюсь:
                                соединить друг с другом проблемой не было, хоть и разные немного контакты были, но появилась проблема более глобального масштаба: под управление попадают только первые две лампочки. Третья рандомит цветами немного, потом просто становится белой. Дальше вообще ничего не делается.
                                При первом соединении с питанием они все моргают, так что в теории работают все.
                                Подключать новую гирлянду непосредственно к Паю тоже пробовал: та же ситуация.
                                В общем, я в немного расстроен, но руки пока не складываю.

                                P. S.: зато сделал ковёр радужным! :)
                                image
                                • 0
                                  Предлагаю третью вырезать. Возможно она херит сигнал. У нас так было из 50 микросхем где то 25 была сбойная (брак или передержали паяльник). Через себя она пропускала мишуру и на стенде у нас получалась просто психоделика.
                                  • 0
                                    Да уже проэкспериментировали. Третья оказалась реально бракованной. Съездил вчера как раз на РадиоРынок, купил три штучки про запас, приехал домой, когла спаял первые две и оду из новых решил проверить работоспособность. Не заработали. Проверил остальные две ленты, даже первоначальную — тоже самое. Вот уже второй день бьюсь над проблемой. Кажется, что-то с Паем, а вот что — понять не могу
                                    • 0
                                      В итоге экспериментов сжог Пирог :( Благо нашёлся знакомый, который за полцены мне отдал свой. Ездил сегодня на тот же РР, решил купить новую, целую из 50 лампочек, из рассчёта в будущем всё же сделать куб 5х5х5. И на этом мои приключения не заканчиваются.
                                      Приезжаю домой, радостный, подключаю новую ленту, а она горит странным цветом и не реагирует на «команды». Пригляделся к маркировке проводов. Оказалось (!) при тех же цветах у проводов другое назначение, только красный (+5V) тот же. Вот и одна из возможных причин поломки Пирога.
                                      Ладно, поменял провода, сделал также как было на старой ленте. Реакция появилась, но неправильная. Тестил на pixelpi.py. Поигрался с чипами, выяснилось, что у свежекупленной чип LPD6803! Поеду на днях сдавать.
                                      Надо было покупать на Ибее вторую у того же продавца, что и первую брал, а в итоге позарился на аукцион, который я выйграл и сэкономил 200р. В итоге проиграл уже больше раз в 10.
                              • 0
                                [del]
                                • 0
                                  На ковре-самолете мимо ра-ду-ги...)
                                • 0
                                  Скажите, у вас в ссылках специально коннекторы на 5.5 мм, а блоки питания на 2.5 мм или по недогляду? Или я что-то пропустил и недопонимаю?
                                  • 0
                                    В ссылках ровно то, что я покупал. Я покупал бп на 2.5мм, обрезал и соединял с коннекторами из третьей ссылки. Процесс подключения ленты я повторял отсюда
                                  • 0
                                    Ambilight на видео запаздывает относительно картинки, это никак не исправить?
                                    • 0
                                      Уходит некоторое время на захват и обработку кадра. Захват на «железном» ambilight мне кажется будет быстрее, здесь можно ускорить. Чисто теоретически, если брать только обработку видеофайла, а не готового потока, можно попытаться синхронизировать видеопоток и ленту. Но тут много работы, в среднем при просмотре фильма латентность достаточная, чтобы не замечать эффекта торможения (если действительно смотреть фильм, а не разглядывать, как лента работает).

                                      Мимопробегавший создатель наколенного ambilight из конца статьи.
                                      • 0
                                        Если сделать устройство обработки кадра более мощным, задержка сократится? Или она от процессора не зависит?
                                        Во сколько обошёлся этот эмбилайт? Есть ли видео сравнения с настоящим? Мне казалось например что у настоящего больше зона свечения по бокам ТВ.

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

                                    Самое читаемое