ColorPlay Posted August 31, 2015 Report Share Posted August 31, 2015 Анализатор звукового спектра на контроллере Raspberry Pi и RGB светодиодах Анализатор спектра показывает уровень громкости звука в различных частотных диапазонах (низкий, средний, высокий) в режиме реального времени, позволяя визуализировать музыку. Использование контроллера Raspberry Pi, светодиодов RGB и проводов, позволяет сделать вам динамическое отображение воспроизводимого звука от медиа-плеера или другого источника звука. Этот проект базируется на большой библиотеке светового кода Xmas Python из проекта Light Show Pi, и самые продвинутые пользователи могут даже настроить этот код для голосования за определенную песню с помощью SMS! Проект работает в среде программирования Python, включая обработку аудио. Это позволяет просто проигрывать и анализировать mp3 файлы в реальном времени, пока ваш контроллер Raspberry Pi не делает ничего другого. Светодиодный эквалайзер Техническое обеспечение: Контроллер Raspberry Pi – эта инструкция основана на одной из ранних версий контроллера 3.10.19 Светодиодная полоса RGB – 1 метр (примерно 160 светодиодов), управляемая при помощи SPI (адресное управление), и ШИМ. Этот проект использует одну изогнутую полосу, формирующую 5 столбцов. Сигнал подается на различные участки полосы, при подключении только трех проводов – земля, синхронизация и данные. Блок питания 10A 5V USB Wi-Fi адаптер (RTL8188CUS драйвер чипсета встроен в ОС очень плохо!). Он нужен, если вы не хотите использовать Ethernet. Я использовал этот адаптер, чтобы заставите его работать. SD-карта 4GB или больше Колонки с подключением USB USB-концентратор для подключения клавиатуры, мыши, Wi-Fi Зарядное устройство сотового телефона, чтобы подключить к нему Raspberry Pi через разъем USB USB-клавиатура, мышь, монитор HDMI Провода, различные разъемы типа «мама», а также разъемы JST, если вы не хотите припаивать RGB полосы навсегда. Светодиодный эквалайзер Программное обеспечение: Этот проект базируется на основе большого кода «Pi-based xmas lights controller code». Полностью, этот огромный программный код вам не нужен. Вам необходимо скачать лишь его небольшую часть, а именно библиотеку под названием «synchronized_lights_LED_strip.py», доступную для скачивания по ссылке: http://www.instructables.com/files/orig/F8J/J4J8/HQCWG0FE/F8JJ4J8HQCWG0FE.py Затем вам необходимо скачать библиотеку контроля светодиодной полосы по SPI (адресация светодиодов) под названием «Python control of LPD8806 RGB LED strip», доступную для скачивания по ссылке: https://github.com/adammhaile/RPi-LPD8806 Это немного не относится к проекту, но для программирования контроллера Raspberry Pi я использовал программу Geany IDE. Если вам будет интересно, то ознакомится с ее возможностями и функциями можно по ссылке: http://www.geany.org/ Общий набор оборудования на одной фотографии: Краткий обзор, представляющий все основные компоненты. Подключите к USB концентратору, мышь, клавиатуру, колонки, Ethernet или Wi-Fi соединение. Светодиодный эквалайзер Подключение светодиодных лент RGB Припаяйте четыре провода к входу светодиодной ленты согласно их схеме подключения. Обратите внимание, что на ленте есть вход и выход, это важно для подключения. Вы можете также использовать разъемы JST, если вы не хотите припаивать светодиодные ленты навсегда. Затем присоедините провода от светодиодной ленты к контроллеру Raspberry Pi, так как указано на фотографии ниже. Теперь подключите провода питания к контроллеру Raspberry Pi, как показано на фотографии выше и принципиальной схеме ниже. Не забудьте подключить землю от источника питания на землю контроллера Raspberry Pi! Светодиодный эквалайзер Программирование светодиодной ленты RGB Скачайте программное обеспечение для контроллера Raspberry Pi по этой ссылке, для возможности управления светодиодной лентой в режиме SPI (адресное управление): https://github.com/adammhaile/RPi-LPD8806 Напоминаю, что все дальнейшие команды набираются в командной строке операционной системы Linux! Если вы не знакомы с данной ОС, то на данное время, чтение дальнейшего раздела для вас бесполезно. Наберите команду sudo raspi-config – Далее следуйте подсказкам системы, чтобы включить поддержку аппаратной функции SPI. Когда будете устанавливать аудиовыход, установите разъем jack 3,5mm, а не выход HDMI. Также, я добавил родительский каталог установки среды Python, переменным параметром PYTHONPATH для обработчика команд Bashrc, для того, чтобы я мог вызвать любую функцию из любого места. nano ~/.bashrc: export PYTHONPATH=$PYTHONPATH:/home/pi/RPi-LPD8806 Вы также можете добавить строку: PYTHONPATH=$PYTHONPATH:/home/pi/RPi-LPD8806 to /etc/environments Но это потребует перезагрузки, для регистрации в новых терминальных окнах. Проверьте, что полоса работает, запустив пример кода: python example.py Когда вы запускаете код «Xmas light» как root процесс, переменные среды, в частности, PYTHONPATH не передаются этому процессу. Чтобы сохранить эти переменные окружения, нужно отредактировать файл /etc/sudoers by typing, набрав команду sudo visudo и затем добавить снизу файла следующие строки: Defaults env_keep=SYNCHRONIZED_LIGHTS_HOME Defaults env_keep+=PYTHONPATH В первой строке прописывается то, что нам нужно для работы световой библиотеки Xmas. Во второй строке прописывается переменная с постоянным нахождением среды Python, через переопределение переменных. Сама библиотека будет установлена позже. Чтобы убедиться, что у вас все работает из-под «root» процесса, закройте все терминальные окна, откройте новое и введите следующие команды: sudo pythonfrom bootstrap import *led.fill(Color(50,50,50),0,10)led.update() В результате выполнения этих команд, у вас должны загореться первые 10 светодиодов. Если, что-то пошло не так, перезагрузите терминал полностью. Светодиодный эквалайзер Установка светодиодной ленты Я лично провел одну общую ленту в виде змейки по деревянному решетчатому основанию, закрепив ее простыми пластиковыми хомутами. Если вы хотите сэкономить светодиодную ленту, то вы можете отрезать полоски, нужной вам длинны, и спаять их проводами. Все равно, адресация светодиодов задается программно, и нет никакой разницы, будет ли это цела полоса или отдельные полосы. Ускорение программного обеспечения для управления светодиодными лентами На момент написания этой инструкции, код управления на языке Python лентами RGB был немного медленный, но есть несколько способов ускорить его. Во-первых, отредактируйте файл ledstrip.py, и установите использование аппаратного управления SPI, аргумент должен быть такого вида use_py_spi = True. Лично у меня файл ledstrip.py был расположен по следующему пути: /home/pi/RPi-LPD8806/raspledstrip/ledstrip.py И в нем содержалась строка следующего вида, но с параметром False: def __init__(self, leds, use_py_spi = True, dev="/dev/spidev0.0", driver="LPD8806"): Теперь внутри файла LPD8806.py, меняем скорость SPI (скорость адресации) на 16 МГц. if self.use_py_spi:import spidevself.spi = spidev.SpiDev()self.spi.open(0,0)self.spi.max_speed_hz = 16000000print 'py-spidev MHz: %d' % (self.spi.max_speed_hz / 1000000.0 ) Последние изменения в файле LPD8806.py производятся в функции Update (). Каждый вызов функции self.spi.xfer2 (), производится с задержкой 160 мс, так что мы просто изменяем функцию обновления, так что она вызывает функцию spi.xfer2 () немного реже, что ускоряет процесс. def update(self, buffer):temp_buffer = []if self.use_py_spi:for x in range(self.leds):temp_buffer = temp_buffer + [i for i in buffer[x]]#self.spi.xfer2([i for i in buffer[x]])self.spi.xfer2(temp_buffer)self.spi.xfer2([0x00,0x00,0x00]) #zero fill the last to prevent stray colors at the endself.spi.xfer2([0x00]) #once more with feeling - this helps time2 = time.time() Вот и все с ускорением. Если вы повторно запустите файл example.py, то вы увидите значительное ускорение работы. Подробное описание установки основной библиотеки LightShow Pi, вы можете прочитать в оригинальной инструкции на английском языке по ссылке: https://learn.adafruit.com/raspberry-pi-spectrum-analyzer-display-on-rgb-led-strip?view=all Виктор 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.