Інтерактивне підсвічування телевізора 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.

Android медіаплеєр Freelander AP10 досить продуктивний, щоб переглядати 720p фільми з програмним декодером у MX Player (з апаратним декодером ПЗ Lightpack не працює).
Один Lightpack підтримує 10 зон. У моєму випадку вийшло 27 зон, тому я вирішив переробити прошивку так, щоб мій пристрій "прикидав" 3-ма Lightpack'ами.
Прошивка оптимізована по пам'яті, і були додані ще 2 HID інтерфейсу.
Попри це, додаткові зони ПЗ не з'являлися.
Після дводенного пошуку помилок у прошивці виявилося, що в Prizmatik для Windows додаткові зони з'являються тільки при запуску зі спеціальним ключиком (-wizard), а Prizmatik для Android просто не підтримує більше одного пристрою!

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

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


Модуль реле

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

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

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


На 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) знаходяться у прикріплених архівах.