193浏览
查看: 193|回复: 24

[MP动手做] 【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试

[复制链接]
本帖最后由 驴友花雕 于 2022-7-19 06:12 编辑

MAX9814
是一款低成本高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。器件具有低噪声前端放大器、可变增益放大(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。
●自动增益控制(AGC)
●3种增益设置(40dB、50dB、60dB)
●可编程动作时间
●可编程动作和释放时间比
●电源电压范围2.7V~5.5V  
●低THD:0.04% (典型值)
●低功耗关断模式
●内置2V低噪声麦克风偏置


01.jpg

驴友花雕  初级技神
 楼主|

发表于 2022-7-20 20:40:39

  【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  实验程序四:MegunoLink音乐反应式LED灯带
  模块接线:WS2812B接D9
  MAX9814   ESP32_C3
  VCC          5V
  GND         GND
  OUT       D4(ADC4)

  1. /*
  2.   【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  3.   实验程序四:MegunoLink音乐反应式LED灯带
  4.   模块接线:WS2812B接D9
  5.   MAX9814   ESP32_C3
  6.   VCC          5V
  7.   GND         GND
  8.   OUT       D4(ADC4)
  9. */
  10. #include<FastLED.h>
  11. #include<MegunoLink.h>
  12. #include<Filter.h>
  13. // define necessary parameters
  14. #define N_PIXELS  24
  15. #define MIC_PIN   4
  16. #define LED_PIN   9
  17. // the following parameters can be tweaked according to your audio levels
  18. #define NOISE 150
  19. #define TOP   (N_PIXELS+2) // allow the max level to be slightly off scale
  20. #define LED_TYPE  WS2811
  21. #define BRIGHTNESS  18     // a little dim for recording purposes
  22. #define COLOR_ORDER GRB
  23. // declare the LED array
  24. CRGB leds[N_PIXELS];
  25. // define the variables needed for the audio levels
  26. int lvl = 0, minLvl = 0, maxLvl = 100; // tweak the min and max as needed
  27. // instantiate the filter class for smoothing the raw audio signal
  28. ExponentialFilter<long> ADCFilter(5,0);
  29. void setup() {
  30.   // put your setup code here, to run once:
  31.   Serial.begin(115200);
  32.   // initialize the LED object
  33.   FastLED.addLeds<LED_TYPE,LED_PIN,COLOR_ORDER>(leds,N_PIXELS).setCorrection(TypicalLEDStrip);
  34.   FastLED.setBrightness(BRIGHTNESS);
  35. }
  36. void loop() {
  37.   // put your main code here, to run repeatedly:
  38.   // read the audio signal and filter it
  39.   int n, height;
  40.   n = analogRead(MIC_PIN);
  41.   // remove the MX9614 bias of 1.25VDC
  42.   n = abs(1023 - n);
  43.   // hard limit noise/hum
  44.   n = (n <= NOISE) ? 0 : abs(n - NOISE);
  45.   // apply the exponential filter to smooth the raw signal
  46.   ADCFilter.Filter(n);
  47.   lvl = ADCFilter.Current();
  48. //  // plot the raw versus filtered signals
  49. //  Serial.print(n);
  50. //  Serial.print(" ");
  51. //  Serial.println(lvl);
  52.   // calculate the number of pixels as a percentage of the range
  53.   // TO-DO: can be done dynamically by using a running average of min/max audio levels
  54.   height = TOP * (lvl - minLvl) / (long)(maxLvl - minLvl);
  55.   if(height < 0L) height = 0;
  56.   else if(height > TOP) height = TOP;
  57.   // turn the LEDs corresponding to the level on/off
  58.   for(uint8_t i = 0; i < N_PIXELS; i++) {
  59.     // turn off LEDs above the current level
  60.     if(i >= height) leds[i] = CRGB(0,0,0);
  61.     // otherwise, turn them on!
  62.     else leds[i] = Wheel( map( i, 0, N_PIXELS-1, 30, 150 ) );
  63.   }
  64.   FastLED.show();
  65. }
  66. CRGB Wheel(byte WheelPos) {
  67.   // return a color value based on an input value between 0 and 255
  68.   if(WheelPos < 85)
  69.     return CRGB(WheelPos * 3, 255 - WheelPos * 3, 0);
  70.   else if(WheelPos < 170) {
  71.     WheelPos -= 85;
  72.     return CRGB(255 - WheelPos * 3, 0, WheelPos * 3);
  73.   } else {
  74.     WheelPos -= 170;
  75.     return CRGB(0, WheelPos * 3, 255 - WheelPos * 3);
  76.   }
  77. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 12:41:43

  【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  实验程序二:声级测量
  模块接线:
  MAX9814   ESP32_C3
  VCC          5V
  GND         GND
  OUT       4(ADC4)

  1. /*
  2.   【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  3.   实验程序二:声级测量
  4.   模块接线:
  5.   MAX9814   ESP32_C3
  6.   VCC          5V
  7.   GND         GND
  8.   OUT       4(ADC4)
  9. */
  10. const int sampleWindow = 50; // 以mS为单位的采样窗口宽度(50 mS = 20Hz)
  11. unsigned int sample;
  12. void setup() {
  13.   Serial.begin(9600);
  14.   pinMode(4, INPUT);
  15. }
  16. void loop() {
  17.   unsigned long startMillis = millis(); // 样本窗口的开始
  18.   unsigned int peakToPeak = 0;   // 峰峰值
  19.   unsigned int signalMax = 0;
  20.   unsigned int signalMin = 3000;
  21.   // collect data for 50 mS
  22.   while (millis() - startMillis < sampleWindow)
  23.   {
  24.     sample = analogRead(4);
  25.     if (sample < 3000)  // 抛出错误的读数
  26.     {
  27.       if (sample > signalMax)
  28.       {
  29.         signalMax = sample;  // 只保存最大级别
  30.       }
  31.       else if (sample < signalMin)
  32.       {
  33.         signalMin = sample;  // 仅保存最低级别
  34.       }
  35.     }
  36.   }
  37.   peakToPeak = signalMax - signalMin;  // max-min =峰峰值幅度
  38.   double volts = (peakToPeak * 5.0) / 50;  // 转换为伏特
  39.   Serial.println(volts);
  40. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-20 09:34:20

  【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  实验程序三:点亮LED—WS2812FX自动模式循环20种

  1. /*
  2.   【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  3.   实验程序三:点亮LED—WS2812FX自动模式循环20种
  4.   模块接线:WS2812B接D9
  5.   MAX9814   ESP32_C3
  6.   VCC          5V
  7.   GND         GND
  8.   OUT       D4(ADC4)
  9. */
  10. #include <WS2812FX.h>
  11. #define LED_COUNT 256
  12. #define LED_PIN    9
  13. #define TIMER_MS 5000
  14. WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
  15. unsigned long last_change = 0;
  16. unsigned long now = 0;
  17. void setup() {
  18.   ws2812fx.init();
  19.   ws2812fx.setBrightness(28);
  20.   ws2812fx.setSpeed(1000);
  21.   ws2812fx.setColor(0x007BFF);
  22.   ws2812fx.setMode(FX_MODE_STATIC);
  23.   ws2812fx.start();
  24. }
  25. void loop() {
  26.   now = millis();
  27.   ws2812fx.service();
  28.   if(now - last_change > TIMER_MS) {
  29.     ws2812fx.setMode((ws2812fx.getMode() + 1) % ws2812fx.getModeCount());
  30.     last_change = now;
  31.   }
  32. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 06:29:59

WS2812B主要特点
智能反接保护,电源反接不会损坏IC。
IC控制电路与LED点光源公用一个电源。
控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
内置上电复位和掉电复位电路。
每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
串行级联接口,能通过一根信号线完成数据的接收与解码。
任意两点传传输距离在不超过5米时无需增加任何电路。
当刷新速率30帧/秒时,级联数不小于1024点。
数据发送速度可达800Kbps。
光的颜色高度一致,性价比高。

主要应用领域
LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。
LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯。


02.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 06:37:21

本帖最后由 驴友花雕 于 2022-7-19 06:56 编辑

03.jpg


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 06:56:40

04.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 07:09:47

05.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 07:10:49

06.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 07:12:09

WS2812模块电原理图


07.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 07:15:59

合宙CORE ESP32-C3核心板,是基于乐鑫ESP32-C3芯片进行设计的一款开发板。尺寸仅有21mm×51mm,板边采用邮票孔设计,板载 Wi-Fi/BLE天线,方便开发者在不同场景下的使用。核心板支持UART、GPIO、SPI、I2C、ADC、PWM等接口,可根据实际需要选用。

主要特色
(1)功能强,应用广
合宙ESP32-C3开发板高集成化设计,板载 Wi-Fi/BLE天线、4MB Flash,支持UART、GPIO、SPI、I2C、ADC、PWM等接口,满足大多数应用;板载CH343P芯片实现更高速率的USB转串口,固件下载更快更稳。
(2)用料足,信号好
合宙ESP32-C3开发板采用4层PCB,板载2.4G天线,经过调试达到了比较好的使用效果。实测2.38到2.48GHz范围内的驻波比(VSWR)值比较好,能够有效的将发射功率辐射到无线空间。
(3)多样化开发更便捷
合宙ESP32-C3开发板目前支持:LuatOS/乐鑫IDF/Arduino/MicroPython等多样化开发方式,使用更便捷。LuatOS固件在社区大神梦程的努力下现已支持以下功能,其他内容正在不断更新。

08.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 07:20:22

合宙CORE ESP32-C3核心板 IO引脚

1路SPI FLASH,板载4MB,支持最高 16MB
2路UART接口,UART0~UART1,其中下载口为UART0
6 路 12 比特 ADC,最高采样率 100KSPS
1路低速SPI接口,支持主模式
1路IIC控制器
4路PWM接口
GPIO外部管脚15路,可复用
2路贴片LED指示灯
1路复位按键+1路BOOT按键
1路USB转TTL下载调试口
2.4G PCB板载天线

09.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 09:16:17

  【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  实验程序一:简单测试MAX9814麦克风放大器模块
  模块接线:
  MAX9814   ESP32_C3
  VCC          5V
  GND         GND
  OUT       4(ADC4)

  1. /*
  2.   【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
  3.   实验程序一:简单测试MAX9814麦克风放大器模块
  4.   模块接线:
  5.   MAX9814   ESP32_C3
  6.   VCC          5V
  7.   GND         GND
  8.   OUT       4(ADC4)
  9. */
  10. void setup() {
  11.   Serial.begin(9600);
  12.   pinMode(4, INPUT);
  13. }
  14. void loop() {
  15.   Serial.println(analogRead(4));
  16.   delay(1000);
  17. }
复制代码


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 09:19:15

实验串口返回情况

10.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 09:30:10

打开Arduino IDE——工具——串口绘图器,查看实验波形

11.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 09:33:52

实验串口绘图器返回情况(实测环境噪音的波形)

12.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 09:37:22

实验串口绘图器返回情况(实测播放音乐<当中部分>的波形)


13.jpg


回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 10:28:46

实验场景图

14.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 12:43:41

实验串口绘图器返回情况

15.jpg
回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-19 15:10:26

搭配的第二款数字声音模块INMP441(实物还在快递路上)

16.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-20 09:54:04

实验场景图
17.jpg

回复

使用道具 举报

驴友花雕  初级技神
 楼主|

发表于 2022-7-20 11:15:46

回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail