锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2022-08-15 11:00:01 3600电阻le154电容灯条10mm连接器10灯条连接器

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

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

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


Beetle ESP32-C3是一款基于ESP32-C3 RISC-V 32位单核处理器芯片的主控板,专为物联网 (IoT) 设备设计。Beetle ESP32-C3仅硬币大小的体积上,多达13个IO制作项目时不用担心IO当口腔不足时,主控板还集成了锂电池的充电管理功能,无需外围模块即可直接连接锂电池,保证了应用体积和安全性。Beetle ESP32-C3在不增加太大体积的情况下,积的情况下,产生更多的电源,在生产项目时焊接更方便,板载GDI使用屏幕时,显示接口题。

Beetle ESP32-C3支持Wi-Fi 和 Bluetooth 5 (LE) 双模通信降低了设备配网难度,支持蓝牙 Mesh (Bluetooth Mesh) 协议和乐鑫 Wi-Fi Mesh适用于广泛的物联网应用场景,可实现更高的通信稳定性和更大的覆盖面积。Beetle ESP32-C3有详细的示例教程,可以轻松使用控制器的无线功能,连接阿里云IFTTT同时等待物联网平台DFRobot商场提供数千种传感器和执行器,这些传感器和执行器也有详细的教程,所以你可以很容易地建立自己的物联网系统。

Beetle ESP32-C3接口引脚
数字I/O x13
LED PWM 控制器 6个通道
SPI x1
UART x2
I2C x1
I2S x1
红外收发器:发送通道 x2、接收通道 x2.(任意管脚)
2 × 12 位 SAR 模/数转换器, 6 个通道
DMA 控制器,3 个接收通道和 3 个发送通道

实验中使用的引脚是A0和D6

MAX9814
是美信公司生产的带AGC控制麦克放大模块非常适合各种麦克放大和控制电路的前部。外围只有不到10个元件,才能满足普通用户的需求。麦克放大在0-8米之间,以确保输出电平保持近似。是简单替代复杂麦克控制电路的代表作。MAX9814是一种低成本、高质量的麦克风放大器,具有自动增益控制(AGC)偏置低噪声麦克风。该装置具有低噪声前置放大器,可变增益放大器(VGA),麦克风偏置电压发生器和输出放大器AGC控制电路。

低噪声前放大器具有固定的12dB增益,而VGA根据输出电压和输出电压的增加AGC阈值自动从20dB调整至0dB。提供8个输出放大器dB,18dB和28dB可选增益。放大器级联会在没有压缩的情况下,总增益为40dB,50dB或60dB。三级数字输入编程输出放大器的增益。外部电阻分压器控制AGC阈值,单个电容器设置启动/释放时间。起效时间与释放时间的比率可设置为三级数字输入。AGC保持时间固定为30ms。低噪声麦克风偏置电压发生器可以偏置大多数驻极体麦克风。

MAX9814采用14引脚节省空间TDFN包装。该装置的额定温度范围为-40°C至 85°C。

MAX9814主要特征
自动增益控制(AGC)
三种增益设置(40dB,50dB,60dB)
可编程攻击时间
可编程攻击和释放率
2.7V至5.5V电源电压范围
30nV /低输入参考噪声密度
低总谐波失真(THD):0.04%(典型值)
低功耗关机模式
内部低噪声麦克风偏置,2V
节省空间的14引脚TDFN(3mm×3mm)封装
-40°C至 85°C扩大温度范围


模块电原理图



【花雕体验】17 Beetle ESP32C3与WS2812屏幕音乐可视化节奏灯
实验程序一:测试MAX9814麦克风放大器模块
模块接线:
MAX9814 Beetle ESP32C3
VCC 5V
GND GND
OUT A0

/* 【花雕体验】17 Beetle ESP32C3与WS2812屏幕音乐可视化节奏灯 实验程序一:测试MAX9814麦克风放大器模块 模块接线: MAX9814 Beetle ESP32C3 VCC 5V GND GND OUT A0 */  void setup() { 
          Serial.begin(9600);   pinMode(A0, INPUT); }  void loop() { 
          Serial.println(analogRead(A0));   delay(100); } 

实验串口返回

打开Arduino IDE——检查实验波形

实验串口绘图器返回情况

实验场景图

【花雕体验】17 Beetle ESP32C3与WS2812屏幕音乐可视化节奏灯
实验程序二:简单测量环境声级
模块接线:
MAX9814 Beetle ESP32C3
VCC 5V
GND GND
OUTA0

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

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

