Tag Archives: цветомузыка

Цветомузыка в машину: Част 2 – Оцифровка

После того, как заработал прототип, я начал изучать варианты для захвата звука. На Nexus 7 есть выход на наушники, который я подключаю к AUX входу в машине. В целом работает неплохо, но есть посторонние шумы. Кто именно виноват не понятно, а вот что делать – есть варианты.

  • Первый и самый простой – это забить.
  • Второй – это использовать внешнюю звуковух вместе с Nexus 7
  • третий – это отказаться от использования планшета и собрать мультимедиа систему на базе одноплатного компьютера типа Raspberry Pi 2 или ODROID C1+. Вместе с HiFi Shield-ом (Для Raspberry Pi вот и Odroid C1 вот)

Пока что решено забить. Тогда нужно каким-то образом оцифровывать звук и разложить на частоты, чтобы принять решение о том, какой канал светодиодной ленты нужно включить.

  • Первый, очевидный способ – это взять уже имеющийся EasyCap, по сколько он не только оцифровывает видео, но и аудио.
  • Второй – взять USB звуковуху специально для этой задачи.

20151103_220604

Решил попробовать оба. EasyCap на основе utv007 у меня уже был, а вот звуковуху пришлось купить, к счастью стоит она ~500р.

20151211_202757Lightshowpi – cофт, который я использовал в прошлый раз для управления светодиодной лентой на основе проигрываемой композиции, так же может работать и в режиме аудио захвата. Для этого нужно сделать конфиг, который укажет, что нужно работать именно с внешним аудио сигналом и какую звуковуху использовать для этих целей.

Для того, чтобы указать название звуковой карты нужно запустить скрипт (audio_in_cards.py), который идёт в комплекте – он то и выдаст список подключенных звуковых устройств. В моем случае правда он ничего не принтит и мне пришлось сделать небольшую модификацию в нём, чтобы он заработал:

cd lightshowpi/tools
vim audio_in_cards.py

надо на последнюю строчку добавить print

import alsaaudio as aa

if __name__ == "__main__":
    print aa.cards()

теперь всё как надо – запускаем:

pi@rpitestmusic ~/lightshowpi/tools $ sudo python audio_in_cards.py
[u'ALSA', u'usbtv']

Тут видно, что для EasyCap – это usbtv. Соответственно просто пропишем это в конфиг.

vim /home/pi/.lights.cfg

там уже есть секция hardware, которая переопределяет какие пины использовать для управления лентой. Теперь нужно поменять, чтобы скрипт работал в режиме захвата звука со звуковухи и указать с какой:

[hardware]
gpio_pins = 0,1,2

[lightshow]
mode = audio-in
audio_in_card = usbtv

Собственно, надо попробовать – как это работает. Запускаем скрипт в режиме захвата

sudo python py/synchronized_lights.py

Первое, чтоб бросается в глаза – это “шум”. Даже если нет никаких звуков лента всё равно моргает.

Теперь заменим EasyCap на купленную USB звуковуху. Честно взял некую рандомную. Вот dmesg если вдруг интересно:

cmediadmesgСнова запустив скрипт, который показывает название аудио устройств в системе, увидим, что имя, которое нужно поместить в конфиг – это просто Device.

pi@rpitestmusic ~/lightshowpi/tools $ sudo python audio_in_cards.py
[u'ALSA', u'Device']

Заменим usbtv на Device, используя любимый редактор vim /home/pi/.lights.cfg

[hardware]
gpio_pins = 0,1,2

[lightshow]
mode = audio-in
#audio_in_card = usbtv
audio_in_card = Device

И ребутнем Raspberry для профилактики возможных USB глитчей. После чего запустим скрипт syncronized_lights.py теперь уже с USB звуковой картой.

Заодно прикинул как это будет выглядеть если прилепить светодиодную ленту за телевизором:

Выглядет неплохо, хотя лучше прикрепить за картиной или зеркалом.

Что скажите?

 

 

Цветомузыка в машину: Част 1 – прототип

Как я уже писал в этом посте при постройке клона Ambilight-а я купил “неправильную” светодиодную ленту, которую решил использовать для цветомузыки. И не просто цветомузыки, а цветомузыки в машине, заодно сделав из неё mood-light.

20151104_112108 20151107_115258 20151107_115336 20151107_115237

У этой светодиодной ленты 3 канала: красный, зелёный и синий, играясь с которыми можно получать разные цвета, таким образом красный будет реагировать на басы, зеленый на средние, а синий на высокие. Что из этого получится не очень понятно, так как все эти три цвета вместе будут давать белый, и может получиться так, что лента тупо будет гореть белым большую часть времени.

