2024-11-19 14:44:56 [显示全部楼层]
23浏览
查看: 23|回复: 1

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

[复制链接]
项目 - 声控灯

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

元件清单

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

硬件连接
[入门教程]Arduino入门教程25—声控灯图2
图 1 声控灯连线图

示例代码

样例代码:
  1. //项目 - 声控灯
  2. // 定义声音传感器和LED的引脚
  3. const int soundSensorPin = A0; // 声音传感器连接到A0
  4. const int ledPin = 13;         // LED连接到数字13号引脚
  5. const int soundThreshold = 500; // 声音阈值,可以根据实际情况调整
  6. void setup() {
  7.   pinMode(soundSensorPin, INPUT);  // 设置声音传感器引脚为输入模式
  8.   pinMode(ledPin, OUTPUT);         // 设置LED引脚为输出模式
  9.   digitalWrite(ledPin, LOW);       // 确保启动时LED是关闭的
  10.   Serial.begin(9600); // 初始化串口通信,并设置波特率为9600
  11. }
  12. void loop() {
  13.   // 读取声音传感器的值
  14.   int sensorValue = analogRead(soundSensorPin);
  15.   // 通过串口监视器打印声音传感器的值
  16.   Serial.print("声音传感器的值: ");
  17.   Serial.println(sensorValue);
  18.   // 检查声音是否超过设定的阈值
  19.   if (sensorValue > soundThreshold) {
  20.     digitalWrite(ledPin, HIGH); // 如果超过阈值,点亮LED
  21.     delay(1000);
  22.   } else {
  23.     digitalWrite(ledPin, LOW);  // 如果没超过阈值,熄灭LED
  24.   }
  25.   // 为了避免连续检测,可以在此添加短暂的延时
  26.   delay(50); // 延时50毫秒
  27. }
复制代码

代码上传成功后,当你发出较大声音时,LED会亮起并维持一秒钟。如果发现比较难以激活LED(或过于敏感),可以适当调整声音阈值以达到最佳效果。

代码回顾

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

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

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

  1. int sensorValue = analogRead(soundSensorPin);
复制代码

计算处理,我们使用一个if语句来检查声音值是否超过了预设的阈值soundThreshold:

  1. if (sensorValue > soundThreshold) {
  2.     digitalWrite(ledPin, HIGH);
  3.     delay(1000);
  4.   } else {
  5.     digitalWrite(ledPin, LOW);  
  6.   }
复制代码

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

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

硬件回顾

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

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

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

图 2 驻极体麦克风引脚

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

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

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

图 3 频率

声音的“音量”或“响度”与峰值的幅度直接相关。振幅较大的音频信号会产生更大音量的声音。振荡幅度较小的音频信号会产生音量较小的声音。
[入门教程]Arduino入门教程25—声控灯图5

图 4 振幅

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

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

5 工作区间

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

图 6 麦克风部分电路

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

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

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

7 放大电路部分

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

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

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

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

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

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

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

附件下载:
下载附件示例代码 电路图.rar

hnyzcj  版主

发表于 7 小时前

这个jane是我认知的那个Jane吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail