Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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

Компоненты и расходные материалы

Arduino Nano R3
× 1
WS2812B 8x32 RGB LED MATRIX
× 1
Резистор 4,75 кОм
× 3
Резистор 100 кОм
× 2
Резистор 10 кОм
× 1
Резистор в сквозное отверстие, 390 Ом
× 1
Конденсатор 100 нФ
× 2
Конденсатор 1000 мкФ
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1
прототипная плата с несколькими отверстиями 4x6 см
× 1

Необходимые инструменты и машины

Паяльник (общий)
Разветвительный кабель с разъемом 3,5 мм

Об этом проекте

Проект

Этот проект предназначен для создания 32-полосного визуализатора звукового (музыкального) частотного спектра RGB с использованием Arduino Nano и светодиодной матрицы 8x32 WS2812B RGB.

Первоначальный проект, вдохновивший на это

Большое спасибо Шаджибу Автор оригинального проекта на базе светодиодной матрицы MAX72xx. Я только модифицировал пилотную часть светодиодной матрицы, чтобы адаптировать ее к светодиодной матрице RGB WS2812B.

Ссылка на оригинальный проект:32-полосный анализатор визуализатора звукового спектра

Светодиодная матрица WS2812B RGB

При использовании светодиодной матрицы RGB на основе светодиодов высокой яркости 5050 SMD необходимо использовать внешний источник питания, потому что матрица RGB может поглощать более 10 мА на светодиод, поэтому все светодиоды, горящие с максимальной яркостью, могут поглощать более 2,5 ампер.

По этой причине я вставил диод последовательно на + 5 В, чтобы иметь возможность питать Arduino в автономном режиме, когда USB-кабель не подключен, и чтобы Arduino не был источником питания матрицы RGB, поэтому вы избегаете перегрузка внутренних цепей платы током, который она не может обеспечить.

В исходный проект, в дополнение к входному диоду, для защиты входа светодиодной матрицы от возможных пиков напряжения я также добавил резистор на 390 Ом последовательно между выводом Arduino D6 и входом данных, а также конденсатор на 1000 мкФ 12 В для улучшения стабильность напряжения питания Arduino.

Сборка оборудования

Как видно на главной фотографии, я сделал первый прототип на плате с несколькими отверстиями размером 4x6 см, используя два аудиоразъема RCA (припаянные непосредственно на плате), которые также можно заменить гнездовым разъемом 3,5 мм. Во избежание гула важно соединить источник и аудиовход карты с помощью экранированного кабеля. Еще один совет - сделать соединение между Arduino и светодиодной матрицей как можно короче.

Код

В конце концов, все программное обеспечение основано на огромной работе, проделанной автором процедуры выборки через библиотеку FFT, и окончательной реализации Shajeeb.

Я добавил две функции:

Первый - GetLedFromMatrix (...) чтобы отобразить матрицу в строки и столбцы и иметь возможность адресовать каждый из 256 светодиодов через координаты строки и столбца.

Второй - тот, который я произвольно назвал SetColumn (...) - который включает светодиоды каждого столбца в зависимости от пикового значения, полученного при оцифровке звука ( значения от 0 до 7 ) и на основе заданных цветов в двумерном массиве. Вы можете весело провести время, изменяя значения и, следовательно, цвета по своему усмотрению. Чтобы упростить код, я использовал процедуру под названием Wheel () (взято из демонстрации, прикрепленной к библиотеке Neopixel Adafruit), которая, начиная со значения от 0 до 255, возвращает 32-битное длинное значение без знака, которое будет передано непосредственно в функцию setPixelColor. На этом вы можете играть по своему усмотрению, учитывая ограничения памяти Arduino, избегая, где это возможно, использования 32-битных переменных для хранения значений цветов RGB.

Аудио выравнивание

Кроме того, поскольку я провел тесты со звуком, поступающим от звуковой карты, встроенной в материнскую плату ПК, для улучшения частотной характеристики я добавил массив байтов из 32 значений, которые, по сути, представляют собой кривую эквализации для ослабления низких частот и усилить высокие частоты. Если вам это не нужно, просто установите для переменной EQ_ON значение false . или измените уровень затухания, изменив 32 значения eq [32] массив, значение 100 оставляет амплитуду неизменной, одно меньше 100 ослабляет, а другое больше 100 подчеркивает полосу частот.

