Jane 发表于 2024-11-19 14:44:56

[入门教程]Arduino入门教程25—声控灯

本帖最后由 zoey不种土豆 于 2024-12-31 16:58 编辑

项目 - 声控灯

声控灯是一种非常常见的家居设备,它能够通过检测周围环境的声音来自动开关灯光。本项目通过编写Arduino代码,我们可以实现当声音达到一定级别时,LED灯自动亮起;声音减弱后,LED灯自动熄灭的功能。

元件清单


硬件连接
图 1 声控灯连线图
示例代码

样例代码:
//项目 - 声控灯
// 定义声音传感器和LED的引脚
const int soundSensorPin = A0; // 声音传感器连接到A0
const int ledPin = 13;         // LED连接到数字13号引脚

const int soundThreshold = 500; // 声音阈值,可以根据实际情况调整

void setup() {
pinMode(soundSensorPin, INPUT);// 设置声音传感器引脚为输入模式
pinMode(ledPin, OUTPUT);         // 设置LED引脚为输出模式
digitalWrite(ledPin, LOW);       // 确保启动时LED是关闭的

Serial.begin(9600); // 初始化串口通信,并设置波特率为9600
}

void loop() {
// 读取声音传感器的值
int sensorValue = analogRead(soundSensorPin);

// 通过串口监视器打印声音传感器的值
Serial.print("声音传感器的值: ");
Serial.println(sensorValue);

// 检查声音是否超过设定的阈值
if (sensorValue > soundThreshold) {
    digitalWrite(ledPin, HIGH); // 如果超过阈值,点亮LED
    delay(1000);
} else {
    digitalWrite(ledPin, LOW);// 如果没超过阈值,熄灭LED
}

// 为了避免连续检测,可以在此添加短暂的延时
delay(50); // 延时50毫秒
}
代码上传成功后,当你发出较大声音时,LED会亮起并维持一秒钟。如果发现比较难以激活LED(或过于敏感),可以适当调整声音阈值以达到最佳效果。

代码回顾

在loop()函数开始之前,主要执行的是一些基础的准备工作,包括初始化用于控制LED的引脚,以及设置串口通信参数以便进行数据传输或调试。

在该项目的loop()函数中,展现了典型的输入、处理、输出的控制流程。

输入,读取声音传感器的值并存放在sensorValue中:

int sensorValue = analogRead(soundSensorPin);
计算处理,我们使用一个if语句来检查声音值是否超过了预设的阈值soundThreshold:

if (sensorValue > soundThreshold) {
    digitalWrite(ledPin, HIGH);
    delay(1000);
} else {
    digitalWrite(ledPin, LOW);
}
输出,如果超过了,就使用digitalWrite(ledPin, HIGH) 点亮LED,并通过delay(1000) 保持LED点亮1秒钟。如果没有超过阈值,就使用digitalWrite(ledPin, LOW) 熄灭LED。

delay(50)作用是在每次检测声音之间加一个短暂的延时,这有助于减少Arduino的负担并提高程序的稳定性。

硬件回顾

驻极体麦克风
驻极体麦克风的基本原理就是一个可变电容,它的电容值随着声音震动而变化。这样就将声音信号转变为了电信号。在电路中,把它看作是一个随声音变化的电阻即可。

驻极体麦克风是极化的,因此它有一个正极引脚和一个接地引脚:


图 2 驻极体麦克风引脚
连接到金属外壳的引脚是接地(ground)引脚,另一个引脚是正极(positive)引脚。
麦克风产生的音频信号是一种交流电,类似于家中电源插座中的电流。但是,交流电流是具有静态频率和固定波长的正弦波,但音频波是频率和波长是可变的。

较高频率的音频信号会产生更高音调的声音。较低频率的音频信号会产生较低音调的声音:


图 3 频率
声音的“音量”或“响度”与峰值的幅度直接相关。振幅较大的音频信号会产生更大音量的声音。振荡幅度较小的音频信号会产生音量较小的声音。

图 4 振幅
偏置电阻
为了保证麦克风的输出信号处于所要求的工作区间,因此我们需要给其添加一个直流偏置,让其输出的电压信号处于所需工作区间。


图 5 工作区间

图 6 麦克风部分电路
就像图6这样,直流偏置的本质是通过加入电阻R1与麦克风分压,然后用一个电容C1隔离偏置电阻产生的直流电压部分。

PNP放大电路
接下来,我们来看一下放大电路部分,如图7所示:


图 7 放大电路部分
从项目【指尖开关】中对NPN三极管的介绍来看,NPN和PNP型三极管是可以当做开关来使用的,也可以当做放大器来使用,当它的基极,产生一个小变化,输出信号就会有很大的变化。这就是所谓的放大功能。由于麦克风通过使用R1分压形成的电压信号较微弱,因此使用三极管放大电路来获得比较好的效果。

基极电阻R2在PNP型三极管放大电路中起到了偏置的作用,而集电极电阻R3则作为负载元件,实现了电压的放大和电流到电压的转换。这两个电阻共同协作,确保了放大电路的正常工作和信号的有效放大。

那么PNP型三极管和NPN型三极管在作为放大电路时有什么不同吗?

由于这两种三极管的材料层序和电流流动的方向不同,导致它们在放大电路中的工作原理和特性有所不同。


如图8和图9所示:在NPN电路中,C接正极,E接负极;PNP电路则相反,E接正极,C接负极(这里说的正极和负极都是直接或间接连接)。一般的电路中,用了NPN的,你就可以按“上下对称交换”的方法得到 PNP 的版本。

当然,要保证正常工作,还必须保证这些电压、电流满足一些定量条件,需要调整电阻的接入位置来保证电路的正常工作和信号的有效放大。

附件下载:


hnyzcj 发表于 2024-11-19 16:07:01

这个jane是我认知的那个Jane吗
页: [1]
查看完整版本: [入门教程]Arduino入门教程25—声控灯