Визуализатор музыки на Arduino и матричном дисплее 32x8


В настоящее время на многих концертах, фестивалях и в ночных клубах проигрывание музыки сопровождается различными визуальными эффектами, изменяющимися в такт проигрываемой музыки. Устройства, реализующие это, называются визуализаторами музыки. По сути, данные устройства извлекают из принимаемого аудио сигнала его спектр, используя преобразование Фурье, и визуализируют (отображают) данный спектр на каких-нибудь дисплеях (экранах).

Внешний вид визуализатора музыки на Arduino и матричном дисплее 32x8

В данной статье мы рассмотрим создание на основе платы Arduino Nano, модуля светодиодного матричного дисплея 32x8 (Dot Matrix Display Module) и аудиосенсора (Audio Sensor) визуализатора музыки (аудио). Светодиоды на матричном дисплее 32x8 будут загораться в зависимости от сигнала, который будет считывать плата Arduino с микрофона, подсоединенного к ее аналоговому контакту. Ранее на нашем сайте мы уже рассматривали похожий проект визуализатора (посложнее немного, но с большим количеством режимов отображения), также можете посмотреть проект анализатора спектра звуковых частот на основе Arduino, он также во многом похож на рассматриваемый в данной статье проект, но только вместо матричного светодиодного дисплея в нем используется ЖК дисплей 128х64.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. MAX7219 32x8 Dot Matrix Display Module (модуль светодиодного матричного дисплея) (купить на AliExpress).
  3. Микрофон/модуль микрофона (купить на AliExpress).
  4. Соединительные провода.
  5. 3-D принтер (опционально).

Основные принципы работы модуля матричного дисплея 32x8 MAX7219

Модуль матричного дисплея (Display Dot Matrix Module) MAX7219 представляет собой интегрированный последовательный дисплей со светодиодами, соединенными по схеме с общим катодом (common-cathode). Модули MAX7219 могут объединяться в вертикальной или горизонтальной плоскости и, таким образом, из них можно собрать универсальный матричный дисплей необходимого размера также, как и из светодиодных матричных дисплеев P10. Данный модуль дисплея использует для связи с "внешним миром" удобный 3-проводный последовательный интерфейс (3-wire serial interface), поэтому его легко можно подключить к современным микроконтроллерным платам, таким как Arduino или Raspberry Pi.

Данный модуль дисплея содержит четыре матричных дисплея 8×8 и четыре микросхемы драйвера дисплея MAX7219, то есть по одной микросхеме драйвера на каждый дисплей 8×8. Модуль светодиодной матрицы 8x8 содержит 64 светодиода, упорядоченных в форме матрицы. Принципиальная схема соединений данной светодиодной матрицы показана на следующем рисунке.

Схема соединений светодиодной матрицы дисплея

Как показано на представленном рисунке светодиодная матрица 8×8 содержит 16 контактов, 8 контактов рядов (строк) и 8 контактов столбцов. Светодиоды в строках и столбцах матрицы объединены вместе чтобы уменьшить число используемых для управления светодиодами контактов. Для управления таким большим числом светодиодов с помощью относительно небольшого числа используемых контактов используется технология мультиплексирования (Multiplexing). Более подробно суть данной технологии вы можете прочитать в этой статье.

Микросхема драйвера светодиодного дисплея MAX7219 используется для управления модулями дисплея. С помощью этой микросхемы можно с высокой точностью управлять дисплеем и генерировать образец или текст, который вы хотите отобразить. Также дополнительным преимуществом использования данной микросхемы драйвера является то, что с ее помощью можно управлять всеми 64 светодиодами, используя для этого всего лишь 3 контакта.

Основные особенности модуля матричного дисплея 32x8 MAX7219:

  • входное (питающее) напряжение: 5V;
  • максимальный рабочий ток: 320 mA;
  • всего 3 провода (контакта) для управления дисплеем;
  • простое объединение нескольких модулей дисплея в один большой дисплей;
  • компактный размер модуля дисплея.

Более подробно про принципы работы модуля матричного дисплея MAX7219 можно прочитать в этой статье.

Схема проекта

Схема визуализатора музыки на Arduino и матричном дисплее 32x8 представлена на следующем рисунке.

Схема визуализатора музыки на Arduino и матричном дисплее 32x8Модуль матричного дисплея и микрофон запитываются используя контакты 5V и GND платы Arduino Nano. Но если вы хотите использовать матричный дисплей на его максимальной яркости, то в этом случае для его питания целесообразно использовать внешний источник питания поскольку в режиме максимальной яркости данный дисплей потребляет достаточно большой ток.

