回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【Arduino 动手做】如何DIY 32波段LED音频音乐频谱分析仪 简单

头像 驴友花雕 2025.06.22 3 0

今天我们将使用 Arduino 在家制作一个 32 波段 LED 音频音乐频谱分析仪,它可以显示频谱并同时播放音乐。

max7219LED必须接在100k电阻前面,否则扬声器的噪音会很大。

► GitHub(方案和草图):https://github.com/DKARDU/spectrum-

► 组件

该项目使用了以下部件:

Arduino Nano,https://amzn.to/3hB8Pwf

两个 100K 电阻,https://amzn.to/2OSGlBW

三个 4.7K 电阻,https://amzn.to/2OSGlBW

两个104电容(104=100000pF=100nF=0.10μF),

4 合 1 Max7219 点阵 LED,https://amzn.to/3jcCL2G

PJ-320D 3.5MM音频插座,

跳线,https://amzn.to/3jCHhZd

面包板,https://amzn.to/33yEavN

3W PAM8403 D类音频放大器和两个扬声器,

使用的Arduino IDE版本是1.8.12

 

00.jpg
01.jpg
circuit_diagram_9yjxhbMsQW.jpg

项目代码

 

代码
#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#define SAMPLES 64
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES  4
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10
#define  xres 32
#define  yres 8
int MY_ARRAY[] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue;
int displaycolumn , displayvalue;
int peaks[xres];
int pinCS = 10;
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();
void setup() {
  ADCSRA = 0b11100101;
  ADMUX = 0b00000000;
  mx.begin();
  delay(50);
}
void loop() {

    
    for (int i = 0; i < SAMPLES; i++)
    {
      while (!(ADCSRA & 0x10));
      ADCSRA = 0b11110101 ;
      int value = ADC - 512 ;
      vReal[i] = value / 8;
      vImag[i] = 0;
    }
    FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
    FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
    FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
    int step = (SAMPLES / 2) / xres;
    int c = 0;
    for (int i = 0; i < (SAMPLES / 2); i += step)
    {
      data_avgs[c] = 0;
      for (int k = 0 ; k < step ; k++) {
        data_avgs[c] = data_avgs[c] + vReal[i + k];
      }
      data_avgs[c] = data_avgs[c] / step;
      c++;
    }

    for (int i = 0; i < xres; i++)
    {
      data_avgs[i] = constrain(data_avgs[i], 0, 40);
      data_avgs[i] = map(data_avgs[i], 0, 40, 0, yres);
      yvalue = data_avgs[i];

      peaks[i] = peaks[i] - 1;
      if (yvalue > peaks[i])
        peaks[i] = yvalue ;
      yvalue = peaks[i];
      displayvalue = MY_ARRAY[yvalue];
      displaycolumn = 31 - i;
      mx.setColumn(displaycolumn, displayvalue);
    }
  }

【Arduino 动手做】如何DIY 32波段LED音频音乐频谱分析仪
项目链接:https://www.hackster.io/DKARDU/how-to-diy-32-band-led-audio-music-spectrum-analyzer-4d63d9
项目作者:德卡杜

项目视频 :https://hackster.imgix.net/uploads/attachments/1203962/mp3_hpVUzkkO9R. gif?auto=format%2Ccompress&gifq=35&w=900&h=675&fit=min&fm=mp4
项目代码:https://github.com/DKARDU/spectrum-

 

00169--.gif

评论

user-avatar
icon 他的勋章
    展开更多