32-полосный анализатор-визуализатор спектра звуковых частот на Arduino
В этой статье мы рассмотрим создание 32-полосного анализатора-визуализатора спектра звуковых частот на основе платы Arduino. Надеемся, что этот проект вызовет интерес у аудио энтузиастов и любителей электроники, увлекающихся программированием Arduino. Компоненты, используемые в данном проекте, сравнительно дешево стоят, поэтому собрать его будет достаточно просто.
Основные особенности данного анализатора спектра:
- использует легко устанавливаемые библиотеки “arduinoFFT” и “MD_MAX72xx”;
- пять различных режимов отображения, переключаемых кнопкой;
- смешивание правого и левого каналов аудио сигнала, поэтому вы не пропустите ни один звук;
- использование 32х8 матричного дисплея из светодиодов, вы можете изменить это по своему желанию;
- аудио сигнал можно подать с выхода наушников или с выхода Line-out звуковой системы или усилителя.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress) или Uno (купить на AliExpress).
- Светодиодный матричный дисплей 32х8.
- Кнопочный переключатель.
- Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
- Резисторы 5 кОм (3 шт.), 10 кОм (1 шт.), 100 кОм (2 шт.) (купить на AliExpress).
- Источник питания с напряжением 5 В (можно по кабелю USB от компьютера).
Значения сопротивлений резисторов не являются «строгими», вы можете варьировать их в небольших пределах по своему желанию. Но значения сопротивлений R1 и R2 (см. схему ниже) должны быть одинаковыми.
Общие принципы работы проекта
Плата Arduino сконструирована на основе микроконтроллера ATmega328P и имеет встроенные аналогово-цифровые преобразователи (в англ. аббревиатуре ADC — Analog To Digital converter), которые в нашем проекте используются для преобразования поступающего аналогового аудио сигнала в цифровую форму. АЦП Arduino производит дискретизацию поступающего входного сигнала с частотой дискретизации 38,46 кГц. Это достигается при помощи установки коэффициента деления предделителя (prescaler) АЦП равным 32. Если частота дискретизации равна 38,46 кГц, то согласно теореме Котельникова это значит что максимальная частота входного аналогового сигнала, который может быть преобразован без потерь в цифровую форму, равна 19,32 кГц – этого вполне достаточно для большинства аудио сигналов.
Главная цель проекта – показать спектр музыкального аудио сигнала. Для этого левый и правый каналы аудио сигнала смешиваются вместе и подаются на аналоговый контакт A0 платы Arduino. При необходимости вы можете использовать сплиттер чтобы подавать аудио сигнал одновременно и на анализатор спектра, и в другое какое-нибудь устройство, например, усилитель.
АЦП в данном проекте конфигурируются на использование внешнего опорного напряжения (reference voltage). В этом проекте в качестве опорного напряжения для АЦП используется стабилизированное напряжение 3.3v с платы Arduino. Поскольку аналоговый сигнал колеблется как выше, так и ниже нуля, мы должны использовать положительное напряжение смещения на входе АЦП – это необходимо для того чтобы АЦП не обрезал отрицательные циклы сигнала. То же самое стабилизированное напряжение разделяется с помощью двух резисторов R1 и R2 и затем подается на вход АЦП для формирования положительного напряжения смещения. С таким напряжением смещения на выходе АЦП будет значение 512 при отсутствии аудио сигнала на входе. В дальнейшем в коде программы это значение 512 вычитается чтобы получить реальные изменения входного сигнала.
«Сердцем» кода программы является библиотека ArduinoFFT – именно она выполняет быстрое преобразование Фурье (БПФ) и вычисляет спектр входного сигнала. Опытный образец данного проекта был сконфигурирован для формирования 64 отсчетов (сэмплов, samples) и выполнения быстрого преобразования Фурье над этими отсчетами. Библиотека ArduinoFFT может выполнять БПФ над числом отсчетов от 16 до 128 – это можно сконфигурировать в программе. Но для 128 отсчетов БПФ выполняется достаточно медленно, поэтому в нашем проекте мы решили ограничиться 128 отсчетами.
В качестве средства отображения спектра в нашем проекте используется светодиодная матрица 32 столбца х 8 строк. Управлять подобной матрицей сравнительно просто с помощью библиотеки MD_MAX72xx, которую мы будем использовать в нашем проекте. С помощью этой библиотеки можно включить/выключить любое число светодиодов в столбце, который в данный момент времени используется в программе. Амплитуда каждого частотного канала (полосы) конвертируется в диапазон от 0 до 8 и в зависимости от этой амплитуды зажигается необходимое количество светодиодов в столбце, то есть чем больше амплитуда, тем больше светодиодов в столбце будут гореть.
В проекте доступны 5 режимов дисплея, которые заключаются в различных вариантах включения светодиодов в столбцах. Каждый из этих режимов вы при необходимости можете перепрограммировать самостоятельно. Для переключения режимов используется кнопка. С каждым нажатием кнопки происходит переход к следующему режиму, при нажатии кнопки на 5-м режиме снова происходит переход к 1-му режиму. Эта кнопка подключена к цифровому контакту платы Arduino и после каждого обновления экрана дисплея производится проверка ее нажатия.
Частотная характеристика
Частотная характеристика проектируемого анализатора спектра была проверена с помощью подачи на вход анализатора синусоидального колебания, сформированной генератором сигналов на одном из веб-сайтов. Было установлено, что частотная характеристика анализатора достигает частоты 18,6 кГц.
Дополнительные детали
Чтобы узнать более полную информацию о данном проекте, необходимо посетить страницу автора этого проекта на сервисе github — https://github.com/shajeebtm/Arduino-audio-spectrum-visualizer-analyzer/.
Подача входного сигнала на анализатор спектра
Существует несколько способов подачи аудио сигнала на рассматриваемый нами анализатор спектра. Первый способ – взять аудио сигнал с выхода LINE out вашей музыкальной системы/усилителя. Второй способ – взять аудио сигнал с выхода наушников или мобильного телефона.
На следующем рисунке показан пример соединения выхода LINE out усилителя/музыкальной системы с анализатором спектра.
Далее на рисунке показан пример соединения выхода наушников/мобильной системы с анализатором спектра. Когда вы соедините кабель к выходу наушников вы уже не сможете услышать звук с них, поэтому в этом случае, если вы хотите и анализировать спектр сигнала, и слышать сам звук, вам необходимо будет использовать специальный разделитель.
Работа схемы
Схема устройства представлена на следующем рисунке.
Анализатор спектра звуковых частот на основе FFT и Arduino
Анализатор спектра – это измерительное оборудование, которое для проведения анализа спектра использует быстрое преобразование Фурье (FFT — Fast Fourier Transform). Осуществление анализа Фурье возможно в случаях, когда непрерывный временной интервал может быть преобразован в непрерывный частотный интервал, в котором будет содержаться информация об амплитудах и фазах частотных компонентов.
Представленный в данной статье анализатор спектра звуковых частот построен на основе платы Arduino. Устройство состоит из сравнительно небольшого числа компонентов.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- ЖК дисплей с разрешением 128х64 пикселов (ST7920 128×64 LCD) (купить на AliExpress).
- Резистор 10 кОм (2 шт.) (купить на AliExpress).
- Однооборотный п отенциометр 10 кОм (single-turn potentiometer) (купить на AliExpress).
- Конденсатор 1 мкФ (купить на AliExpress).
Если вы раньше не работали с графическим дисплеем, используемом в данном проекте, то на нашем сайте вы можете прочитать статью про подключение графического ЖК дисплея ST7920 к плате Arduino.
Работа схемы
Схема анализатора спектра звуковых частот на основе платы Arduino представлена на следующем рисунке.
Аудио сигнал в данной схеме подается на аналоговый контакт A0 платы Arduino, смещение рабочей (средней точки) на этом контакте обеспечивается с помощью потенциометра 10 кОм. Таким образом, рабочую точку можно регулировать от 0 до +5V. Также на входе схемы можно установить потенциометр для управления амплитудой входного сигнала.
Код программы использует библиотеку «fix_fft», которая предназначена для анализа спектра сигналов с помощью быстрого преобразования Фурье (БПФ).
Собранную конструкцию проекта мы упаковали в удобную коробку. Данный анализатор спектра нельзя назвать профессиональным инструментом поскольку он имеет низкое разрешение и частотный диапазон, но для образовательных целей он подойдет отлично.
Анализ звука на ардуино
Copy raw contents
Графический анализатор аудио спектра на Arduino
Графоанализатор спектра с кучей настроек и возможностей
- Вывод спектра на:
- Дисплей 1602
- Матрица из 4х блоков 8х8 (MAX7219)
- Матрица адресных WS2812
- Настройка яркости
- Настройка цветовой гаммы (для WS2812)
- Настройка усиления и подавления шумов
- Настройка плавности анимации
- Настройка громкости:
- Фиксированная
- С потенциометра
- Автоматическая
- Точки максимума
- Вкл выкл
- Время зависания
- Скорость падения
- Ручная выборка по частотам
- Подробности в видео: https://youtu.be/xMdRmrXdSxU
ВНИМАНИЕ! Если это твой первый опыт работы с Arduino, читай инструкцию
- libraries — библиотеки проекта. Заменить имеющиеся версии
- Firmware — прошивка для Arduino, файлы в папках открыть в Arduino IDE (инструкция)
- spektrumFHT — «голая» прошивка для вывода спектра
- spertrum1602 — анализатор с дисплеем 1602
- spertrumMatrix_MAX7219 — анализатор с матрицей 8х32
- spertrumWS2812_16x16_full — анализатор с цветной матрицей 16х16
- schemes — схемы
Материалы и компоненты
Ссылки оставлены на магазины, с которых я закупаюсь уже не один год
- Arduino NANO 328p – искать
- https://ali.ski/i87zav
- https://ali.ski/eSSgk
- https://ali.ski/X7bz5
- https://ali.ski/0ZlYTT
- Giant4 (Россия)
- Макетная плата и провода https://ali.ski/KQSEPu
- Дисплей 1602
- https://ali.ski/kHURN
- https://ali.ski/Pr880
- Матрица MAX7219 – искать
- https://ali.ski/APiig-
- https://ali.ski/gmwkXj
- Матрица 16×16 – искать
- Giant4
- https://ali.ski/SArEeT
- https://ali.ski/3P9NYD
- https://ali.ski/_Dg0j
- https://ali.ski/2NOrj
Вам скорее всего пригодится
Как скачать и прошить
- Первые шаги с Arduino — ультра подробная статья по началу работы с Ардуино, ознакомиться первым делом!
- Скачать архив с проектом
На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP
- Установить библиотеки в
C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
C:\Program Files\Arduino\libraries\ (Windows x86) - Подключить Ардуино к компьютеру
- Запустить файл прошивки (который имеет расширение .ino)
- Настроить IDE (COM порт, модель Arduino, как в статье выше)
- Настроить что нужно по проекту
- Нажать загрузить
- Пользоваться
Настройки в коде (пример для WS2812)
В: Как скачать с этого грёбаного сайта?
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP
В: Скачался какой то файл .zip, куда его теперь?
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.
В: Я совсем новичок! Что мне делать с Ардуиной, где взять все программы?
О: Читай и смотри видос http://alexgyver.ru/arduino-first/
В: Компьютер никак не реагирует на подключение Ардуины!
О: Возможно у тебя зарядный USB кабель, а нужен именно data-кабель, по которому можно данные передавать
В: Ошибка! Скетч не компилируется!
О: Путь к скетчу не должен содержать кириллицу. Положи его в корень диска.
В: Сколько стоит?
О: Ничего не продаю.
Arduino.ru
Анализатор спектра звука на Arduino
Интересный проект представил Paul Bishop — Arduino как анализатор звукового спектра с выводом спектрограммы на телевизор. На самом деле не телевизор, а экран DVD-плеера, но способ вывода абсолютно тот же. Для вывода была использована Arduino библиотека TVout, которая позволяет выводить сигнал на телевизор через RCA коннектор в формате PAL или NTSC. Картинка черно-белая и идет с разрешением 128х96. При таком разрешение на экран можно вывести 12 строк по 16 символов при размере шрифта 8х8.
Paul использовал контроллер Adafruit Boarduino, но подойдет любой 5 вольтовый, кроме самых старых моделей Arduino на Atmel ATmega168, так как у них просто недостаточно памяти.
Звук снимается с микрофона и усиливается через 2n3904 NPN транзистор так, как показано на схеме и считывается контроллером на аналоговом входе 0. Для частотного разложения звука используются быстрое преобразование Фурье. Автору не пришлось писать эту часть кода, он использовал готовую библиотеку FFT, код которой мы приводим ниже. Эта библиотека целиком написана на С и отлично работает на Atmega 328 и имеющихся в распоряжении 2кБ памяти. Для того, чтобы использовать эту библиотеку код надо поместить в файлы .cpp и .h в директории \libraries\FFT.
Компоненты:
(1шт.) 2n3904 NPN Транзистор [Q1]
(3шт.) 1k Ohm Резистор [R2,R4,R5]
(1шт.) 330 Ohm Резистор [R6]
(1шт.) 10k Ohm Резистор [R1]
(1шт.) 100k Ohm Резистор [R3]
(1шт.) Конденсатор электролит., 3.3MF [C1]
(1шт.) Микрофон [MIC1]