Інтерактивне підсвічування телевізора Mood lamp Beat detector

Представляю свій варіант інтерактивного підсвічування телевізора на RGB стрічці.

Власне, зацікавився цією ідеєю давно, але не робив закінченого пристрою через те, що для роботи потрібно було використовувати ноутбук. Але нещодавно з'явилося програмне забезпечення для Android, яке заробило на медіаплеєрі Freelander AP10 навіть краще, ніж на PC.

Запровадження

телевізора

На даний момент існують повністю апаратні рішення з аналізом потоку HDMI, але це закриті проекти та складні у виготовленні пристрою.

Тому поширення отримали пристрої з використанням PC як джерело зображення, де на PC встановлюється спеціальне програмне забезпечення, яке керує пристроєм підсвічування.

Сам пристрій у найпростішому випадку може являти собою Arduino Uno з безпосередньо підключеною світлодіодною стрічкою.

Існує кілька варіантів пристроїв зі своїм ПЗ: Lightpack[7][8][9], Paintpack[10], Adalight[11], Boblight[12], Ardulight[13] та ін.

Можливості пристрою: - апаратна сумісність із Lightpack, робота в режимі інтерактивного підсвічування з керуванням від PC або Android медіаплеєра (USB); - увімкнення, вимикання, перемикання режимів з пульта дистанційного керування (ІЧ); - регулювання яскравості з ПДК; - включення/вимкнення одного зовнішнього навантаження (акустичної системи) з ПДК; - автономний режим "Mood lamp"; - автономний режим "кольорова музика" (звук прослуховується з вбудованого мікрофона); - режим, в якому кольоромузика впливає на Mood lamp або інтерактивне підсвічування.

телевізора

телевізора

Вибір RGB стрічки

Враховуючи великі розміри телевізора, я вирішив використовувати RGB стрічку, щоб забезпечити рівномірне підсвічування зонзамість чітко помітних кругових плям від окремих світлодіодів, і одночасно максимально зменшити довжину проводів, що висять за телевізором.

інтерактивне

Оскільки різниця в ціні між 30 і 60 світлодіодами - 2 рази, і між чіпами ws2801 і ws2811 - ще 2 рази, на EBay була куплена 5м бобіна "12V 5m WS2811IC digital magic RGB 5050 SMD , та до неї 12В 2А блок живлення.

інтерактивне

У цій стрічці кожні 3 світлодіоди послідовно підключені до одного чіпа WS2811.

підсвічування

Номінальний струм світлодіодів – 20мА на колір. Разом на 1 метр отримуємо:

20мА * 3 кольори * 30/3 груп = 600мА/метр

телевізора

Чіп WS2801 управляється за SPI інтерфейсом (слухає лінії Data та Clock). Програмна реалізація не складає труднощів.

Однак чіп WS2811[16] управляється за однопровідним інтерфейсом зі строгими часовими інтервалами. Обрив посилки призводить до застосування частково отриманих даних. На щастя, у мережі вже доступні процедури управління стрічками на WS2811[6]. Єдине, що треба розуміти - це те, що під час надсилання даних, переривання мають бути заборонені. На одну групу світлодіодів йде:

1.25us * 24bit = 30us

27 * 30us = 810 us

Заборона переривань на вказаний проміжок часу може викликати деякі проблеми (про це пізніше).

Вибір ПО

Як відомо, головне в інтерактивному підсвічуванні - це програмне забезпечення для хоста. Серед кількох варіантів я зупинився на ПЗ Prizmatik for Lightpack[7][8][9], оскільки цей проект має виразні плани розвитку та отримав підтримку на KickStarter. Ну і вирішальним фактором стала обіцянка випустити програмне забезпечення для Android.

телевізора
Тому "залізо" було вирішено робити апаратно сумісним з Lightpack (тобто USBпристроєм на AT90USB162), оскільки інтерфейси AdaLight/Ardulight під Androind підтримувати ніхто не обіцяв (і в результаті саме так і сталося).

Android медіаплеєр Freelander AP10 досить продуктивний, щоб переглядати 720p фільми з програмним декодером у MX Player (з апаратним декодером ПЗ Lightpack не працює).

Один Lightpack підтримує 10 зон. У моєму випадку вийшло 27 зон, тому я вирішив переробити прошивку так, щоб мій пристрій "прикидав" 3-ма Lightpack'ами.

Прошивка оптимізована по пам'яті, і були додані ще 2 HID інтерфейсу.

Попри це, додаткові зони ПЗ не з'являлися.

Після дводенного пошуку помилок у прошивці виявилося, що в Prizmatik для Windows додаткові зони з'являються тільки при запуску зі спеціальним ключиком (-wizard), а Prizmatik для Android просто не підтримує більше одного пристрою!

