本文介绍如何将IM69D130 立体声麦克风 Shield2Go与 Arduino MKR WiFi 1010 和两个为 Arduino IDE 启用的 Infineons 微控制器板、XMC4700 Relax Lite 套件和XMC2Go 连接。稍后,本项目将介绍如何使用I2S.h 库从麦克风接收音频数据。
您可以在下方找到用于将 MEMS 麦克风 Shield2Go 与- 1.1 Arduino MKR WiFi 1010 - 1.2 XMC4700 Relax Kit - 1.3 XMC2Go控制器板连接的引出线和连接。
Arduino 和麦克风之间的连接可以通过使用跨接电缆和以下配置来建立:
麦克风 - Arduino MKR WiFi 1010
将麦克风与 XMC4700 连接的最简单方法是使用My IoT Adapter 。此适配器可以直接连接到 XMC4700。要使用麦克风,请将其插入转接板的第一个插座,如下图所示。
如果您没有 MyIoTAdapter,请不要担心,因为也可以将其连接起来。我们只需要 XMC4700 Lite 套件和一些电线。连接将按如下方式组装:
麦克风 - XMC4700 Lite 套件
这是所有介绍的配置中最小的一个。XMC2Go专为适应 Shield2Go 的布局而构建,因此无需使用跨接电缆将麦克风连接到 XMC2Go 板。最简单的方法是将公头焊接到其中一块板上,将母头焊接到另一块板上,然后将它们连接起来,如图所示。(我们在 XMC2Go 上使用母头,在麦克风上使用公头。)
也可以从 XMC2Go 到麦克风进行有线连接,但不建议这样做,因为所有有线连接都可能导致 I2S 连接出现错误。如果您仍然想要有线连接,请执行以下操作:
麦克风 - XMC2Go
首先,我们需要一个可以正常运行的 Arduino IDE 安装,您可以在此处获取。
安装 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);
};>;>;>;>
现在我们来看看 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);
}
}
要访问绘图仪,请转到Tools -> Serial Plotter 。有必要选择我们在代码中设置的相同波特率。可以在串行绘图仪的左下角选择波特率。在我们的例子中,Arduino MKR Wifi 1010的波特率为 115200 ,XMC4700 Relax Lite 套件和 XMC2Go 的波特率为 1000000 。如果您遇到输出未正确显示的问题,您可以随时尝试调整波特率、频率和每个样本的位数。
在查看串行绘图仪的输出时,它可能如下所示:
在这张图片中,我们可以在播放歌曲前奏时看到 Arduino IDE 绘图仪。绘图仪显示了整体歌曲音量的上升,高峰是歌曲的节拍。为了能够看到声级的大尖峰,您可以打响指或敲桌子。
如果你得到一个恒定的模糊图,没有明显的尖峰,这是由你的敲击或折断引起的,那么你的数据线连接可能有故障。要解决此问题,请尝试建立更短的电缆、焊接触点或使用屏蔽电缆以确保没有任何东西干扰数据连接。
我们希望您能够遵循我们在此处提供的所有示例和代码片段。如果您对 IM69D130 MEMS 麦克风 Shield2Go 的更多示例和用例感兴趣,您可以查看其GitHub 存储库。
如果您想知道如何将此扩展板与 Raspberry-Pi 一起使用,请查看我们关于该主题的其他hackster.io 文章。
此外,如果您想通过 Edge Impulse 将麦克风用于机器学习项目,您可以查看这篇hackster.io 文章。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !