32-полосный анализатор/визуализатор звукового спектра на Arduino

Цель этого проекта - создание 32-полосного анализатора/визуализатора спектра звуковых (музыкальных) частот с использованием Arduino. Ожидаемая аудитория этого проекта - любой аудиоэнтузиаст, студент или новичок, имеющий базовые знания в области электронных компонентов, программирования Arduino и C. Компоненты, используемые в этом проекте, дешевые и просты в сборке.

Основные характеристики анализатора частотного спектра

  • Использует легко устанавливаемые библиотеки «arduinoFFT» и «MD_MAX72xx».
  • Поддерживаются пять различных режимов отображения, которые можно переключать с помощью кнопки..
  • Левый и правый каналы аудиосигнала смешиваются, поэтому вы не пропустите ни одной доли
  • В прототипе используется светодиодный матричный дисплей 32x8, который можно изменить и легко модифицировать
  • Звук может подаваться через выход для наушников или линейный выход музыкальной системы/усилителя.

Необходимые компоненты

  • Arduino Nano или Uno (я пробовал с Nano и Uno, также должен работать с другими моделями)
  • Светодиодный матричный дисплей 32 x 8 - 1 шт.
  • Кнопочный переключатель - 1 шт. (Обычно идет в комплекте с Arduino)
  • Конденсатор 100 нФ - 2 шт.
  • Резистор 5 кОм - 3 шт.
  • Резистор 10 кОм - 1 шт.
  • Резистор 100 кОм - 2 шт.
  • Блок питания на 5 вольт (подойдет питание от USB)

Номиналы резисторов не очень строгие, вы можете выбрать любое ближайшее значение. Убедитесь, что R1 и R2 (см. Схему) имеют одинаковое значение.

Алгоритм программы

Алгоритм программы 32-х битного анализатора спектра на базе Arduino приведен на рисунке ниже.

Алгоритм программы визуализатора спектра на Arduino

Описание системы

Плата Arduino (ATmega328P) имеет встроенный аналого-цифровой преобразователь (АЦП), который используется здесь для преобразования входного аудиосигнала в цифровые образцы. АЦП настроен на выборку входного сигнала с тактовой частотой 38,46 кГц. Это достигается путем настройки предварительного делителя АЦП на 32. Частота дискретизации 38,64 кГц означает, что цифровые отсчеты могут воспроизводить входную частоту до 19,32 кГц (теорема Найквиста), что достаточно для аудиосигналов.

Как упоминалось в начале, предполагаемая цель этого проекта - отображение частотного спектра звукового музыкального сигнала. Следовательно, левый и правый аудиоканалы смешиваются и подаются на аналоговый вход A0 АЦП. Вы можете использовать аудиоразветвитель, чтобы вы могли передавать одну и ту же музыку одновременно в анализатор спектра и в другой усилитель (при необходимости).

АЦП настроен на использование внешнего источника напряжения. В этом проекте напряжение идет от 3.3 В стабилизированного источника напряжения на плате Arduino. Поскольку аналоговый сигнал колеблется выше и ниже нулевого уровня напряжения, нам необходимо смещение постоянного тока на аналоговом входе АЦП. Это гарантирует, что выход АЦП не ограничивает отрицательные циклы входного сигнала. Такое же стабилизированное напряжение 3.3 В делится двумя резисторами R1 и R2 и затем подается на аналоговый вход для смещения постоянного тока. С этим смещением постоянного тока АЦП будет выдавать 512 на выходе, даже если входной сигнал отключен. Позже в коде это 512, вызванное смещением постоянного тока, вычитается, так что показание представляет фактическое изменение входного сигнала.

Библиотека ArduinoFFT - это сердце кода, который переводит входной аналоговый сигнал в частотный спектр. Я обнаружил, что эта библиотека проста в использовании и дает наиболее точные результаты для этого проекта. Прототип настроен на создание 64 выборок и выполняет БПФ с этими выборками. Библиотека ArduinoFFT может выполнять БПФ сэмплов от 16 до 128, это можно настроить в программе. Но библиотека arduinoFFT работает медленно с 128 сэмплами, поэтому я придерживаюсь лучшего из 64 сэмплов.

Дисплей, используемый в этом проекте, представляет собой светодиодную матрицу 32 столбца по 8 строк. Библиотека MD_MAX72xx упростила часть управления дисплеем. Эта библиотека предоставляет функцию включения/выключения любого количества светодиодов в столбце, который используется в этой программе. Амплитуда каждой полосы частот отображается от 0 до 8, в зависимости от амплитуды, когда включается соответствующее количество светодиодов в каждом столбце.

В этой программе доступны пять режимов отображения, что в основном достигается за счет включения/выключения светодиодов в разных положениях в каждом столбце. Вы можете легко изменить/создать другой узор. Здесь используется кнопка для изменения режима отображения. При каждом нажатии шаблон дисплея перемещается к следующему и, наконец, возвращается в режим по умолчанию. Кнопка подключена к одному из цифровых входов, и этот вход сканируется после каждого обновления дисплея.

Частота

Частотная характеристика системы была протестирована путем подачи синусоидальной волны, сгенерированной одним из веб-сайтов онлайн-генераторов сигналов. Подтверждено, что система может работать на частотах до 18,6 кГц.

Частотная характеристика визуализатора спектра на Arduino

Подключение входа

Есть несколько способов подачи аудиовхода в этот анализатор спектра. Вы можете вывести аудиовыход из LINE из музыкальной системы/усилителя. Другой вариант - получить звук через выход для наушников мобильной/музыкальной системы. Я не предлагаю использовать другой микрофон для приема звука, так как уровень сигнала и частотная характеристика будут зависеть от многих факторов.

Ниже приведена примерная схема подключения LINE out усилителя/музыкальной системы к анализатору спектра.

Схема подключения LINE out усилителя/музыкальной системы к анализатору спектра

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

Подключение выхода наушников мобильной/музыкальной системы к анализатору спектра

Скетч для Arduino и схема подключения

Скачать программу для Arduino Скачать схему подключения

Дополнительную информацию вы можете получить на английском языке на Github странице от самого автора проекта.