2024-11-22 10:26:40 [显示全部楼层]
270浏览
查看: 270|回复: 0

[入门教程] Arduino入门教程26-指针式噪音计

[复制链接]
在这个项目中,我们将学习如何使用Arduino、麦克风和舵机来创建一个有趣的互动装置。将声音强度信息通过Arduino转换为舵机的旋转角度,使得舵机的叶片能够随着声音的大小而转动,从而直观地展示声音的变化。

元件清单

Arduino入门教程26-指针式噪音计图1


硬件连接
Arduino入门教程26-指针式噪音计图2

图 1 指针式噪音计

示例代码
  1. //项目 - 指针式噪音计
  2. #include <Servo.h>
  3. // 定义声音传感器
  4. const int soundSensorPin = A0; // 声音传感器连接到A0
  5. Servo myservo;  // 创建舵机对象
  6. const float alpha = 0.1;
  7. // 滤波因子,介于0和1之间,数值越小滤波效果越强
  8. float filteredValue = 0;  // 经过滤波后的声音传感器值
  9. void setup() {
  10.   pinMode(soundSensorPin, INPUT);
  11.   Serial.begin(9600);
  12.   myservo.attach(13);
  13. }
  14. void loop() {
  15.   // 读取声音传感器的值
  16.   int sensorValue = analogRead(soundSensorPin);
  17.   Serial.println(sensorValue);
  18.   // 应用指数移动平均滤波器
  19.   filteredValue = alpha * sensorValue + (1 - alpha) * filteredValue;
  20.   // 通过串口监视器打印滤波后的声音传感器值
  21.   Serial.print("滤波后的声音值: ");
  22.   Serial.println(filteredValue);
  23.   // 将滤波后的声音值映射到舵机的位置范围(通常是0到180度)
  24.   int servoPos = map(filteredValue, 0, 1023, 0, 180);
  25.   // 控制舵机转动到指定位置
  26.   myservo.write(servoPos);
  27.   // 延时一小段时间,以便于舵机稳定
  28.   delay(100);
  29. }
复制代码

上传代码后,对着麦克风发出声音,舵机的叶片会发生转动。根据声音的音量大小,转动的角度会有所不同。

代码回顾

由于麦克风传输出的信号不是稳定平滑的,当我们把信号直接使用在舵机上时,会发现即使环境声音没有变化,舵机也处于抖动状态,实现效果不够稳定。
所以,在使用驻极体麦克风模块和舵机进行音量显示时,引入滤波机制是非常重要的,它可以提高系统的准确性和稳定性,提升用户体验。

首先,我们需要定义滤波器的滤波因子(Alpha)值。

  1. const float alpha = 0.1;
复制代码

Alpha值介于0和1之间,决定了滤波器对输入数据的敏感程度以及滤波效果的平滑程度。

  1. filteredValue = alpha * sensorValue + (1 - alpha) * filteredValue;
复制代码

上面的计算实现了指数移动平均滤波算法,以平滑声音数据。

其中,filterValues是滤波后的值,也就是当前时间点的输出值。它随时间更新,以反映最新的输入数据(即sensorValue)与过去的滤波值之间的加权平均值。这里的权重就是滤波因子Alpha。Alpha越大,滤波后的结果对最新的输入数据(sensorValue)的响应越快,滤波结果越能反映近期的数据变化;反之,Alpha越小,滤波后的结果越平滑,但对输入数据的响应也越慢。

  1. int servoPos = map(filteredValue, 0, 1023, 0, 180);
  2. myservo.write(servoPos);
复制代码

最后,将处理好的数据映射成舵机工作区间的角度servoPos,并使用myservo.write()函数将声音响度以舵机角度的方式呈现出来。

硬件回顾
本项目使用的硬件和电路都与项目【声控灯】相似,如有不清楚的地方,请参考项目【声控灯】的教程。

课后练习
如在实际使用过程中,舵机转动效果不理想,请尝试修改滤波因子的数值,实现舵机的平滑转动吧!

附件下载:
下载附件示例代码.RAR


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

本版积分规则

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

硬件清单

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

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

mail