Светодиод яркость

Яркость матрицы предварительно установлена ​​в коде на 32 (ЯРКОСТЬ const). Максимальное значение яркости матрицы WS2812B (на бумаге) составляет 255, но уже со значениями больше 100 светодиодный свет, к сожалению, меняет цвет с белого на бледно-желтый, возможно, вместо этого необходимо питать матрицу через два центральных красного и черного провода. разъема с правой стороны.

Я все еще пытаюсь ...

Наконец, если вы используете максимальную яркость 64, то, вероятно, будет достаточно источника питания на 1 А, в противном случае 2 А необходимы.

Будущее Удате

Я работаю над новой версией, в которой используется OpenMusicLabs FHT . библиотека, которая оказывается во много раз быстрее, чем БПФ Arduino.

Быть в курсе. :)

Пожалуйста простите за плохой английский, я воспользовался переводчиком Google.

Код

  • Spectrum_Analyzer_WS2812B.ino
Spectrum_Analyzer_WS2812B.ino Arduino
 / * Авторское право (c) Shajeeb TM 2019 Настоящим предоставляется бесплатно любому лицу, получившему копию этого программного обеспечения и связанных файлов документации («Программное обеспечение»), работать с Программным обеспечением без ограничений, включая без ограничения права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензию и / или продажу копий Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕЗАЩИТЫ ОТ ПРАКТИКИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ВЛАДЕЛЬЦЫ АВТОРСКИХ ПРАВ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГИЕ ОТВЕТСТВЕННОСТЬ, ПРОИЗВОДИМЫЕ В РЕЗУЛЬТАТЕ ДОГОВОРА, ПРАКТИКИ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИМ, ВНУТРЕННИЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЛАМИ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. Версия WS2812B Led Matrix от Janux * / # include  #include  #include  #define SAMPLES 64 // Должно быть степенью 2 # define xres 32 // Общее количество столбцы на дисплее должны быть <=SAMPLES / 2 # define yres 8 // Общее количество строк на дисплее # define ledPIN 6 // пинта для управления Led Matrix # define NUM_LEDS (xres * yres) #define BRIGHTNESS 32 # define buttonPin 5 // номер контакта кнопки для изменения displaycolorbyte yvalue; byte displaycolumn, displayvalue; int peaks [xres]; byte state =HIGH; // текущее значение входного пинбайта previousState =LOW; // предыдущее чтение из входного пинбайта displaycolor =0; // Массивы для sampligdouble vReal [SAMPLES]; double vImag [SAMPLES]; byte data_avgs [xres]; arduinoFFT FFT =arduinoFFT (); // объект БПФ без знака long lastDebounceTime =0; // последний раз, когда выходной вывод был переключен unsigned long debounceDelay =100; // время дребезга; увеличить, если выходной сигнал мерцает // Параметр 1 =количество светодиодов в матрице // Параметр 2 =номер контакта (большинство из них действительны) // Параметр 3 =флаги типа пикселя, при необходимости складывайте вместе:// NEO_KHZ800 800 кГц битовый поток (большинство NeoPixel продукты со светодиодами WS2812) // NEO_KHZ400 400 кГц (классические пиксели 'v1' (не v2) FLORA, драйверы WS2811) // Пиксели NEO_GRB подключены для битового потока GRB (большинство продуктов NeoPixel) // Пиксели NEO_RGB подключены для битового потока RGB ( v1 FLORA пикселей, а не v2) Adafruit_NeoPixel pixel =Adafruit_NeoPixel (NUM_LEDS, ledPIN, NEO_GRB + NEO_KHZ800); // Фильтр эквалайзера для ослабления низких частот и улучшения высоких частот // Полезно на звуковой карте ПК, которая обычно имеет много басов и плохие высокие частоты bool EQ_ON =true; // установите значение false, чтобы отключить eqbyte eq [32] ={50, 55, 60, 70, 75, 80, 85, 95, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 115, 125, 140, 160, 185, 200, 225, 255}; // Определение цвета для одного светодиода, используемого в функции setColumn, 0 для пользовательского цвета // Цвет вычисляется функцией Wheel, см. ниже байтовые цвета [] [8] ={{170, 160, 150, 140, 130, 120, 1, 1}, {1, 5, 10, 15, 20, 25, 90, 90} , {90, 85, 80, 75, 70, 65, 1, 1}, {90, 90, 90, 30, 30, 30, 1, 1}, {170, 160, 150, 140, 130, 120, 0, 0}, {170, 160, 150, 140, 130, 120, 1, 1}, {170, 160, 150, 140, 130, 120, 1, 1}}; void setup () {pixel.begin (); pixel.setBrightness (ЯРКОСТЬ); // Начинаем операции БПФ ADCSRA =0b11100101; // установить АЦП в режим автономной работы и установить предскалярное значение 32 (0xe5) ADMUX =0b00000000; // использовать вывод A0 и внешний источник опорного напряжения} void loop () {// ++ Выборка для (int i =0; i  peaks [i]) peaks [i] =yvalue; // сохраняем пик, если> предыдущий пик yvalue =peaks [i]; displaycolumn =i; displayvalue =yvalue; setColumn (displaycolumn, displayvalue); // рисуем корзины} pixel.show (); // показать сегменты displaycolorChange (); // проверяем, нажата ли кнопка для изменения цветового режима} // ------------------------------------- ---------------------------- // Светодиоды столбца x в соответствии со значением yvoid setColumn (byte x, byte y) {byte led , я; для (я =0; я  i) {switch (displaycolor) {case 4:// помещаем ноль 0 в значение массива, чтобы настроить цвет пиков if (colors [displaycolor] [i]> 0) {// нормальный цвет, определенный на цветовом массиве pixel.setPixelColor (led, Wheel (colors [displaycolor] [i])); } else {// пользовательский цвет для пиков только с 0 в значении массива pixel.setPixelColor (led, 255, 255, 255); // Номер светодиода, значения R, G, B} break; case 5:// меняем цвет по столбцу pixel.setPixelColor (led, Wheel (x * 16)); ломать; case 6:// меняем цвет по строке pixel.setPixelColor (led, Wheel (i * 36)); ломать; по умолчанию:// цвет дисплея установлен -> displaycolor от 0 до 3 // цвет определяется на цветовом массиве pixel.setPixelColor (led, Wheel (colors [displaycolor] [i])); } // КОНЕЦ ПЕРЕКЛЮЧЕНИЯ} else {pixel.setPixelColor (led, 0); }}} // =================================================================нулевой светодиод внизу справа (входной разъем справа) // входное значение:x =0-31, y =0-7, возврат номера светодиода от 0 до 255 // ========================================================================байт GetLedFromMatrix (байт x, байт y) {x =xres - x - 1; if (x &0x01) {// Нечетные столбцы увеличиваются в обратном направлении return ((x + 1) * yres - y - 1); } else {// Четные столбцы обычно увеличиваются return ((x + 1) * yres - yres + y); }} // ========================================================================void displaycolorChange () {int reading =digitalRead (buttonPin); if (reading ==HIGH &&previousState ==LOW &&millis () - lastDebounceTime> debounceDelay) // работает только при нажатии {displaycolor ++; если (displaycolor> 6) displaycolor =0; lastDebounceTime =миллис (); } previousState =reading;} / * Утилита из демонстрационного скетча Adafruit Neopixel. Введите значение от 0 до 255, чтобы получить значение цвета. Цвета представляют собой переход R - G - B - обратно к R. * / Unsigned long Wheel (byte WheelPos) {WheelPos =255 - WheelPos; if (WheelPos <85) {return pixel.Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos - =85; вернуть pixel.Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos - =170; return pixel.Color (WheelPos * 3, 255 - WheelPos * 3, 0);} 

Изготовленные на заказ детали и корпуса

arduino_rgb_audio_analyzer_lX4Dv4Pta2.zip

Схема


Производственный процесс

  1. Анализатор звукового спектра 32 (Linier) / 11 (псевдо-лог) диапазона
  2. Сигнал тревоги для растений, предупреждающий о жажде
  3. Итальянские часы со словами
  4. Счетчик кВтч Sigfox
  5. Монитор температуры Bluetooth
  6. Блокировка, управляемая жестами
  7. Компаньон IC
  8. USB-MIDI-адаптер
  9. Изолированный аналоговый вход для Arduino
  10. Измерьте время реакции