Контакт данных микрофона подключен к аналоговому контакту A7 платы Arduino Nano. SPI контакты дисплея подключены к аппаратным контактам интерфейса SPI платы Arduino Nano поскольку аппаратные контакты интерфейса SPI значительно быстрее работают, чем контакты интерфейса SPI, конфигурируемые программным способом.

Необходимые соединения между платой Arduino Nano, модулем матричного дисплея и микрофоном представлены в следующей таблице.

Arduino Nano Матричный дисплей 32x8
5V VCC
GND GND
D11 DIN
D10 CS
D13 CLK
Arduino Nano Модуль микрофона
5V VCC
GND GND
A7 OUT

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

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В программе для нашего проекта будут использоваться библиотеки arduinoFFT.h и MD_MAX72xx.h. Обе эти библиотеки можно установить из менеджера библиотек (library manager) Arduino IDE. Для этого запустите Arduino IDE и выберите в ней пункт меню Sketch < Include Library < Manage Libraries. Выполните в открывшемся окне поиск библиотеки arduinoFFT и установите arduinoFFT library от Enrique Condes.

Установка библиотеки arduinoFFT с помощью Arduino IDE

Аналогичным образом установите библиотеку MD_MAX72xx.h от MajicDesigns.

После установки библиотек необходимо подключить их использование в программе. Библиотека ArduinoFFT будет использоваться для вычисления спектра аналогового сигнала с помощью быстрого преобразования Фурье (FFT). Библиотека MD_MAX72xx будет использоваться для отображения вычисленного спектра на нашем матричном дисплее. Библиотека SPI будет необходима для осуществления взаимодействия по интерфейсу SPI между платой Arduino и матричным дисплеем.

Далее создадим объект MD_MAX72XX, который будет необходим для работы с матричным дисплеем, с помощью функции MD_MAX72XX (). В этой функции три параметра: первый – это тип аппаратного обеспечения, второй – это контакт CS, третий – максимальное число подключенных устройств. Также мы создадим объект arduinoFFT с помощью функции arduinoFFT().

Затем объявим два массива для хранения 64 компонент спектра – в одном будет храниться действительная часть спектра, а в другом – мнимая.

Далее в функции setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки. Также инициализируем матричный дисплей с помощью функции disp.begin().

После этого внутри функции loop мы будем считывать 64 отсчета сигнала с микрофона (с контакта A7 платы Arduino nano) используя цикл for и сохранять эти отсчеты в массиве ‘realComponent’.

После получения 64 отсчетов сигнала с выхода микрофона мы будем подавать их на вход алгоритма вычисления быстрого преобразования Фурье (Fast Fourier Transform, FFT) чтобы вычислить 64 спектральные компоненты действительной и мнимой части спектра. Затем вычисленные спектральные компоненты мы будем подавать на вход функции FFT.ComplexToMagnitude() чтобы определить амплитуды этих 64 спектральных компонент.

Далее мы будем использовать цикл для управления 32 столбцами светодиодной матрицы. Внутри этого цикла мы будем преобразовывать наши значения в известный диапазон и затем с помощью функции map мы будем преобразовывать их в диапазон от 0 до 8. Нули будут означать что все светодиоды рассматриваемого столбца матрицы должны находиться в выключенном состоянии (low) и наоборот.

3-D печать корпуса для визуализатора спектра аудио сигнала

После сборки конструкции проекта с помощью перфорированной платы и программирования платы Arduino Nano можно изготовить корпус для нашего визуализатора. Для этого можно измерить размеры конструкции проекта с помощью верньера. Получившийся в результате корпус для нашего визуализатора спектра показан на рисунке ниже. STL файлы для 3-D печати данного корпуса можно скачать по следующей ссылке с Thingiverse.

Тестирование работы проекта

После того как все компоненты проекта будут готовы можно поместить электронную часть проекта внутрь изготовленного корпуса.

Внешний вид визуализатора в собранном корпусе

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

Тестирование работы проекта

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

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(1 голосов, оценка: 3,00 из 5)
Загрузка...
1 739 просмотров

Комментарии

Визуализатор музыки на Arduino и матричном дисплее 32x8 — 2 комментария

    • Если посмотреть текущую версию библиотеки и примеры к ней, например - https://github.com/kosme/arduinoFFT/blob/master/Examples/FFT_02/FFT_02.ino
      то действительно при создании FFT объекта нужно указывать аргументы к функции. Ну что поделать, прогресс идет вперед, библиотеки меняются, что требует изменения кодов, написанных для старых версий библиотеки
      /* Create FFT object */
      ArduinoFFT FFT = ArduinoFFT(vReal, vImag, samples, sampling);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *