准备好给您的下一个项目添加一双耳朵了吗?这些声音传感器价格低廉、使用简单,并且能够检测语音、拍手声或者敲门声。
您可以将它们用于各种声音反应项目,例如拍手点亮灯,或监控您的宠物。
硬件概述 声音传感器(Sound Sensor)电路板包含一个麦克风 (50Hz-10kHz) 和一些处理电路,用于将声波转换为电信号。
该电信号被馈送到板载的LM393高精度比较器,该比较器将其数字化并使其在OUT引脚可用。
该模块包括一个用于调节OUT信号灵敏度的电位器。你可以用它来设置一个阈值,这样当声音的幅度超过阈值时,模块输出LOW,否则输出HIGH。
此设置对于在达到特定阈值时触发操作非常有用。 例如,当声音的幅度超过阈值(检测到爆震)时,您可以激活继电器来控制灯光。
该模块还包括两个LED灯。 当模块通电时电源LED灯亮起,当声级超过阈值时状态LED灯亮起。
声音传感器的引脚分布 声音传感器只有三个引脚:
VCC 为传感器供电。 建议传感器由3.3V至5V供电。 GND 是接地引脚。 OUT 引脚在安静条件下输出高电平,在检测到声音时输出低电平。 您可以将它连接到Arduino上的任何数字引脚或直接连接到5V继电器。
将声音传感器连接到Arduino 让我们将声音传感器连接到Arduino开发板。
连接相当简单。首先将模块的VCC引脚连接到Arduino的5V引脚,并将GND引脚接地。最后,将OUT引脚连接到Arduino的数字引脚#8。
接线如下图所示。
设置阈值 该模块有一个内置电位器,用于设置声级阈值,高于该阈值模块输出低电平,状态LED灯亮起。
现在,要设置阈值,请将手指靠近麦克风并调整电位器,直到模块的状态LED闪烁以响应您的点击。
示例 1 – 基本声音检测 以下简单示例检测拍手或啪啪声并在串口监视器上显示一条消息。 - #define sensorPin 8
- // Variable to store the time when last event happened
- unsigned long lastEvent = 0;
- void setup() {
- pinMode(sensorPin, INPUT); // Set sensor pin as an INPUT
- Serial.begin(9600);
- }
- void loop() {
- // Read Sound sensor
- int sensorData = digitalRead(sensorPin);
- // If pin goes LOW, sound is detected
- if (sensorData == LOW) {
-
- // If 25ms have passed since last LOW state, it means that
- // the clap is detected and not due to any spurious sounds
- if (millis() - lastEvent > 25) {
- Serial.println("Clap detected!");
- }
-
- // Remember when last event happened
- lastEvent = millis();
- }
- }
复制代码
如果一切正常,当检测到拍手时,您应该在串口监视器上看到以下输出。
代码说明: 首先草图声明传感器的OUT引脚连接到的Arduino引脚。 接下来,我们定义一个名为lastEvent的变量,用于存储先前检测到拍手的时间。 它将帮助我们减少意外的声音检测。 - unsigned long lastEvent = 0;
复制代码
在setup()函数中,我们将传感器的OUT引脚配置为输入,并建立串口通信。 - pinMode(sensorPin, INPUT);
- Serial.begin(9600);
复制代码
在loop()函数中,首先读取传感器输出。 - int sensorData = digitalRead(sensorPin);
复制代码当传感器检测到声音大到超过阈值时,输出变为低电平。 但是,我们必须确保声音是由拍手声而不是背景噪音引起的。 因此,我们在输出变低后等待25毫秒。 如果输出保持低电平超过25毫秒,则串口监视器上会打印消息“Clap detected”。 - if (sensorData == LOW) {
- if (millis() - lastEvent > 25) {
- Serial.println("Clap detected!");
- }
- lastEvent = millis();
- }
复制代码
示例 2 – 用拍手声控制设备 在下一个项目中,我们将使用声音传感器创建一个“Clapper”,通过拍手声激活交流供电设备。该项目使用单通道继电器模块控制交流供电设备。
接线连接 这个项目的接线很简单。
让我们从为传感器和继电器模块供电开始。 将它们的VCC引脚连接到Arduino的5V引脚,将GND 接地。
将声音传感器的输出引脚 (OUT) 连接到Arduino上的数字引脚#7,将继电器模块的控制引脚 (IN) 连接到数字引脚#8。
您还需要将继电器模块连接到您试图控制的交流供电设备。 您需要切断带电的交流电线路,并将切断的电线的一端连接到COM,另一端连接到NO。接线如下图所示。
Arduino代码 以下是用拍手声控制设备的代码。 - #define sensorPin 7
- #define relayPin 8
- // Variable to store the time when last event happened
- unsigned long lastEvent = 0;
- boolean relayState = false; // Variable to store the state of relay
- void setup() {
- pinMode(relayPin, OUTPUT); // Set relay pin as an OUTPUT pin
- pinMode(sensorPin, INPUT); // Set sensor pin as an INPUT
- }
- void loop() {
- // Read Sound sensor
- int sensorData = digitalRead(sensorPin);
- // If pin goes LOW, sound is detected
- if (sensorData == LOW) {
- // If 25ms have passed since last LOW state, it means that
- // the clap is detected and not due to any spurious sounds
- if (millis() - lastEvent > 25) {
- //toggle relay and set the output
- relayState = !relayState;
- digitalWrite(relayPin, relayState ? HIGH : LOW);
- }
- // Remember when last event happened
- lastEvent = millis();
- }
- }
复制代码
完成后,声音传感器应在您每次拍手时打开或关闭设备。
代码说明: 如果将此草图与我们之前的草图进行比较,您会发现许多相似之处,但也有一些不同之处。
一开始,我们声明了继电器控制引脚 (IN) 连接到的Arduino引脚。 此外,我们定义了一个新的变量relayState来记录继电器的状态。 - #define relayPin 7
- boolean relayState = false;
复制代码在setup()函数中,我们将 relayPin 配置为输出。 - pinMode(relayPin, OUTPUT);
复制代码当我们检测到拍手声时,不是在串口监视器上打印消息,而是简单地切换继电器的状态。 - relayState = !relayState;
- digitalWrite(relayPin, relayState ? HIGH : LOW);
复制代码
|