понедельник, 4 ноября 2013 г.

DIY: ODP: Атмосвет

ODP(one day project) - категория проектов, призванных показать реализацию идеи в прототипе выполненом в наименьшее кол-во времени, затрачиваемого на первичную реализацию.

В прошлую пятницу мне внезапно захотелось попробовать сделать себе клон Philips Ambilight (интерактивная подсветка краев экрана телевизора в зависимости от выводимого изображения).
В гараже валялась б/у RGB светодиодная лента 4 метра, поэтому реализация прототипа стала возможна. Назвал я это дело Атмосвет - прекрасное имя такому сооружению на костылях.



Основные цели и требования:
- посмотреть на это в живую и оценить необходимость полноценной реализации;
- не потратить не рубля, использовать мусор из гаража;
- занять себя на выходные, ибо до выхода PS4 еще месяц;
- испытуемый телевизор - моя 60" плазма;
- реализация не должна быть привязана к устройству вывода изображения, Атмосвет должен работать с Xbox, PlayStation  и медиацентром.

Под указанные выше требования я запланировал следующий механизм:
- 7 секций для подствеки, по схеме:

- Изображение захватывается вебкамерой, процессится на ПК и цвета секций передаются по USB  на Arduino.

Сама реализация:

Пришлось использовать Arduino Mega, ибо на каждую ленту приходилось по 3 пина, а следовательно сумарно 21 контакт, на UNO такого кол-ва пинов нет.
Светодиодная лента 12Vс внешним  БП, управление цветом осуществляется через NPN транзисторы, такое кол-во транзисторов у меня не было, взял и выпаял из трех старых горелых БП 24 штуки транзисторов C945, не уверен насколько это удачный выбор (полагаю, что из-за него подглюкивали не чистые цвета), но ехать и покупать транзисторы за 30р штука куда-то противоречило условию.
Я ожидал что будет задержка в получении изображения с веб камеры - я не ошибся, я протестил 3 вебкамеры (встроенная в Macbook, внешняя Logitech и встроенная в старый нетбук), оказалось задержка зависит от камеры, самая маленькая - у макбука (на глаз - около 500мс).
Захват и обработку картинки я производил при помощи потрясающего .NET фреймворка EMGU CV. Трансформацию перспективы изображения получаемого с вебкамеры, также выполнял через него, через враппер для open cv.
Драйвер для лент получился таким:

Внешний вид формы визуализации процессинга (слева исходная картинка, с отмеченными точками границ экрана, справо полученная после трансформа перспектива экрана, ужатая в 14x9 px):

Для тестов использовал видео с YouTube.

В конечном итоге какие выводы я сделал:
- Всеже идея стоящая, и нужно поудмать о полноценной реализации;
- Лучше не использовать мусор из гаража, даже для ODP, 4-х жильный телефонный кабель первый попавшийся, был полным дерьмом;
- Нужно погуглить о разнице биполярных и полевых транзисторов для общего развития;
- Больше не думать об использовании вебкамер при необходимости реалтаймового процессинга.

Что дальше?

Проведя исследование я пришел к выводу, что есть два оптимальных варианта по реализации для моего случая (мне нужна работа с любым устройством выводящим картинку на телевизор, а не только ПК, решения для пк миллион в гугле, а HDMI Pass-through фактически - отсутсвуют):
1. Купить  Philips 60PFL8708S и умереть от  голода, зато с ambilight. LOL.
2. Реалзиуемое в пределах 10 тыс рублей:
  • Покупаем 5М светодиоднйо ленты с ws2811, где каждый светодиод управляется отдельной через микроконтролер. выйдет вероятно в 80 долларов, с ней проще работать и поулчается секции по 3 см.( это толкьо 42 секции на верхнюю грань! )
  • Покупаем  USB 3.0 HDMI capture device например Blackmagick Design Intensity Shuttle (теоретически очень низкий delay, чекнул по форумам и ревью),  оригинальная цена 199 долларов, самое дешевое в москве в районе 8 тыс.  рублей. !Для данного девайса есть оффициальное SDK, никаких проблем с захватом не будет! есть HDMI pass-through(не знаю русского аналога этого слова (сквозное пропускание сигнала через себя)),  cудя по форумам emgu CV тоже умеет с этими карточками работать.

Я склоняюсь естественно к варианту 2, но решение буду принимать, на оснвое оставшихся лишних денег после покупки PS4 в конце этого месяца.

PS: код для ардуино






Комментариев нет:

Отправить комментарий