• 【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试


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

    在这里插入图片描述

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

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

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    WS2812模块电原理图

    在这里插入图片描述

    合宙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固件在社区大神梦程的努力下现已支持以下功能,其他内容正在不断更新。

    在这里插入图片描述
    合宙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板载天线

    在这里插入图片描述

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

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

    实验串口返回情况

    在这里插入图片描述
    打开Arduino IDE——工具——串口绘图器,查看实验波形

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    实验场景图

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

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

    实验串口绘图器返回情况

    在这里插入图片描述

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

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

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

    实验场景图

    在这里插入图片描述

    实验的视频记录

    https://v.youku.com/v_show/id_XNTg4ODEwMjEyNA==.html?spm=a2hcb.playlsit.page.1

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

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

    实验场景图 动态图

    在这里插入图片描述

    实验的视频记录(21秒)

    https://v.youku.com/v_show/id_XNTg4NzI0MzU0NA==.html?spm=a2hcb.playlsit.page.1

    实验的视频记录(4分28秒)

    https://v.youku.com/v_show/id_XNTg4ODI4Nzc1Mg==.html?spm=a2hcb.playlsit.page.5

    (待续)

  • 相关阅读:
    弘辽科技:淘宝中秋过后还有什么活动?活动怎么策划好?
    我是如何构建自己的笔记系统的?
    自定义校验器注解
    Zebec节点Zepoch销量接近800个,生态发展信心十足
    瑞吉外卖学习笔记4
    element plus 的图片上传组件回显
    【傻瓜式教程】Windows下安装Hive MySQL版【附安装Hadoop教程】全网最详细的图文教程
    Mysql数据库索引
    用于设计和分析具有恒定近心点半径的低推力螺旋轨迹研究(Matlab代码实现)
    系统集成|第九章(笔记)
  • 原文地址:https://blog.csdn.net/weixin_41659040/article/details/125863882