void setup() { 
       
   Serial.begin(115200);
   pinMode(A0,INPUT); 
}

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

   unsigned int signalMax = 0;
   unsigned int signalMin = 3600;

   // collect data for 50 mS
   while (millis() - startMillis < sampleWindow)
   { 
       
      sample = analogRead(A0);
      if (sample < 3600)  // 抛出错误的读数
      { 
       
         if (sample > signalMax)
         { 
       
            signalMax = sample;  // 只保存最大级别
         }
         else if (sample < signalMin)
         { 
       
            signalMin = sample;  // 仅保存最低级别
         }
      }
   }
   peakToPeak = signalMax - signalMin;  // max-min =峰峰值幅度
   double volts = (peakToPeak * 5.0) / 170;  

   Serial.println(volts);
}

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

实验串口绘图器返回情况(时事播音)


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

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

#include "arduinoFFT.h" 
#include  

#define NUM_LEDS 256 
#define LED_TYPE WS2812 
#define COLOR_ORDER GRB 

arduinoFFT FFT = arduinoFFT(); 
CRGB leds[NUM_LEDS];           

#define CHANNEL A0 
#define DATA_PIN 6 

const uint8_t max_bright = 2;          
const uint16_t samples = NUM_LEDS / 4;
const byte halfsamples = samples / 2;  
uint8_t gHue;                          
int value;                             
double vReal[samples];                 
double vImag[samples];                 
char toData[halfsamples];              

int pointJump[halfsamples]; 
int uJump[halfsamples];     
int dJump[halfsamples];    

int uValue;                 
int dValue;                 
int tValue;                 
int toDown = 0;             
uint8_t toDownSpeed = 3;    
int pointDown = 0;          
uint8_t pointDownSpeed = 9; 

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

void loop(){ 
       
  FastLED.clear();                         
  EVERY_N_MILLISECONDS(10) { 
       
    gHue += 10;  
  }
  for (int i = 0; i < samples; i++)        
  { 
       
    value = analogRead(CHANNEL); 
    vReal[i] = value;       
    vImag[i] = 0.0;         
  }
  
  FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
  FFT.ComplexToMagnitude(vReal, vImag, samples);
  
  for (int i = 0; i < halfsamples; i++) 
  { 
       
    toData[i] = vReal[i + halfsamples / 2];   
    toData[i] = constrain(toData[i], 0, 100); 
    toData[i] = map(toData[i], 0, 100, 1, 7); 
  }
  for (int i = 0; i < halfsamples; i++) 
  { 
       
    uValue = toData[i];    
    uJump[i]++;            
    if (uValue > uJump[i]) 
    { 
       
      uValue = uJump[i]; 
    }
    else
    { 
       
      uJump[i] = uValue;
    }
    dValue = uValue; 
    toDown++;                      
    if (toDown % toDownSpeed == 0) 
    { 
       
      dJump[i]--; 
      toDown = 0; 
    }
    if (dValue > pointJump[i]) 
    { 
       
      dJump[i] = dValue; 
    }
    else
    { 
       
      dValue = dJump[i]; 
    }
    tValue = uValue;                     
    pointDown++;                         
    if (pointDown % pointDownSpeed == 0) 
    { 
       
      pointJump[i]--; 
      pointDown = 0;  
    }
    if (tValue > pointJump[i]) 
    { 
       
      pointJump[i] = tValue; 
    }
    else
    { 
       
      tValue = pointJump[i]; 
    }
    fill_rainbow(leds + 8 * i, uValue, gHue, 30);
    fill_rainbow(leds + 8 * i, dValue, gHue, 30);
    fill_solid(leds + 8 * i + tValue, 1, CRGB::White);
    
  }
  FastLED.show(); 
  delay(10);      
}

实验场景图

实验的视频记录

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

【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯
实验程序四:MegunoLink音乐反应式LED灯带
模块接线:WS2812B接D6
MAX9814 ESP32_C3
VCC 5V
GND GND
OUT A0

/* 【花雕体验】17 Beetle ESP32C3与WS2812屏音乐可视化节奏灯 实验程序四:MegunoLink音乐反应式LED灯带 模块接线:WS2812B接D6 MAX9814 ESP32_C3 VCC 5V GND GND OUT A0 */

#include
#include
#include

// define necessary parameters
#define N_PIXELS 24
#define MIC_PIN A0
#define LED_PIN 6
// 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);
  }
}

实验场景图

实验场景图 动态图

https://img.mydigit.cn/forum/202207/21/172621aefvzqth8y4tvphv.gif

实验的视频记录(1分3秒)

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

一米二灯管实验场景图

一米二灯管实验的视频记录

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

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章