最新消息:

用Arduino测声音速度

Arduino 少儿编程 1398浏览 0评论

摘要:Arduino是一款开源的电子原型制作平台,借助Arduino与相应的传感器,我们可以设计实验装置用于科学探究。本文以声速测量装置的设计、制作和操作为例,介绍了Arduino与声音传感器在声速测量实验中的应用,为我们自己动手设计实验装置进行科学探究提供思路。

关键词:Arduino 声速测量 声音传感器 科学探究

Arduino控制板是一款开源的硬件电路制作平台,如果说它是一台计算机,一点都不夸张,不过我们平时使用的计算机性能要强大得多,毕竟一块Arduino UNO板只有一张信用卡般大小,也没有显示器,而且价格低廉,Arduino就如同一台微型计算机。

Arduino板虽小,其功能却不容小觑。Arduino板上包含了微控制器和相关电路,微控制器在我们的生活中几乎无处不在,它让我们周围的设备更加智能,小区的门禁系统以及家里的冰箱、洗衣机、空调等设备的自动化控制都用到了微控制器。如今,越来越多的人用Arduino制作机器人、创作交互艺术、控制3D打印机。不仅如此,我们还可以借助Arduino设计实验装置用于科学探究。

测量声音在空气中传播速度的方法有很多,在实验室中常用的有驻波法、相位法等,但这些方法对实验操作者的理论要求和实验操作要求均较高,借助Arduino与声音传感器,我们可以自制实验装置测量声音在空气中的传播速度

1. 实验材料

实验材料如下表,需要特别说明的是,所使用的声音传感器模块是能够检测模拟量的声音传感器模块。

表 1材料清单

器材 数量
Arduino UNO 1
IO扩展板 1
模拟声音传感器 2
触摸传感器 1

2. 实验方案

将两个声音传感器模块通过IO扩展板分别连接到Arduino UNO的模拟输入引脚A1脚与A2脚上,为便于区分,我们将连接在A1脚的声音传感器称之为声音传感器1,将连接在A2脚的声音传感器称之为声音传感器2;将触摸传感器模块连接在数字输入引脚3号脚上,用于对程序进行控制,之所以选择触摸传感器而不是按键,是为了避免操作按键时发出的声音对测量产生干扰。装置如图1所示。

用Arduino测声音速度

图1声速测量装置图

声音传感器1与声音传感器2相距d同向放置在一条直线上,声音传感器1离声源较近,声音传感器2离声源较远。在声音传感器1的正前方制造一声音,当发出的声音被声音传感器1接收到时,Arduino记录下此时的系统运行时间t1,当声音被声音传感器2接收到时,Arduino记录下此时的系统运行时间t2,那么声音从声音传感器1处传播到声音传感器2处所用的时间t=t2-t1,由v=d/t即可计算出声音在空气中的传播速度。

声音传感器1与声音传感器2之间的距离d由实际测量所得,我们可以通过串口将d的测量值发送给Arduino,在Mixly编程软件中编写函数模块get_distance如图2所示。

用Arduino测声音速度

图2get_distance函数模块

我们实验的环境中难免存在一些环境噪音,为了避免环境噪音对测量的影响,我们需要确定Arduino接收到多大的音量值才算检测到被测声音而不是环境噪音。因此,我们需要采集环境中的噪声音量最大值,多次测量,分别获得声音传感器1与声音传感器2采集到的环境噪声音量最大值max1、max2。若实验时声音传感器1与声音传感器2分别采集到的音量值大于max1、max2,则表示被测声音已到达相应的声音传感器所处的位置。编写背景噪声音量测试函数volume_test如图3所示。

用Arduino测声音速度

图3volume_test函数模块

变量声明如图4所示,其中变量state用来储存检测状态,值为0表示“声音检测中”,值为1表示“检测结束”。

用Arduino测声音速度

图4变量声明

编写主程序如图5所示。程序将实现:Arduino启动时,操作者可向Arduino发送两声音传感器间的距离数据,单位为“米”;接下来装置会检测环境噪声最大音量值;环境噪声检测结束后,操作者在声音传感器1的正前方制造声音,Arduino根据测量到的数据计算出声速并在串口监视器中打印出来。测量完成之后,轻触触摸传感器,系统再次进入测量状态。若需更改声音传感器间的距离值,重启Arduino即可再次上传距离d的值。

用Arduino测声音速度

5声速测量主程序

3. 测量声音速度

当Arduino启动时,串口监视器中显示“Please input the distance:”,实际测得两声音传感器之间的距离为0.90米,将距离数据0.90通过串口监视器发送给Arduino,如图6所示。

用Arduino测声音速度

图6向Arduino发送距离数据

串口监视器中显示“Testing……”时,表示正在进行环境噪声最大值的检测。

用Arduino测声音速度

图7检测环境噪声最大值

当串口监视器中显示“Measuring……”时,声速测量开始,在声音传感器1的正前方通过拍手制造一短促的声音,串口监视器中随即打印出声音在声音传感器1与声音传感器2之间传播的时间t与计算所得的声速数据,然后显示“Done!”表示测量完成。本次测得的声音在空气中的传播速度是349.38m/s,如图8所示。

用Arduino测声音速度

图8串口监视器中的声速数据

4. 总结讨论

该实验应在安静的环境条件下进行,以减小环境噪声的干扰。由于声音在空气中的传播速度受气温、湿度、气压影响较大,故测得的数据是特定环境条件下的声速数据,那么环境条件的记录是很重要的,下一步的改进中还可以为装置添加监测环境条件的相关传感器。由于声音在传播过程中音量会发声衰减,实际上被测声音到达不同声音传感器处时对程序的促发能力是不同的,为了减小因此而造成的系统误差,一是制造的被测声音要尽可能地短促响亮,二是在保证较远的声音传感器能接收到声音的前提下,两个声音传感器之间的距离应适当远一些,当然还可以考虑从程序算法上进行优化。

该装置简化了声速测量的过程,为声速的测量在方法上提供了更多的可能,同时也体现了Arduino与声音传感器在科学探究实验中的应用价值。

【参考文献】

[1] Massimo Banzi, Michael Shiloh. 爱上Arduino[M].程晨译. 第3版. 北京:人民邮电出版社, 2016.

[2] John Boxall. 动手玩转Arduino[M].翁恺译. 北京:人民邮电出版社, 2014.

[3] 贾皓云. 用Arduino研究自由落体运动[J]. 无线电, 2017(11).

您必须 登录 才能发表评论!