【雕爷学编程】Arduino动手做(190)---MAX4466声音模块5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十:MAX4466声音传感器 驻极体话筒放大器 麦克风可调功放模块 microphone

在这里插入图片描述
在这里插入图片描述
知识点:MAX4466芯片
是微功率运算放大器,经过优化,可用作麦克风前置放大器。它们提供了优化的增益带宽产品与电源电流的理想组合,以及超小型封装中实现低电压工件环境。 MAX4466具有增益稳定特性,仅需24μA的电源电流即可提供200kHz的增益带宽。经过解压缩,可实现+5V/V的最小稳定增益,并提供600KHZ增益带宽。此外这些放大器具有轨到轨输出,高 AVOL ,以及出色的电源抑制和共模抑制比,适合在嘈杂环境中工作。广泛应用于蜂窝电话、数字复读装置、耳机、助听器、麦克风前置放大器、便携计算机和语音识别系统中。

在这里插入图片描述
主要特性
1、+2.4V 至 +5.5V 电源电压运行版本,
2、可提供 5nA 完全关断(MAX4467/MAX4468)
3、出色的电源抑制比:112dB
4、出色的共模抑制比:126dB
5、高 AVOL:125dB (RL= 100kΩ)
6、轨到轨输出
7、低 24μA 静态电源
8、电流增益带宽积:
200kHz (MAX4465/MAX4467/MAX4469)
600kHz AV≥5 (MAX4466/MAX4468)
9、采用节省空间的封装
5-Pin SC70 (MAX4465/MAX4466)
8 引脚 SOT23 (MAX4467/MAX4468/MAX4469)

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
实验一百八十五:MAX4466声音传感器 低功耗驻极体话筒放大器 麦克风可调功放模块
项目十二:测量环境声级的波形
实验接线:MAX4466咪头模块OUT接Uno的A0

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  实验一百八十五:MAX4466声音传感器 低功耗驻极体话筒放大器 麦克风可调功放模块
  项目十二:测量环境声级的波形
  实验接线:MAX4466咪头模块OUT接Uno的A0
*/

const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;

void setup() {
  Serial.begin(9600);
}

void loop() {
  unsigned long startMillis = millis(); // Start of sample window
  unsigned int peakToPeak = 0;   // peak-to-peak level

  unsigned int signalMax = 0;
  unsigned int signalMin = 1024;

  // collect data for 50 mS
  while (millis() - startMillis < sampleWindow)
  {
    sample = analogRead(0);
    if (sample < 1024)  // toss out spurious readings
    {
      if (sample > signalMax)
      {
        signalMax = sample;  // save just the max levels
      }
      else if (sample < signalMin)
      {
        signalMin = sample;  // save just the min levels
      }
    }
  }

  peakToPeak = signalMax - signalMin;  // max - min = peak-peak amplitude
  double volts = (peakToPeak * 5.0) / 256;  // convert to volts
  Serial.println(volts);
}

实验串口绘图器返回情况

【雕爷学编程】Arduino动手做(190)---MAX4466声音模块5_第1张图片

实验场景图

【雕爷学编程】Arduino动手做(190)---MAX4466声音模块5_第2张图片

【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
实验一百八十五:MAX4466声音传感器 低功耗驻极体话筒放大器 麦克风可调功放模块
项目十三:RGB LED 灯的声学频谱控制

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
  实验一百八十五:MAX4466声音传感器 低功耗驻极体话筒放大器 麦克风可调功放模块
  项目十三:RGB LED 灯的声学频谱控制
  实验接线:MAX4466咪头模块OUT接Uno的A0
  Rpin 11
  Gpin 10
  Bpin 9
*/

#define Rpin 11
#define Gpin 10
#define Bpin 9
#define delayLEDS 3
#define sensorPin A0

float sensorValue = 0, filteredSignal = 0,
      filteredSignalValues[] = {3.4, 3.1, 2.7, 2.4, 2.1, 1.7, 1.3, 0.9, 0.4};

void setup () {
  Serial.begin (9600);
}

void loop () {
  MainFunction();
  delay(6);
}

void MainFunction() {
  sensorValue = (float) analogRead(sensorPin) * (5.0 / 1024.0);
  FilterSignal(sensorValue);
  Serial.print(sensorValue);
  Serial.print(" ");
  Serial.println(filteredSignal);
  CompareSignalFiltered(filteredSignal);
}

void FilterSignal(float sensorSignal) {
  filteredSignal = (0.945 * filteredSignal) + (0.0549 * sensorSignal);
}

