【花雕体验】17 Beetle ESP32C3与WS2812的音乐可视化频谱灯-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

【花雕体验】17 Beetle ESP32C3与WS2812的音乐可视化频谱灯

[复制链接]
 楼主| 发表于 2022-7-10 07:39 | 显示全部楼层
实验串口绘图器返回情况


17.2-29.jpg
 楼主| 发表于 2022-7-10 08:06 | 显示全部楼层
实验场景图


17.2-30.jpg
 楼主| 发表于 2022-7-10 09:01 | 显示全部楼层
  【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯
  实验程序二:简易测量环境声级
  模块接线:
  MAX9814  Beetle ESP32C3
  VCC            5V
  GND            GND
  OUT            A0

  1. /*
  2.   【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯
  3.   实验程序二:简易测量环境声级
  4.   模块接线:
  5.   MAX9814  Beetle ESP32C3
  6.   VCC            5V
  7.   GND            GND
  8.   OUT            A0
  9. */

  10. const int sampleWindow = 50; // 以mS为单位的采样窗口宽度(50 mS = 20Hz)   
  11. unsigned int sample;

  12. void setup() {
  13.    Serial.begin(115200);
  14.    pinMode(A0,INPUT);
  15. }

  16. void loop() {
  17.    unsigned long startMillis= millis();  // 样本窗口的开始
  18.    unsigned int peakToPeak = 0;   // 峰峰值

  19.    unsigned int signalMax = 0;
  20.    unsigned int signalMin = 3600;

  21.    // collect data for 50 mS
  22.    while (millis() - startMillis < sampleWindow)
  23.    {
  24.       sample = analogRead(A0);
  25.       if (sample < 3600)  // 抛出错误的读数
  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) / 170;  

  39.    Serial.println(volts);
  40. }
复制代码


 楼主| 发表于 2022-7-10 09:03 | 显示全部楼层
实验串口绘图器返回情况(环境噪音)


17.2-31.jpg
 楼主| 发表于 2022-7-10 09:07 | 显示全部楼层
实验串口绘图器返回情况(时事播音)


17.2-32.jpg
发表于 2022-7-10 16:48 | 显示全部楼层
MAX9814麦克风放大器模块很好用呀。
 楼主| 发表于 2022-7-10 17:29 | 显示全部楼层
topdog 发表于 2022-7-10 16:48
MAX9814麦克风放大器模块很好用呀。

是啊,几元的,挺好用
 楼主| 发表于 2022-7-10 18:43 | 显示全部楼层
  【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯
  实验程序三:通过快速傅里叶变换在ws2812b灯板上显示频谱

  1. /*
  2.   【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯
  3.   实验程序三:通过快速傅里叶变换在ws2812b灯板上显示频谱
  4. */

  5. #include  "arduinoFFT.h"
  6. #include <FastLED.h>   

  7. #define NUM_LEDS 256   
  8. #define LED_TYPE WS2812
  9. #define COLOR_ORDER GRB

  10. arduinoFFT FFT = arduinoFFT();
  11. CRGB leds[NUM_LEDS];           

  12. #define CHANNEL A0
  13. #define DATA_PIN 6

  14. const uint8_t max_bright = 2;         
  15. const uint16_t samples = NUM_LEDS / 4;
  16. const byte halfsamples = samples / 2;  
  17. uint8_t gHue;                          
  18. int value;                             
  19. double vReal[samples];                 
  20. double vImag[samples];                 
  21. char toData[halfsamples];              

  22. int pointJump[halfsamples];
  23. int uJump[halfsamples];     
  24. int dJump[halfsamples];   

  25. int uValue;                 
  26. int dValue;                 
  27. int tValue;                 
  28. int toDown = 0;            
  29. uint8_t toDownSpeed = 3;   
  30. int pointDown = 0;         
  31. uint8_t pointDownSpeed = 9;

  32. void setup(){
  33.   delay(100);              
  34.   Serial.println("Ready");
  35.   FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  36.   FastLED.setBrightness(max_bright);
  37. }

  38. void loop(){
  39.   FastLED.clear();                        
  40.   EVERY_N_MILLISECONDS(10) {
  41.     gHue += 10;  
  42.   }
  43.   for (int i = 0; i < samples; i++)        
  44.   {
  45.     value = analogRead(CHANNEL);
  46.     vReal[i] = value;      
  47.     vImag[i] = 0.0;         
  48.   }
  49.   
  50.   FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  51.   FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
  52.   FFT.ComplexToMagnitude(vReal, vImag, samples);
  53.   
  54.   for (int i = 0; i < halfsamples; i++)
  55.   {
  56.     toData[i] = vReal[i + halfsamples / 2];   
  57.     toData[i] = constrain(toData[i], 0, 100);
  58.     toData[i] = map(toData[i], 0, 100, 1, 7);
  59.   }
  60.   for (int i = 0; i < halfsamples; i++)
  61.   {
  62.     uValue = toData[i];   
  63.     uJump[i]++;            
  64.     if (uValue > uJump[i])
  65.     {
  66.       uValue = uJump[i];
  67.     }
  68.     else
  69.     {
  70.       uJump[i] = uValue;
  71.     }
  72.     dValue = uValue;
  73.     toDown++;                     
  74.     if (toDown % toDownSpeed == 0)
  75.     {
  76.       dJump[i]--;
  77.       toDown = 0;
  78.     }
  79.     if (dValue > pointJump[i])
  80.     {
  81.       dJump[i] = dValue;
  82.     }
  83.     else
  84.     {
  85.       dValue = dJump[i];
  86.     }
  87.     tValue = uValue;                     
  88.     pointDown++;                        
  89.     if (pointDown % pointDownSpeed == 0)
  90.     {
  91.       pointJump[i]--;
  92.       pointDown = 0;  
  93.     }
  94.     if (tValue > pointJump[i])
  95.     {
  96.       pointJump[i] = tValue;
  97.     }
  98.     else
  99.     {
  100.       tValue = pointJump[i];
  101.     }
  102.     fill_rainbow(leds + 8 * i, uValue, gHue, 30);
  103.     fill_rainbow(leds + 8 * i, dValue, gHue, 30);
  104.     fill_solid(leds + 8 * i + tValue, 1, CRGB::White);
  105.    
  106.   }
  107.   FastLED.show();
  108.   delay(10);      
  109. }
复制代码


 楼主| 发表于 2022-7-10 18:47 | 显示全部楼层
实验场景图


17.2-33.jpg
 楼主| 发表于 2022-7-10 18:52 | 显示全部楼层
实验的视频记录


https://v.youku.com/v_show/id_XN ... hcb.playlsit.page.1



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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:34 , Processed in 0.089338 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表