//

Проекты (Автор: dez)

Мне всегда нравилась идея фоновой подсветки Ambilight (Ambiglow), цвет которой адаптируется под изображение на экране. Однако с завода эта функция, как я понял, на сегодняшний день есть только в телевизорах и мониторах фирмы Philips, потому что патенты и всё такое. Отсюда следует ограниченный ассортимент, проблемы с наличием в магазинах, и цены будь здоров. В итоге у нас в семье всегда покупалось что-то другое.

Но есть альтернативный путь. Подобную подсветку можно самостоятельно добавить к любому дисплею. Для этого нужно наклеить на заднюю стенку адресную светодиодную ленту (WS2812, APA102 и т.д.) и подключить её к внешнему устройству, которое будет ей управлять. Такое устройство я как раз и решил изготовить самостоятельно. Что из этого вышло - можете узнать из видео (дубль на RT), приключение и его итоги в нём изложены более чем подробно. В этой заметке попробую кратко пройтись по основным моментам, ну и может добавить пару слов вдогонку к видео.

Устройство должно брать откуда-то информацию о том, что происходит на экране и какими цветами зажигать, и в этом плане способов сделать подсветку довольно много - на любые кошельки, скилл и потребности. Девайс должен быть автономным? Тогда мутант на базе RasPi или FPGA, который ставится "в разрыв" видеокабеля или снимает экран на камеру. Хочется смонтировать скрытно и без проводов? В комментах подсказывали про WLED для ESP32, софт на компе или малине будет захватывать экран, усреднять цвета по зонам, и отправлять на устройство команды по Wi-Fi. Если специфических требований нет, дисплей работает как монитор ПК и вам ближе Arduino, тогда есть классический сценарий, в котором так же есть софт на компе, который захватывает экран и усредняет цвета, но команды отправляет уже через COM-порт (USB).

Я не сильно заморачивался и остановился на последнем варианте. Нужные для этого детали у меня уже были, и проводное подключение адекватно вписывалось в ситуацию - под телевизором (работающим как монитор ПК) у нас на постоянной основе лежит USB-хаб. Фундаментом прошивки стал скетч Adalight-FastLED, а в качестве программ для ПК выбраны AmbiBox и Prismatik. Но если прошивка и софт уже готовые и всё придумано до нас, почему эта заметка лежит в разделе Проекты? У меня были свои представления, каким я хочу видеть это устройство, так что сделал свою печатную плату и добавил штрихов от себя.

Основной вопрос, который меня беспокоил: сколько лента будет жрать? Максимальный потребляемый ток одного светодиода WS2812 составляет 50...60 мА. Для телевизора диагональю 32 дюйма нужно около 2 метров ленты (бывают плотностью 30, 60 светодиодов на метр и даже больше), и если включать эту ленту ярким белым цветом, понадобится блок питания на несколько ампер. Понятно, что на практике такая подсветка будет оооочень навязчивой и столько света от ленты не требуется, поэтому в прошивке будет предусмотрено масштабирование (ограничение). Но сколько тогда надо и какое в итоге будет потребление? Чтобы оставить себе пространство для манёвра, решил добавить возможность питания подсветки как от USB, так и от адаптера, с автоматическим переключением между двумя режимами яркости в зависимости от текущего источника питания. Заодно и схемы защиты предусмотреть, разумеется.

protection schematic

Питание ленты на этой схеме - цепь +5V. Транзистор Q1 обеспечивает защиту от переполюсовки. Стабилитрон D1 защищает транзистор от превышения напряжения затвор-исток.

Элементы D2, R2, R4, R9, Q2 и Q3 образуют защиту от превышения допустимого напряжения питания. Если напряжение от внешнего БП превысит порог срабатывания, между эмиттером Q2 и катодом D2 будет достаточная разница потенциалов, чтобы через базу пошёл ток и Q2 открылся. Это, в свою очередь, закроет P-канальный полевик Q3 и питание на ленту не будет подано. Порог срабатывания должен быть чуть выше чем 5 В - у меня получилось около 5.3 В, насколько помню. Нужно иметь в виду, что напряжение на стабилитроне зависит от проходящего через него тока - рамки, в которых можно играться с номиналом резистора R2, сильно ограничены.

