麦克风声音传感器 – Grove 声音传感器 (v1.6) – 围绕流行的双运算放大器 IC LM358 构建,并提供模拟信号输出。推荐的工作电压为 5V,这使得它与几乎所有 5V Arduino 微控制器板兼容。
要了解 Grove 声音传感器模块的功能,您必须仔细查看传感器模块的原理图,该原理图显示了电子元件是如何连接在一起的。下图显示了 Grove Sound Sensor (v1.6) 模块的原理图。这张照片初是从网上拍摄的,但为了清晰起见,。
如您所见,该模块的主要声音传感器组件是驻极体麦克风,它与 LM358 音频放大器电路配合使用。终输出是模拟输出(根据声音输入的电平计算),因此可以很容易地通过微控制器进行采样和测试。
更重要的是,LM358 IC 没有真正的轨到轨(0V 至 Vcc)输出。数据手册规定输出电压摆幅为 0V 至 (Vcc – 1.5V)。这意味着当Vcc = 5V时,可能的模拟读数约为715。为了获得更宽的输出范围,应使用一个轨到轨运算放大器。
在下一节课中,我们将研究如何使用 Seeeduino Nano 和 Grove 声音传感器组合来构建声音激活的定时开关。在进入项目之前,请记住,您可以使用 Arduino Uno 或 Nano 板代替 Seeeduino Nano 板,但您应该继续使用 Grove Sound Sensor 模块。尽管这里可以使用另一个准备提供模拟信号输出的声音传感器模块,但我现在不会深入探讨。
声音激活定时开关代码
由于 Grove 声音传感器产生不同的电压,因此我们可以使用微控制器的模数转换器 (ADC) 来处理该电压。因此,这里有一个简单的 Seeeduino Sketch,也与 Arduino Uno/Nano 兼容,它从连接到 A0 的声音传感器模块读取电压,然后显示在 Arduino IDE 的串行监视器上。此外,当声级超过预定义阈值时,D13 输出在有限的时间内变为高电平。
#define SOUND_IN A0 // Sound Input =
A0
#define SW_OUT 13 // Switch Output =
D13
#define THRESHOLD_VALUE 600 // Current
Threshold = 2.929V!
void setup()
{
Serial.begin(9600);
pins_init();
}
void loop()
{
int sensorValue =
analogRead(SOUND_IN);
Serial.print("sensorValue
");
Serial.println(sensorValue);
if(sensorValue > THRESHOLD_VALUE)
{
turnOnSW_OUT();
delay(3000);// D13 Delay = 3 Seconds
}
turnOffSW_OUT();
}
void pins_init()
{
pinMode(SW_OUT, OUTPUT);
pinMode(SOUND_IN, INPUT);
}
void turnOnSW_OUT()
{
digitalWrite(SW_OUT,HIGH);
}
void turnOffSW_OUT()
{
digitalWrite(SW_OUT,LOW);
}
这是一个随机的串行监视器屏幕截图:
下面你可以看到我的测试设置的随意快照(稍后会详细介绍)。
所以现在你有一个粗糙的声音激活计时器设备。接下来,您可以在设置的输出端添加一个继电器驱动器,以便在有响亮的声音时唤醒外部电气负载,如警告灯或警报。继电器驱动器电路的触发输入必须连接到 Seeeduino Nano 的 D13 引脚。
至于继电器及其驱动电路,您可以自己构建一个,也可以购买现成的“高电平有效输入”继电器模块,而无需费力——无论如何都要明智地这样做。下面是这样一种紧凑型继电器模块的图片——Grove Relay (https://seeeddoc.github.io/Grove-Relay/).Grove 继电器 v1.1 的工作电压为 5V,而下一个版本 v 1.2 的工作电压为 3.3V 至 5V。在 250VAC()开关电压下,开关电流为 5A。
声音激活拨动开关代码(拍手开关代码)
现在,您可以使用已构建的相同硬件设置来创建简单的拍手操作拨动开关。下面是这个有趣的应用程序的代码。
long long int last_states = 0;
void setup() {
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
}
void loop() {
last_states = last_states << 1;
if(analogRead(A0) > 600){ // Clap
Threshold
if(last_states == 0){
digitalWrite(13, !digitalRead(13));
}
last_states++;
}
delay(20);
}
任何拍手的声音足够大且离麦克风不太远的人都可以激活切换过程。在此代码中,使用一个简单的技巧来阻止拍手开关响应不需要的声音,比如响亮的音乐位。因此,只有当麦克风发出轻柔的拍手声时,内置 LED (D13 LED) 才会切换(关闭-关闭-打开......希望这是有道理的!
适用于 Arduino Nano 的 Grove Shield (v1.0)
许多读者可能已经注意到,我以不同的方式构建了我的快速测试原型。当然是。我用一个特殊的 Grove Shield 制作了它,因为当时我手里有一个。
此外,非常有用的屏蔽层通过拔出主板的引脚来帮助我们摆脱面包板和跳线,并扩展到 8 个 Grove 连接器。因此,您可以使用 Grove Shield for Arduino Nano v1.0 (https://www.seeedstudio.com/Grove-Shield-for-Arduino-Nano-p-4112.html).
使用此扩展板时,将开关输出从 D13 更改为 Seeeduino Nano 的其他 I/O,例如 D6,因为它有助于保持整体接线整洁漂亮。