телевізора
У результаті, оскільки пристрій збирався для використання з Android медіаплеєром, я переробив прошивку так, щоб 10 зон інтерполювалися в 27 зон стрічки, і на цьому поки що закінчив.

Принципова схема

підсвічування

Пристрій зібраний на основі моєї налагоджувальної плати на AT90USB162, до пін якої приєднані додаткові модулі.

телевізора

інтерактивне

Модуль реле

інтерактивне

Модуль реле зібрано на монтажній платі. Обидва реле на 5В, комутують 220В. Реле RL1 включає 12В блок живлення світлодіодної стрічки. Реле RL2 подає 220В на зовнішнє навантаження - в моєму випадку це акустична система, що не має свого пульта управління.

Приймач ІЧ комманд

Приймач TSOP4836 приклеєний до корпусу біля віконця з оргскла та підключений до основної плати. R1 та C1 змонтовані навісним монтажем на ніжкахприймача.

підсвічування

Я використав пульт від нагрівача.

телевізора
В інтернеті можна знайти безліч статей про те, як розпізнавати команди з ІЧ пульта. Але в цьому виробі нас чекає засідка, яка полягає в тому, що для керування RGB стрічкою на чіпах WS2811 потрібно забороняти переривання на час, що перевищує довжину біта ІЧ команди. Програмне декодування ІЧ команд не працюватиме.

Тому спеціально для цього пристрою розробив спосіб апаратного декодування команд за допомогою UART модуля мікроконтролера [14].

Кнопка SB1 запускає процедуру навчання кнопок пульта. Стрічка блимає червоним кольором чотири рази. Тепер потрібно двічі натиснути кнопки, відповідні On/Off, External On/Off, Mode: Backlight, Mode: MoodLamp, Brightness+, Brightness-. Коли перша кнопка навчена, запалюється один сегмент стрічки тощо.

Кольорова музика (beat detector) включається/вимикається повторним натисканням на кнопки вибору режиму.

Beat Detector

телевізора
Схема підглянута тут[15]. Beat Detector видає “1”, коли виявлено пік сигналу. У даному приладі реалізація має бути повністю апаратною, оскільки 1) у мікроконтролері відсутня АЦП; 2) переривання забороняються великі періоди.

телевізора

На U1:A зібраний попередній підсилювач, на виході якого фільтром R6C3C4 обрізаються високі частоти. На U1B та Q1 зібрано каскад посилення з АРУ. Його вихід посилюється каскадом U1: C. Ланцюжки D2C8C9R12 і D5C10R14 є два пік-детектори, що працюють на різних частотах (див. осцилограму). Останній каскад U1:D є компаратор, на виході якого з'являється "1", коли помічений пік сигналу.

телевізора

Це найскладніша частина схеми. Потребує налаштування з осцилографом.

Рекомендується налагодити цю частину схеми з живленням від 4-х AA акумуляторів, так як живлення з USB порту містить велику кількість пульсацій і перешкод, які можуть повністю перекривати слабкий сигнал з мікрофона.

підсвічування

Прошивка додає "спалах" світлодіодів на кожен удар, ігноруючи можливе деренчання на виході детектора. Такий алгоритм не є ідеальним, оскільки детектор може часто пропускати піки. Найкраще буде працювати "автогенератор", що підлаштовується під частоту детектора. Так, людина продовжує деякий час рахувати ритм, навіть якщо припинилися ударні.

Оскільки зараз зберігається невизначена ситуація з програмним забезпеченням Android, то я вирішив тимчасово зберегти спрощений алгоритм поки незрозуміло, скільки оперативної пам'яті можна виділити під цю справу.

Прошивка

Прошивка є сильно зміненою прошивкою Lightpack[7].

На даний момент перевірено лише режим емуляції 3-х Lightpack та режим інтерполяції одного Lightpack на 27 зон.

Макрос LIGHTPACKS_COUNT визначає кількість емульованих пристроїв Lightpack.

Макрос RESAMPLE включає інтерполяцію 10 зон Lightpack на більшу кількість зон RGB стрічки.

При цьому слід зазначити, як саме інтерполювати зони.

Макроси LZ_*** задають положення зон Lightpack на розкладці Andromeda. Макроси RZ_** задають положення зон стрічки на телевізорі.

У моєму випадку початок стрічки знаходиться в нижньому правому кутку. Стрічка обертає 37” телевізор проти годинникової стрілки, створюючи 27 зон (по 3 світлодіоди в зоні).

інтерактивне

Пристрій прошивається аналогічно Lightpack через USB порт. Процес описаний тут [7].

Корпус

Пристрій зібраний у корпусі 130х65х45. Блок живлення був розібраний і поміщений у корпус конструкції,всередині алюмінієвий екран.

інтерактивне

Вихідники прошивки, схеми, друковані плати (Proteus) знаходяться у прикріплених архівах.