Arduino控制板是一款开源的硬件电路制作平台。一块Arduino UNO板只有一张信用卡般大小,也没有显示器,而且价格低廉,Arduino就如同一台微型计算机[1]。
Arduino板虽小,其功能却不容小觑。Arduino板上包含了微控制器和相关电路。微控制器在我们的生活中几乎无处不在,它让我们周围的设备更加智能,小区的门禁系统以及家里的冰箱、洗衣机、空调等设备的自动化控制都用到了微控制器。
如今,越来越多的人用Arduino制作机器人、创作交互艺术、控制3D打印机[2]。不仅如此,我们还可以借助Arduino设计实验装置用于科学探究[3]。
测量声音在空气中传播速度的方法有很多,在实验室中常用的有驻波法、相位法等,但这些方法对实验操作者的理论要求和实验操作要求均较高,借助Arduino与声音传感器,我们可以轻松自制实验装置测量声音在空气中的传播速度。
1.实验材料
实验所需材料为Arduino UNO 1个、IO扩展板1个、模拟声音传感器2个和触摸传感器1个。需要特别说明的是,所使用的声音传感器模块是能够检测模拟量的声音传感器模块。
2.实验方案
将两个声音传感器模块通过IO扩展板分别连接到Arduino UNO的模拟输入引脚A1脚与A2脚上。为便于区分,我们将连接在A1脚的声音传感器称之为声音传感器1;将连接在A2脚的声音传感器称之为声音传感器2;将触摸传感器模块连接在数字输入引脚3号脚上,用于对程序进行控制。之所以选择触摸传感器而不是按键,是为了避免操作按键时发出的声音对测量产生干扰。装置如图1所示。
声音传感器1与声音传感器2相距为d,且同向放置在一条直线上。声音传感器1离声源较近,声音传感器2离声源较远。在声音传感器1的正前方制造声音。当发出的声音被声音传感器1接收到时,Arduino记录下此时的系统运行时间t1;当声音被声音传感器2接收到时,Arduino记录下此时的系统运行时间t2;那么声音从声音传感器1处传播到声音传感器2处所用的时间t=t2-t1,由v= 即可计算出声音在空气中的传播速度。
声音传感器1与声音传感器2之间的距离d由实际测量所得。我们可以通过串口将d的测量值发送给Arduino,在Mixly编程软件中编写函数模块get_distance,如图2所示。
我们实验的环境中难免存在一些环境噪音,为了避免环境噪音对测量的影响,我们需要确定Arduino接收到多大的音量值才算检测到被测声音而不是环境噪音。因此,我们需要采集环境中的噪声音量最大值,多次测量,分别获得声音传感器1与声音传感器2采集到的环境噪声音量最大值max1和max2。若实验时声音传感器1与声音传感器2分别采集到的音量值大于max1和max2,则表示被测声音已到达相应的声音传感器所处的位置。编写背景噪声音量测试函数volume_test,如图3所示。
变量声明中,变量state用来储存检测状态,值为0表示“声音检测中”,值为1表示“检测结束”。
编写主程序如图4所示。程序将实现:Arduino启动时,操作者可向Arduino发送两声音传感器间的距离数据,单位为“米”;接下来,装置会检测环境噪声最大音量值;环境噪声检测结束后,操作者在声音传感器1的正前方制造声音,Arduino根据测量到的数据计算出声速并在串口监視器中打印出来。测量完成之后,轻触触摸传感器,系统再次进入测量状态。若需更改声音传感器间的距离值,重启Arduino即可再次上传距离d的值。
3.测量声音速度
当Arduino启动时,串口监视器中显示“Please input the distance:”。如实际测得两声音传感器之间的距离为0.90米,将距离数据0.90通过串口监视器发送给Arduino。
串口监视器中显示“Testing......”时,表示正在进行环境噪声最大值的检测。当串口监视器中显示“Measuring......”时,声速测量开始,在声音传感器1的正前方通过拍手制造一短促的声音,串口监视器中随即打印出声音在声音传感器1与声音传感器2之间传播的时间t与计算所得的声速数据,然后显示“Done!”表示测量完成。如图5所示,本次测得的声音在空气中的传播速度是349.38m/s。
4.总结讨论
该实验应在安静的环境条件下进行,以减小环境噪声的干扰。由于声音在空气中的传播速度受气温、湿度、气压影响较大,故测得的数据是特定环境条件下的声速数据,那么环境条件的记录是很重要的,下一步的改进中还可以为装置添加监测环境条件的相关传感器。由于声音在传播过程中音量会发声衰减,实际上被测声音到达不同声音传感器处时对程序的触发能力是不同的。为了减小因此而造成的系统误差,一是制造的被测声音要尽可能地短促响亮;二是在保证传感器能接收到较远的声音前提下,两个声音传感器之间的距离应适当远一些,当然还可以考虑从程序算法上进行优化。
该装置简化了声速测量的过程,为声速的测量在方法上提供了更多的可能,同时也体现了Arduino与声音传感器在科学探究实验中的应用价值。
参考文献
[1]Massimo Banzi, Michael Shiloh. 程晨译. 爱上Arduino[M]. 北京: 人民邮电出版社,2016.
.
[2]John Boxall. 翁恺译. 动手玩转Arduino[M]. 北京: 人民邮电出版社,2014.
[3]贾皓云. 用Arduino研究自由落体运动[J]. 无线电,2017(11)