В качестве железа, опять таки Raspberry Pi 2 и EascyCap на базе utv007.

20151103_220658 20151103_220604

В качестве операционки всё тот-же Raspbian от 2015-05-05, который уже включает в себя драйвер для UTV007 скачал с официального сайта.

Быстрый поиск в интернете привел меня на сайт Lightshowpi.org, который я и решил попробовать, но сначала нужно подключить ленту, а для этого нам понадобятся:

  • Raspberry pi 2
  • хороший источник питания для Raspberry pi 2 (5 вольт)
  • RGB светодиодная лента на 12 вольт
  • 12 вольт источник питания для светодиодной ленты
  • EasyCap AV video grabber (да – это перебор, но так сложилось)
  • 3 низковольтовых NPN транзистора (например 2sd882p, вот datasheet на него)
  • 3 резистора на 510 Ом
  • 3 Резистора на 10 КОм
  • провода
  • макетная плата (опционально)

В качестве питания для Raspberry Pi 2 я пользуюсь SmartBuy-вским переходником 220в на 5в / 2 ампера

20151103_220456Подключение

Чтобы подключить ленту к Raspberry Pi 2, нам понадобятся 3 NPN транзистора (в моем случае NEC 2sd882p), так как на ленте три цвета: Красный, Зелёный и Синий, которыми мы и будем управлять. Схема подключения выглядит следующим образом:

LCD

Для реализации этой схемы, я решил воспользоваться макетной платой для безпаячного соединения, так как паять я не умею.

Красный, зелёный и синий канал с помощью красного, зелёного и синего проводов соответственно подключаем к коллекторам транзисторов (согласно datasheet-у – средняя ножка), используя макетную плату:

20151129_195803

Эмиттеры транзисторов (ножка номер 3 – слева от базы) и землю Raspberry Pi (например pin 6) соединяем с общей землей, используя черные провода, а базы транзисторов через резистора 510 Ом подключаем к Raspberry P (pin 11,12,13):

20151129_201934 moodlightpinout

Также базы транзисторов соединяем с общей землей через резистора 10 КОм.

20151129_202334

И заключительный этап – соединяем общую землю с минусом источника питания, используя чёрный провод, а 12 вольт ленты с плюсом источника питания используя белый провод:

20151129_202605

в результате это должно выглядеть примерно вот так:

20151129_205320

Установка софта

После того как всё подключено, нам надо поставить софт. На сайте lightshowpi.org есть достойная инструкция.

Как обычно первым делом надо обновиться:

sudo apt-get update
sudo apt-get upgrade

Затем скачать и установить lightshowpi

git clone https://togiles@bitbucket.org/togiles/lightshowpi.git
cd lightshowpi
./install.sh

вот и всё перезагрузите ваш Raspberry Pi и запустите тест:

cd lightshowpi
sudo python py/hardware_controller.py --state=flash

Тест начнёт по очереди включать каналы. Если вы всё сделали правильно, то 0 канал должен включить красный, первый – зелёный, второй – синий, а остальные каналы не должны оказывать влияние на ленту:

test

Чтобы это исправить и оставить только 3 канала, а не 8, можно переопределить дефолтные значения. Просто создадим файл, в котором укажем, что мы хотим использовать только 3 pin-а на Raspberry Pi:

vim /home/pi/.lights.cfg

Для понимания того, что и как надо переопределить – откройте дефолтный конфиг. В случае с vim-ом это можно сделать открыв его в другом табе:

:tabnew /home/pi/lightshowpi/config/defaults.cfg

просто найдите строчку gpio_pins

gpio_pins_lightshowpi

Тут есть комментарий, что нужно указать номера pin-ов исходя из спецификации WiringPi, а не физической нумерации. К счастью на картинке, которую я уже показывал (а полную версию можно посмотреть тут), присутствует и нумерация в соответствии со спецификацией WiringPi:

moodlightpinout

Видно, что pin 11, который мы подключили к красному каналу соответсвует WiringPi = 0, pin 12 соответсвует WiringPi = 1 и pin 13 соответсвует WiringPi 2. То есть нам в нашем новом конфиге, который будет лежать в /home/pi/.lights.cfg просто нужно создать секцию hardware и  указать, что мы хотим использовать gpio_pins 0,1 и 2:

repin

Запустив тест ещё раз мы увидим, что используются только каналы с 0го по 2й:

3chanelsonly

Теперь осталось попробовать какой-нить mp3 файл:

Внимательный читатель вопросит, а зачем нам нужен был EasyCap. Об этом и другом – в следующей части.