格物致知、诚意正心
准备加入下一个项目了吗?
这些声音传感器价格低廉,易于连接,并且能够检测声音,拍手或敲门声。
您可以将它们用于各种声音反应性项目,例如,使拍手声拍手或在宠物不在时保持“耳”动。
麦克风内部是薄的振膜,实际上是一块电容器。第二块板是背板,背板靠近并平行于隔膜。
当您对着麦克风讲话时,您的声音所产生的声波会撞击振动膜,从而引起振动。
当振动膜片响应声音而振动时,电容会随着板块彼此靠近或分开而发生变化。
随着电容的变化,板上的电压也发生变化,这可以通过测量确定声音的幅度。
声音传感器是一块小板,结合了麦克风(50Hz-10kHz)和一些处理电路,可将声波转换为电信号。
该电信号被馈送到板载LM393高精度比较器以对其进行数字化,并通过OUT引脚提供。
该模块具有一个内置电位计,用于调节OUT信号的灵敏度。
您可以使用电位计来设置阈值。因此,当声音的振幅超过阈值时,模块将输出LOW,否则输出HIGH。
当您要在达到特定阈值时触发操作时,此设置非常有用。例如,当声音的振幅超过阈值时(当检测到爆震时),您可以激活继电器以控制光。你有主意!
除此之外,该模块还具有两个LED。模块通电后,电源LED指示灯将点亮。当数字输出变低时,状态LED会亮起。
声音传感器只有三个引脚:
VCC引脚为传感器供电。建议以3.3V – 5V之间的电压为传感器供电。
地线 是接地连接。
出去当环境安静时,该引脚输出高电平;当检测到声音时,该引脚输出低电平。您可以将其连接到Arduino上的任何数字引脚,或直接连接到5V继电器或类似设备。
让我们将声音传感器连接到Arduino。
连接非常简单。首先将模块上的VCC引脚连接到Arduino上的5V,并将GND引脚接地。
现在,将OUT引脚连接到Arduino上的数字引脚#7。就是这样!
下图显示了接线。
为了从声音传感器中获取准确的读数,建议您首先对其进行校准。
该模块具有内置的电位计,用于校准数字输出(OUT)。
通过旋转电位计的旋钮,可以设置阈值。因此,当声音水平超过阈值时,状态LED会亮起,数字输出(OUT)将输出为低。
现在要校准传感器,开始在麦克风附近拍手并调节电位器,直到看到模块上的状态LED响应拍手而闪烁。
就是这样,您的传感器现在已校准并可以使用。
现在您已经连接好了声音传感器,您将需要一个草图以使其全部正常工作。
以下示例检测到拍手或咔嗒声,并在串行监视器上打印消息。继续,尝试一下草图;然后我们将对其进行详细剖析。
#define sensorPin 7 // 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引脚的声明开始。
#define sensorPin 7
接下来,我们定义一个名为的变量lastEvent,用于存储从检测到拍手起的时间。这将有助于我们消除虚假声音。
lastEvent
unsigned long lastEvent = 0;
在“设置”部分中,我们将传感器的信号引脚声明为输入。我们还设置了串行监视器。
pinMode(sensorPin, INPUT); Serial.begin(9600);
在循环部分,我们首先读取传感器的数字输出。
int sensorData = digitalRead(sensorPin);
当传感器检测到任何声音足以超过阈值时,输出将变为低电平。但是我们必须确保声音是由于拍手而不是杂散的背景噪声引起的。因此,我们等待25毫秒。如果输出保持LOW超过25毫秒,则声明检测到了拍手。
if (sensorData == LOW) { if (millis() - lastEvent > 25) { Serial.println("Clap detected!"); } lastEvent = millis(); }
在我们的下一个项目中,我们将使用声音传感器作为“拍板”,通过拍手打开交流电源设备。
该项目使用一个通道中继模块来控制交流供电设备。如果您不熟悉继电器模块,请考虑阅读(至少略读)以下教程。将一个通道中继模块与Arduino接口有时您希望Arduino控制交流电源设备,例如灯,风扇或其他家用设备。但是由于Arduino的工作电压为5伏,所以…
该项目的接线非常简单。
首先,您需要为传感器和继电器模块供电。将其VCC引脚连接至Arduino的5V引脚,并将GND接地。
接下来,将声音传感器上的输出引脚(OUT)连接到Arduino上的数字引脚#7,并将继电器模块上的控制引脚(IN)连接到数字引脚#8。
您还需要将继电器模块与要控制的交流电源设备对齐。您必须切断交流电源线,并将切断电线的一端(从墙壁上引出)连接至COM,另一端连接至NO。
这是拍手控制设备的示意图。
#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来存储继电器的状态。
relayState
#define relayPin 7 boolean relayState = false;
在安装程序中,我们将定义relayPin为输出。
relayPin
pinMode(relayPin, OUTPUT);
现在,当我们检测到拍手的声音时,无需在串行监视器上打印消息,只需切换继电器的状态即可。
relayState = !relayState; digitalWrite(relayPin, relayState ? HIGH : LOW);
如果声音传感器行为异常,请尝试以下步骤。
您的电子邮箱地址不会被公开。 必填项已用 * 标注
评论 *
显示名称 *
电子邮箱地址 *
网站
在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。