亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

32(线性)/11(伪对数)频段音频频谱分析仪

组件和用品

Arduino Nano R3
× 1
电阻 10k ohm
× 1
电阻 100k ohm
× 2
电阻 4.75k ohm
× 3
跳线(通用)
× 1
面包板(通用)
× 1
USB-A 转 Mini-USB 线缆
× 1
触觉开关,顶部驱动
× 1
Male-Header 36 Position 1 Row- Long (0.1")
× 1

必要的工具和机器

烙铁(通用)

应用和在线服务

Arduino IDE

关于这个项目

这是我第一次尝试构建 arduino 项目。我对任何关于音频项目的东西都很感兴趣。找到了 Shajeeb 的 Audio Visualizer,我试图让显示器上的比例不同。有点对数,但我只是在 Excel 下制作一些(对数/指数)表,并在项目代码中手动实现数据映射。

添加/修改按钮改变显示:单条(线性刻度显示/双条-伪日志)。

希望你喜欢它,享受构建。

代码

  • 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.inoArduino
随意修改/定制以满足您的需要,在我的定制部分代码上(重新映射数据,用注释标记)。
// Christian Suryanto 修改的代码,来自 (c) 2019 Shajeeb TM// HAZI TECH/ / 由 Christian Suryanto 更新// #include #include #include #include #define HARDWARE_TYPE MD_MAX72XX::FC16_HW // 设置显示类型以便 MD_MAX72xx库正确地将其树状#define CLK_PIN 13 // 与显示器通信的时钟引脚#define DATA_PIN 11 // 与显示器通信的数据引脚#define CS_PIN 10 // 与显示器通信的控制引脚#define SAMPLES 64 // 必须是电源of 2#define MAX_DEVICES 4 // 显示模块总数#define xres 32 // 显示总列数,必须<=SAMPLES/2#define yres 8 // 显示总行数#define PREV 0xFF02FD // 地址是 FFA25D 但添加了 0x 因为这是告诉 arduino 它是 HEXADECIMAL.#define NEXT 0xFFC23D // 控制停止代码#define PWR 0xFFA25D // 控制 Powerint audio_response =35; // 输入 10 到 80 之间的值。数字越小,音频响应越高double vReal[SAMPLES];//double vReal2[SAMPLES];double vImag[SAMPLES];char data_avgs[xres];int yvalue;int displaycolumn , displayvalue;int peaks[xres];const int buttonPin =6; // 按钮 pinint state =HIGH; // 从输入 pinint previousState =LOW 的当前读数; // 之前从输入 pinint 读取的显示模式; unsigned long lastDebounceTime =0; // 上次切换输出引脚无符号长 debounceDelay =50; // 去抖动时间;如果输出闪烁则增加 MY_ARRAY[]={0, 128, 192, 224, 240, 248, 252, 254, 255}; // default =标准模式//int MY_MODE_1[]={0, 128, 192, 224, 240, 248, 252, 254, 255}; // 标准模式//int MY_MODE_2[]={0, 128, 64, 32, 16, 8, 4, 2, 1}; // 只有峰值模式//int MY_MODE_3[]={0, 128, 192, 160, 144, 136, 132, 130, 129}; // 只有峰值 + 谷值//int MY_MODE_4[]={0, 128, 192, 160, 208, 232, 244, 250, 253}; // 顶部有一个间隙,第 3 盏灯向前bool EQ_ON =true; // 设置为 false 以禁用 eqbyte eq1[32] ={40, 45, 50, 60, 65, 70, 75, 95, 110, 110, 110, 110, 110, 110, 110, 110, 130, 13 130, 130, 130, 130, 130, 130, 145, 155, 170, 180, 215, 220, 245, 255 };byte eq2[11] ={40, 70, 75, 10, 110, 15 220, 220, 230, 250};MD_MAX72XX mx =MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // 显示对象arduinoFFT FFT =arduinoFFT(); // FFT 对象 void setup() { EEPROM.update(1,1); //(内存地址,值),第一次运行 displaymode =EEPROM.read(1); //显示模式 =1; ADCSRA =0b11100101; // 将 ADC 设置为自由运行模式并将预标量设置为 32 (0xe5) ADMUX =0b00000000; // 使用引脚 A0 和外部电压参考 pinMode(buttonPin, INPUT); mx.begin(); // 初始化显示 mx.control(MD_MAX72XX::INTENSITY, 0); // 设置 LED 强度延迟 (50); // 等待参考电压稳定} void loop() { // ++ Sampling int numData;双 rSum; for(int i=0; i peaks[i]) peaks[i] =yvalue; yvalue =峰值[i]; displayvalue=MY_ARRAY[yvalue]; switch (displaymode) { case 1:{ displaycolumn=31-i; mx.setColumn(displaycolumn, displayvalue); // 从左到右 } break;情况 2:{ displaycolumn=31-(3*i); mx.setColumn(displaycolumn-1, displayvalue); // 从左到右 mx.setColumn(displaycolumn, displayvalue); // 从左到右 } break; } } // -- 根据测量值发送显示 displayModeChange(); // 检查按钮是否按下以改变显示模式}void displayModeChange() { int reading =digitalRead(buttonPin); if (reading ==HIGH &&previousState ==LOW &&millis() - lastDebounceTime> debounceDelay) // 仅在按下时有效 { switch (displaymode) { case 1:// 从模式 1 移动到模式 2 displaymode =2; mx.clear();延迟(200); EEPROM.update(1,2);休息; case 2:// 从模式 2 移动到模式 3 displaymode =1; mx.clear();延迟(200); EEPROM.update(1,1);休息; } lastDebounceTime =毫秒(); } previousState =阅读;}

示意图


制造工艺

  1. 干渴警报植物警报
  2. 意大利字时钟
  3. 4x3 键盘只有三个引脚
  4. Sigfox kWh Meter
  5. 蓝牙温度监视器
  6. DIY 简易自动量程电容计 (10pF-10000microF)
  7. 手势控制锁
  8. 伴侣 IC
  9. USB MIDI 适配器
  10. Arduino 的隔离模拟输入
  11. RGB 32-Band Audio Spectrum Visualizer
  12. 测量你的反应时间