Інтерактивна підсвітка телевізора + Mood lamp + Beat detector
Представляю свій варіант інтерактивного підсвічування телевізора на RGB стрічці.
Власне, зацікавився цією ідеєю давно, але не робив закінчене пристрій через те, що для роботи вимагалося використовувати ноутбук. Але нещодавно з'явилося ПЗ для Android, яке запрацювало на медіаплеєрі Freelander AP10 навіть краще, ніж на ПК.
Вступ
Коротко для непосвячених. Інтерактивне підсвічування монітора або телевізора підсвічує стіну за телевізором відповідно до зображення на екрані. Такий ефект виглядає красиво і робить перегляд фільму більш видовищним.
В даний момент існують повністю апаратні рішення з аналізом потоку HDMI, але це закриті проекти і складні в виготовленні пристрої.
Тому поширення отримали пристрої з використанням ПК в якості джерела зображення, де на ПК встановлюється спеціальне ПЗ, яке управляє пристроєм підсвічування.
Своє пристрій в простішому випадку може представляти собою Arduino Uno з безпосередньо підключеною світлодіодною стрічкою.
Існує кілька варіантів пристроїв зі своїм ПЗ: Lightpack[7][8][9], Paintpack[10], Adalight[11], Boblight[12], Ardulight[13] тощо.
Відео роботи:
Можливості пристрою:
- апаратна сумісність з Lightpack, робота в режимі інтерактивного підсвічування з управлінням від ПК або Android медіаплеєра (USB);
- включення, вимкнення, перемикання режимів з пульта дистанційного керування (ІК);
- регулювання яскравості з ПДУ;
- включення/вимкнення однієї зовнішньої навантаження ( акустичної системи) з ПДУ;
- автономний режим “Mood lamp”;
- автономний режим “коліромузика” (звук прослуховується з вбудованого мікрофона);
- режим, в якому коліромузика впливає на Mood lamp або інтерактивне підсвічування.
Вибір RGB стрічки
Враховуючи великі розміри телевізора, я вирішив використовувати RGB стрічку, щоб забезпечити рівномірне підсвічування зон замість чітко відчутних кругових плям від окремих світлодіодів, і одночасно максимально зменшити довжину проводів, що звисають за телевізором.
В продажу є RGB стрічки кількох видів. Нас цікавлять стрічки з індивідуально адресованими світлодіодами ( або групами світлодіодів по 3 ), побудовані на світлодіодах RGB5050. Вони відрізняються:
1) кількістю світлодіодів на метр (30 або 60);
2) чипом, на якому побудовані ( WS2801 або WS2811, або аналоги);
3) індивідуально адресовані, або групами по 3 світлодіоди;
4) напругою живлення: 12В або 5В;
5) наявністю вологоізоляції.
Оскільки різниця в ціні між 30 і 60 світлодіодами - 2 рази, і між чипами ws2801 і ws2811 - ще 2 рази, на EBay була куплена 5м котушка “12V 5m WS2811IC digital magic RGB 5050 SMD led strip waterproof IP66 in Silicone” за $43 з доставкою, і до неї 12В 2А блок живлення.
В цій стрічці кожні 3 світлодіода підключені послідовно до одного чипу WS2811.
Номінальний ток світлодіодів - 20мА на колір. Всього на 1 метр отримуємо:
20мА * 3 кольори * 30/3 груп = 600мА/метр
30 світлодіодів вистачає, щоб нормально дивитися фільм ввечері. Для денного перегляду краще брати стрічку на 60 світлодіодів на метр.
Чип WS2801 управляється по SPI інтерфейсу ( слухає лінії Data і Clock). Програмна реалізація не складає труднощів.
Однак чип WS2811[16] управляється по однопроводному інтерфейсу зі строгими часовими інтервалами. Обрив посилки призводить до застосування частково отриманих даних. На щастя, в мережі вже доступні процедури для управління стрічками на WS2811[6]. Єдине, що потрібно розуміти - це те, що під час посилки даних, переривання повинні бути заборонені. На одну групу світлодіодів йде:
1.25us * 24bit = 30us
Для 27 зон:
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 просто не підтримує більше одного пристрою!
У останній прошивці для Lightpack з'явився запит серійного номера пристрою. Prizmatik for Windows( ПЗ для Lightpack) нормально визначає кілька підключених пристроїв без серійного номера. Мені не вдалося з'ясувати, є чи причиною проблеми відсутність серійного номера в моєму пристрої, оскільки вихідні коди ПЗ для Android автори не викладали в вільний доступ. Засубмічений баг поки залишений без уваги[17]. На жаль, серійним номер є властивістю пристрою, а не інтерфейсу, тому принципово неможливо призначити унікальний серійний номер кожному HID інтерфейсу в межах одного чипа.
В підсумку, оскільки пристрій збиралося для використання з 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) знаходяться в прикріплених архівах.
Матеріали
1. Бесконтактна коліромузика для RGB-стрічки
//cxem.net/sound/light/light55.php
2. Das Blinkenlichten – wearable lighting
http://tim.cexx.org/?page_id=374
3. Союз-1 - Коліромузичні установки
http://lightportal.at.ua/publ/cvetomuzykalnye_ustanovki/sojuz_1/3-1-0-18
4. Simple beat detector
http://engineeringentropy.wordpress.com/2013/05/24/a-simple-beat-detector/
5. An ambilight system for WS2811 RGB strips
https://github.com/rosterloh/ambilight
6. Driving the WS2811 at 800KHz with a 16MHz AVR
http://bleaklow.com/2012/12/02/driving_the_ws2811_at_800khz_with_a_16mhz_avr.html
7. Lightpack - USB-підсвічування монітора для посилення ефекту присутності
https://code.google.com/p/lightpack/
8. Lightpack — ambient backlight for your displays ( Kickstarter )
https://www.kickstarter.com/projects/woodenshark/lightpack-ambient-backlight-for-your-displays
9. Lightpack — content-driven lighting system
http://lightpack.tv/
10. Paintpack - Інтерактивне підсвічування
paintpack.ru
11. Adalight - DIY Ambient Monitor Lighting Project Pack
http://www.adafruit.com/products/461
12. Boblight - Boblight is a collection of tools for driving lights connected to an external controller.
https://code.google.com/p/boblight/
13. Ardulight - Інтерактивне підсвічування
https://code.google.com/p/ardulight/
14. Розпізнавання ІК команд з допомогою UART на AVR
//cxem.net/ik/2-21.php
15. Das Blinkenlichten – wearable lighting
http://tim.cexx.org/?page_id=374
16. WS2811 Datasheet.
http://solderingsunday.com/wp-content/uploads/2014/01/ws2811.pdf
17. Lightpack bug database
https://code.google.com/p/lightpack/issues/detail?id=355
Список радіоелементів
Обозначення | Тип | Номінал | Кількість | Примітка | Магазин | Мій блокнот |
---|---|---|---|---|---|---|
U1 | МК AVR 8-біт |
AT90USB162
|
1 | Пошук в магазині Оtron | ||
U2 | Захисний діод |
USB6B1
|
1 | Пошук в магазині Оtron | ||
R1, R3 | Резистор |
22 Ом
|
2 | Пошук в магазині Оtron | ||
R2 | Резистор |
1 МОм
|
1 | Пошук в магазині Оtron | ||
R4 | Резистор |
1 кОм
|
1 | Пошук в магазині Оtron | ||
R5 | Резистор |
100 кОм
|
1 | Пошук в магазині Оtron | ||
R6 | Резистор |
20 кОм
|
1 | Пошук в магазині Оtron | ||
C1 | Конденсатор | 10нФ 50В | 1 | Пошук в магазині Оtron | ||
C2, C7 | Конденсатор | 4,7мкФ 6.3В | 2 | Пошук в магазині Оtron | ||
C3 | Конденсатор | 47мкФ 6.3В | 1 | Пошук в магазині Оtron | ||
C4 | Конденсатор | 100нФ 6.3В | 1 | Пошук в магазині Оtron | ||
C5,C6 | Конденсатор | 18 пФ | 2 | Пошук в магазині Оtron | ||
D1 | Випрямляльний діод |
BAV70
|
1 | Пошук в магазині Оtron | ||
X1 | Кварцевий резонатор | 16 МГц | 1 | Пошук в магазині Оtron | ||
J1-J7 | Роз'єм | DIL-40 | 1 | Пошук в магазині Оtron | ||
SW1 | Кнопка | 1 | Пошук в магазині Оtron | |||
Завантажити список елементів (PDF)
Прикреплені файли:
- LightpackFW_mod.zip (2080 Кб)
- Schematics_proteus.zip (448 Кб)