资料介绍
描述
本文介绍如何将IM69D130 立体声麦克风 Shield2Go与 Arduino MKR WiFi 1010 和两个为 Arduino IDE 启用的 Infineons 微控制器板、XMC4700 Relax Lite 套件和XMC2Go 连接。稍后,本项目将介绍如何使用I2S.h 库从麦克风接收音频数据。
1. 设置硬件
您可以在下方找到用于将 MEMS 麦克风 Shield2Go 与- 1.1 Arduino MKR WiFi 1010 - 1.2 XMC4700 Relax Kit - 1.3 XMC2Go控制器板连接的引出线和连接。
1.1. Arduino MKR WiFi 1010 - I2S MEMS 麦克风 IM69D130
Arduino 和麦克风之间的连接可以通过使用跨接电缆和以下配置来建立:
麦克风 - Arduino MKR WiFi 1010
1.2. XMC4700 Relax Lite 套件 - I2S MEMS 麦克风 IM69D130
将麦克风与 XMC4700 连接的最简单方法是使用My IoT Adapter 。此适配器可以直接连接到 XMC4700。要使用麦克风,请将其插入转接板的第一个插座,如下图所示。
如果您没有 MyIoTAdapter,请不要担心,因为也可以将其连接起来。我们只需要 XMC4700 Lite 套件和一些电线。连接将按如下方式组装:
麦克风 - XMC4700 Lite 套件
- 3V3——3V3【红色】
- GND - GND [蓝色]
- BCLK - Pin3.9 (SPI:SCK) [黑色]
- 数据 - Pin3.7 (SPI:MISO) [黄色]
- WCLK - Pin3.10 (SPI:SS) [灰色]
1.3. XMC2Go - I2S MEMS 麦克风 IM69D130
这是所有介绍的配置中最小的一个。XMC2Go专为适应 Shield2Go 的布局而构建,因此无需使用跨接电缆将麦克风连接到 XMC2Go 板。最简单的方法是将公头焊接到其中一块板上,将母头焊接到另一块板上,然后将它们连接起来,如图所示。(我们在 XMC2Go 上使用母头,在麦克风上使用公头。)
也可以从 XMC2Go 到麦克风进行有线连接,但不建议这样做,因为所有有线连接都可能导致 I2S 连接出现错误。如果您仍然想要有线连接,请执行以下操作:
麦克风 - XMC2Go
- 3V3-VSS【红色】
- GND - VDD [蓝色]
- BCLK - Pin0.8 (SPI:SCK) [黑色]
- 数据 - Pin0.6 (SPI:MISO) [黄色]
- WCLK - Pin0.9 (SPI:SS) [灰色]
2. 设置软件
首先,我们需要一个可以正常运行的 Arduino IDE 安装,您可以在此处获取。
2.1. Arduino MKR WiFi 1010
安装 IDE 后,我们必须将开发板添加到开发板管理器中。因此,单击工具菜单 -> 开发板 -> 开发板管理器并安装 Arduino SAMD 开发板(32 位 ARM Cortex-M0+)。为此,请在 Boards Manager 中单击,选择最新版本并单击安装。
之后,我们现在准备创建我们的第一个草图以使用 IM69D130 MEMS 麦克风 Shield2Go。
从代码开始:
让我们快速浏览一下 Arduino 草图。这个草图的基本功能是从麦克风读取音频数据并处理它以通过 Arduino IDE 提供的串行绘图仪显示声压级。
首先,我们必须包含 I2S.h 库才能与麦克风通信。
#include
之后我们必须为 Arduino 进行设置。为了在串行监视器中显示麦克风的输出,我们必须设置一个串行连接。此外,我们必须使用库的 begin 函数建立 I2S 连接。
void setup() {
// Open serial communications and wait for port to open:
// A baud rate of 115200 is used instead of 9600 for a faster data rate
// on non-native USB ports
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start I2S at 16 kHz with 32-bits per sample
if (!I2S.begin(I2S_PHILIPS_MODE, 16000, 32)) {
Serial.println("Failed to initialize I2S!");
while (1); // do nothing
}
}
在循环函数中,我们设置了一个整数变量数组。然后我们检查麦克风上 I2S 数据的可用性。之后,I2S 值从 I2S 缓冲区中读出并保存到我们的整数数组中。计算样本数组的平均值;为了标准化输出,我们从样本的每次迭代中减去平均值。然后我们计算样本的最小值和最大值。最后我们打印出它们之间的差异以显示基本压力水平。您可以在最后找到完整的代码。
void loop() {
// read a bunch of samples:
int samples[SAMPLES];
for (int i=0; i int sample = 0;
while ((sample == 0) || (sample == -1) ) {
sample = I2S.read();
}
// convert to 18 bit signed
sample >>= 14;
samples[i] = sample;
}
// ok we hvae the samples, get the mean (avg)
float meanval = 0;
for (int i=0; i meanval += samples[i];
}
meanval /= SAMPLES;
// subtract it from all samples to get a 'normalized' output
for (int i=0; i samples[i] -= meanval;
//Serial.println(samples[i]);
}
// find the 'peak to peak' max
float maxsample, minsample;
minsample = 100000;
maxsample = -100000;
for (int i=0; i minsample = min(minsample, samples[i]);
maxsample = max(maxsample, samples[i]);
}
Serial.println(maxsample - minsample);
};>;>;>;>
2.2. XMC4700 Relax Lite 套件和 XMC2Go
现在我们来看看 XMC4700 Relax Lite 套件和 XMC2Go 的配置。
在这里,我们假设您有一个可以正常工作的 Arduino IDE,并且已将 XMC 库完全集成到 Arduino IDE 中。如果不是这种情况,请单击此处获取实施指南。
现在一切都应该设置好了,这样我们就可以查看代码了。这段代码的基本功能是从麦克风中读取音频数据并进行处理,通过Arduino IDE提供的串行绘图仪显示声压级。
从代码开始:
首先,我们必须包含 I2S.h 库才能与麦克风通信。
#include
o 能够在串行监视器中显示麦克风的输出,我们必须设置串行连接。然后我们必须使用库的 begin 函数建立 I2S 连接。
在此之前,我们还禁用两个麦克风并仅启用其中一个,这样信号就不会失真。
void setup()
{
// Open serial communication with a baudrate of 115200
Serial.begin(115200);
// Wait until the serial port is connected
while (!Serial);
I2S.disableMicrophones();
// Enable the microphone when word select is high
I2S.enableMicrophoneHigh();
// Start I2S at 11 kHz with 16 bits per sample
if (I2S.begin(I2S_PHILIPS_MODE, 11000, 16) != 0)
{
Serial.println("Failed to initialize I2S!");
// Do nothing and wait
while (true);
}
}
循环函数如下所示。首先,我们创建一个包含 128 个条目的示例数组。当缓冲区中保存了 128 个或更多样本时,我们将读取这些值并将它们保存到我们之前创建的数组中。然后计算平均值并从所有样本中减去平均值以标准化输出。之后计算最小和最大样本,然后打印到串行绘图仪中。您可以在最后找到完整的代码。
void loop()
{
// Array to store the samples
int32_t samples[128];
if (I2S.available() > 128)
{
// Read 128 samples into the array
I2S.read(samples, 128);
float meanValue = 0;
for (int i = 0; i < 128; i++)
{
meanValue += samples[i];
}
meanValue /= 128;
// Substract it from all samples to normalize output
for (int i = 0; i < 128; i++)
{
samples[i] -= meanValue;
}
// Get the peak to peak maximum
float maxSample, minSample;
minSample = 100000;
maxSample = -100000;
for (int i = 0; i < 128; i++)
{
minSample = min(minSample, samples[i]);
maxSample = max(maxSample, samples[i]);
}
Serial.println(maxSample - minSample);
}
}
3. 串行绘图仪的配置和输出
要访问绘图仪,请转到Tools -> Serial Plotter 。有必要选择我们在代码中设置的相同波特率。可以在串行绘图仪的左下角选择波特率。在我们的例子中,Arduino MKR Wifi 1010的波特率为 115200 ,XMC4700 Relax Lite 套件和 XMC2Go 的波特率为 1000000 。如果您遇到输出未正确显示的问题,您可以随时尝试调整波特率、频率和每个样本的位数。
在查看串行绘图仪的输出时,它可能如下所示:
在这张图片中,我们可以在播放歌曲前奏时看到 Arduino IDE 绘图仪。绘图仪显示了整体歌曲音量的上升,高峰是歌曲的节拍。为了能够看到声级的大尖峰,您可以打响指或敲桌子。
如果你得到一个恒定的模糊图,没有明显的尖峰,这是由你的敲击或折断引起的,那么你的数据线连接可能有故障。要解决此问题,请尝试建立更短的电缆、焊接触点或使用屏蔽电缆以确保没有任何东西干扰数据连接。
4. 扩展阅读和更多示例
我们希望您能够遵循我们在此处提供的所有示例和代码片段。如果您对 IM69D130 MEMS 麦克风 Shield2Go 的更多示例和用例感兴趣,您可以查看其GitHub 存储库。
如果您想知道如何将此扩展板与 Raspberry-Pi 一起使用,请查看我们关于该主题的其他hackster.io 文章。
此外,如果您想通过 Edge Impulse 将麦克风用于机器学习项目,您可以查看这篇hackster.io 文章。
- MEMS麦克风通过I2S将PDM输入直接传输至带软件抽取的C5515EVM
- MEMS麦克风封装的组装指南和建议
- AN037 HPDF+I2S的麦克风方案
- 兆易创新AN037 HPDF+I2S的麦克风方案
- 适用于某些TLM型麦克风主体的PCB
- 适用于某些手持式麦克风主体的PCB
- 科大讯飞麦克风阵列模块 麦克风设计参考手册 211次下载
- AN-第1325:高性能数字MEMS麦克风与具有I2S输出的SigmaDSP音频处理器的简单接口
- MEMS麦克风的应用指南 40次下载
- MEMS麦克风适用范围及其声学设计 41次下载
- MEMS麦克风技术叙述 52次下载
- MEMS技术让麦克风越来越小 43次下载
- 具有底部收音孔和I2S数字输出的全向麦克风 26次下载
- MEMS麦克风原理与应用 136次下载
- MEMS麦克风的回流焊 95次下载
- 什么是麦克风阵列 292次阅读
- MEMS麦克风与ECM麦克风对比哪个好 1w次阅读
- 微雪电子麦克风阵列扩展板简介 2984次阅读
- 基于Vesper专利的压电MEMS麦克风VM2020设计 3538次阅读
- MEMS麦克风的内部组成及应用优势分析 7767次阅读
- MEMS麦克风阵列的基础知识及工作原理和应用介绍 1.2w次阅读
- 浅析MEMS麦克风的结构与工作模式 1.5w次阅读
- MEMS麦克风读出电路设计方案 9368次阅读
- 浅析MEMS麦克风噪声失效具体案例 9380次阅读
- MEMS麦克风电路介绍 8138次阅读
- MEMS麦克风改变设备声学性能的工作原理 3571次阅读
- 详解:电容式MEMS麦克风读出电路设计 6538次阅读
- 详解模拟和数字MEMS麦克风设计区别 2.4w次阅读
- 在双线式麦克风电路中使用MEMS麦克风 1w次阅读
- 便携MEMS麦克风可以有效改善音质 1317次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多