void CompareSignalFiltered(float filteredSignal) {
  if (filteredSignal > filteredSignalValues[0]) {
    RGBColor(0, 127, 255);
    Serial.println("Blue");
  } else if (filteredSignal <= filteredSignalValues[0] && filteredSignal > filteredSignalValues[1]) {
    Serial.println("Azure");
    RGBColor(0, 255, 255);
  } else if (filteredSignal <= filteredSignalValues[1] && filteredSignal > filteredSignalValues[2]) {
    RGBColor(255, 0, 0);
    Serial.println("Cyan");
  } else if (filteredSignal <= filteredSignalValues[2] && filteredSignal > filteredSignalValues[3]) {
    RGBColor(0, 255, 127);
    Serial.println("Aqua marine");
  } else if (filteredSignal <= filteredSignalValues[3] && filteredSignal > filteredSignalValues[4]) {
    RGBColor(0, 255, 0);
    Serial.println("Green");
  } else if (filteredSignal <= filteredSignalValues[4] && filteredSignal > filteredSignalValues[5]) {
    RGBColor(255, 255, 0);
    Serial.println("Yellow");
  } else if (filteredSignal <= filteredSignalValues[5] && filteredSignal > filteredSignalValues[6]) {
    RGBColor(0, 0, 255);
    Serial.println("Magenta");
  } else if (filteredSignal <= filteredSignalValues[6] && filteredSignal > filteredSignalValues[7]) {
    RGBColor(255, 0, 127);
    Serial.println("Rose");
  } else if (filteredSignal <= filteredSignalValues[7] && filteredSignal > filteredSignalValues[8]) {
    RGBColor(255, 127, 0);
    Serial.println("Orange");
  } else if (filteredSignal <= filteredSignalValues[8]) {
    RGBColor(0, 127, 255);
    Serial.println("Red");
  } else {
    RGBColor(255, 50 , 0);
    Serial.println("Default: Blue");
  }
}

void RGBColor(int Rcolor, int Gcolor, int Bcolor) {
  analogWrite(Rpin, Rcolor);
  analogWrite(Gpin, Gcolor);
  analogWrite(Bpin, Bcolor);
  delay(delayLEDS);
}

实验串口返回情况

【雕爷学编程】Arduino动手做(190)---MAX4466声音模块5_第3张图片

实验场景图 动态图

RGB LED 灯带的声学频谱控制

如何使用 Arduino 为 RGB LED 灯条构建您自己的音乐可视化器
这是一个教你如何改变 LED 灯条颜色的视频
基于从声音传感器获得的值,信号为
使用具有截止值的一阶低通 IIR 数字滤波器过滤
频率为 900Hz 的滤波信号与多个阈值进行比较
用于确定将基于哪种颜色显示的值
传感器感应到的声音频率,低频声音
(几乎听不见)在 LED 灯条中显示为蓝色,一直到
高频声音(高度可听)在条带中显示为红色。

MainFunction()

主功能
此方法使用“sensorValue”读取声音传感器的输出值
作为浮点数并减去 1023,因为声音传感器提供 1023 或 5V 的输出
当没有感应到任何声音时,这样我们在没有感应到声音时的值为 0
& 值高达 1023 当它感知声音(空气中的振动)时,我们转换信号
到伏特。

 FilterSignal()

过滤信号
使用在 Matlab 中创建的一阶 IIR 低通数字滤波器过滤信号
并将值赋给变量“filteredSignal”

CompareSignalFiltered()

比较信号过滤
比较“filteredSignal”变量和“filteredSignalValues”数组
确定我们比较的变量值在哪里小于、大于或介于两者之间,我们的
阈值为 LED 灯条分配颜色并打印代表的颜色
我们设置的。

   RGBColor()

RGB颜色()
将代表颜色的 0 到 255 之间的值发送到为每个 RGB 颜色定义的引脚,
我们想要的;在 Google RGB 色轮上搜索以帮助您了解颜色是如何创建的。

版本 1.2
将“filteredSignalValues”数组中的数字顺序从高到低,颠倒并更改
来自“sensorValue”变量的方程,从 1023 - “analogRead(A0)” 到“analogRead(A0)”,以使其成为
更容易阅读。
声音传感器输出 5V 或 1023,当没有声音时从 Arduino 读取为输入,并且声音高,输出 0v
传感器具有反向输出逻辑。

你可能感兴趣的:(单片机,嵌入式硬件,Arduino,c++,MAX4466声音模块)