Выбором питания между USB и адаптером занимаются транзистор Q4 и встроенный в гнездо J2 переключатель - если штекер не воткнули, то контакт 3 у переключателя будет замкнут на GND и транзистор откроется. Цепи затвора Q4 дано имя SENSE, потому что эта цепь также идёт и на контроллер. В принципе, по такой логике можно было просто посадить цепь SENSE на переключатель в разъеме и остановиться на этом. Но я дополнительно соединил с переключателем катод стабилитрона D2 - чтоб транзисторы Q3 и Q4 не открылись одновременно в случае, если вдруг питание от адаптера появится на J2 чуть раньше, чем переключатель разомкнётся. Диод D3 установлен для того, чтобы свести к минимуму влияние тока через R7 на стабилитрон, ну и в целом на всякий случай - хуже от него не будет.

С питанием от USB дополнительных мер особо не требуется, поскольку разъем наоборот не вставишь и всё стандартизированно, но самовосстанавливающийся предохранитель (polyfuse) на 0.5 А, конечно же, предусмотрен.

Мозгами схемы выступил микроконтроллер ATmega8. Для работы с ним в Arduino IDE нужно было накатить Minicore. Цепь SENSE я завёл на ногу PD6 (пин 6 в терминах ардуино). Для того, чтобы вместе с переключением источника питания заработало еще и переключение яркости, нужно малость поправить исходный скетч. Из объявления переменной Brightness убрать слово const, инициализировать её своим значением для USB (у меня это 24), а в начале тела функции loop() добавить что-то вроде этого:

if(digitalRead(PIN_SENSE)==LOW){
    //с DC-адаптера на USB
    Brightness = 24;
}
else{
    //с USB на DC-адаптер
    Brightness = 64;
}

С питанием и яркостью разобрались, что ещё сказать? Плату я делал так, чтобы она поместилась в стандартный корпус 85х50х21, который можно найти на алике и в некоторых радиолавках. Для подключения ленты я выбрал 4-контактный разрывной клеммник с шагом 3.81 мм. Во-первых, так я получаю вполне удобное разъемное соединение при помощи одной лишь отвертки - не надо паять или обжимать. Во-вторых, при необходимости я смогу подключить 4-проводную ленту APA102 или SK9822 вместо 3-проводной WS2812.

atmolght pcb

Ну и последний по значению, но всё же плюс - потенциал для повторного использования. Вместо нужных 2-3 штук присылают как минимум 5 плат, и если место на плате позволяет заложить дополнительные разъемы - почему бы этим не воспользоваться? Например, предусмотреть разъем для I2C - вдруг понадобится поделку с часами реального времени сообразить. Или сделать продвинутый переходник USB-UART - микросхема CH340 имеет выводы для всяких RTS, CTS, DTR, в то время как покупные свистки на её базе обычно ограничиваются RX/TX.

Как вариант, можно было купить готовый набор для подсветки - на алиэкспрессе есть такие. Но в тех, что я находил, гнездо для адаптера питания припаяно прямо к ленте, то есть о защите от переполюсовки или превышения напряжения речи быть не может, как и о замене блока питания на лету с автоматическим переключением яркости (функция специфическая, но лично мне кажется полезной). Данные для ленты в этих наборах передаются через 2-контактный (!) разъем, то есть подключить скорее всего можно только WS2812. Короче, моя плата мне нравится больше:)

atmolght usb current

Устройство получилось вполне рабочим и подсветка из 106 светодиодов ожила. Тесты и демонстрацию можно увидеть на видео (напоминалка, если в начале статьи забыли ткнуть). В результате потребляемый ток оказался ниже моих предположений - видимо, из-за гамма-коррекции. На яркости 24 подсветка жрёт до 250 мА. Правда, при этом на моём USB-хабе просаживается напряжение (до 4.3 В). Такой режим в целом неплохо смотрится, если выключить освещение. На яркости 64 (режим для адаптера) выглядит интереснее, но и потребляет побольше - до 550 мА. Что касается софта на ПК, то и AmbiBox, и Prismatik свою функцию выполняют, но второй лучше справляется с динамичными сценами. В комментах ещё упоминали Hyperion, на сайте поддержка Adalight заявлена, но я пока не пробовал.

В общем, подсветка у меня теперь есть, пока что я своими результами доволен. The End :)

Статья опубликована 2024-01-03 17:09:22, её прочитали 6458 раз(а).

Внимание! Комментарии публикуются после проверки (что занимает некоторое время).
Сообщение может быть отклонено, если содержит спам, противозаконный контент, а так же оскорбления и грубость по отношению к другим участникам обсуждения.

Добавить комментарий