Arduino控制板是一款開源的硬件電路制作平臺(tái)。一塊Arduino UNO板只有一張信用卡般大小,也沒有顯示器,而且價(jià)格低廉,Arduino就如同一臺(tái)微型計(jì)算機(jī)[1]。
Arduino板雖小,其功能卻不容小覷。Arduino板上包含了微控制器和相關(guān)電路。微控制器在我們的生活中幾乎無處不在,它讓我們周圍的設(shè)備更加智能,小區(qū)的門禁系統(tǒng)以及家里的冰箱、洗衣機(jī)、空調(diào)等設(shè)備的自動(dòng)化控制都用到了微控制器。
如今,越來越多的人用Arduino制作機(jī)器人、創(chuàng)作交互藝術(shù)、控制3D打印機(jī)[2]。不僅如此,我們還可以借助Arduino設(shè)計(jì)實(shí)驗(yàn)裝置用于科學(xué)探究[3]。
測量聲音在空氣中傳播速度的方法有很多,在實(shí)驗(yàn)室中常用的有駐波法、相位法等,但這些方法對(duì)實(shí)驗(yàn)操作者的理論要求和實(shí)驗(yàn)操作要求均較高,借助Arduino與聲音傳感器,我們可以輕松自制實(shí)驗(yàn)裝置測量聲音在空氣中的傳播速度。
1.實(shí)驗(yàn)材料
實(shí)驗(yàn)所需材料為Arduino UNO 1個(gè)、IO擴(kuò)展板1個(gè)、模擬聲音傳感器2個(gè)和觸摸傳感器1個(gè)。需要特別說明的是,所使用的聲音傳感器模塊是能夠檢測模擬量的聲音傳感器模塊。
2.實(shí)驗(yàn)方案
將兩個(gè)聲音傳感器模塊通過IO擴(kuò)展板分別連接到Arduino UNO的模擬輸入引腳A1腳與A2腳上。為便于區(qū)分,我們將連接在A1腳的聲音傳感器稱之為聲音傳感器1;將連接在A2腳的聲音傳感器稱之為聲音傳感器2;將觸摸傳感器模塊連接在數(shù)字輸入引腳3號(hào)腳上,用于對(duì)程序進(jìn)行控制。之所以選擇觸摸傳感器而不是按鍵,是為了避免操作按鍵時(shí)發(fā)出的聲音對(duì)測量產(chǎn)生干擾。裝置如圖1所示。
聲音傳感器1與聲音傳感器2相距為d,且同向放置在一條直線上。聲音傳感器1離聲源較近,聲音傳感器2離聲源較遠(yuǎn)。在聲音傳感器1的正前方制造聲音。當(dāng)發(fā)出的聲音被聲音傳感器1接收到時(shí),Arduino記錄下此時(shí)的系統(tǒng)運(yùn)行時(shí)間t1;當(dāng)聲音被聲音傳感器2接收到時(shí),Arduino記錄下此時(shí)的系統(tǒng)運(yùn)行時(shí)間t2;那么聲音從聲音傳感器1處傳播到聲音傳感器2處所用的時(shí)間t=t2-t1,由v= 即可計(jì)算出聲音在空氣中的傳播速度。
聲音傳感器1與聲音傳感器2之間的距離d由實(shí)際測量所得。我們可以通過串口將d的測量值發(fā)送給Arduino,在Mixly編程軟件中編寫函數(shù)模塊get_distance,如圖2所示。
我們實(shí)驗(yàn)的環(huán)境中難免存在一些環(huán)境噪音,為了避免環(huán)境噪音對(duì)測量的影響,我們需要確定Arduino接收到多大的音量值才算檢測到被測聲音而不是環(huán)境噪音。因此,我們需要采集環(huán)境中的噪聲音量最大值,多次測量,分別獲得聲音傳感器1與聲音傳感器2采集到的環(huán)境噪聲音量最大值max1和max2。若實(shí)驗(yàn)時(shí)聲音傳感器1與聲音傳感器2分別采集到的音量值大于max1和max2,則表示被測聲音已到達(dá)相應(yīng)的聲音傳感器所處的位置。編寫背景噪聲音量測試函數(shù)volume_test,如圖3所示。
變量聲明中,變量state用來儲(chǔ)存檢測狀態(tài),值為0表示“聲音檢測中”,值為1表示“檢測結(jié)束”。
編寫主程序如圖4所示。程序?qū)?shí)現(xiàn):Arduino啟動(dòng)時(shí),操作者可向Arduino發(fā)送兩聲音傳感器間的距離數(shù)據(jù),單位為“米”;接下來,裝置會(huì)檢測環(huán)境噪聲最大音量值;環(huán)境噪聲檢測結(jié)束后,操作者在聲音傳感器1的正前方制造聲音,Arduino根據(jù)測量到的數(shù)據(jù)計(jì)算出聲速并在串口監(jiān)視器中打印出來。測量完成之后,輕觸觸摸傳感器,系統(tǒng)再次進(jìn)入測量狀態(tài)。若需更改聲音傳感器間的距離值,重啟Arduino即可再次上傳距離d的值。
3.測量聲音速度
當(dāng)Arduino啟動(dòng)時(shí),串口監(jiān)視器中顯示“Please input the distance:”。如實(shí)際測得兩聲音傳感器之間的距離為0.90米,將距離數(shù)據(jù)0.90通過串口監(jiān)視器發(fā)送給Arduino。
串口監(jiān)視器中顯示“Testing......”時(shí),表示正在進(jìn)行環(huán)境噪聲最大值的檢測。當(dāng)串口監(jiān)視器中顯示“Measuring......”時(shí),聲速測量開始,在聲音傳感器1的正前方通過拍手制造一短促的聲音,串口監(jiān)視器中隨即打印出聲音在聲音傳感器1與聲音傳感器2之間傳播的時(shí)間t與計(jì)算所得的聲速數(shù)據(jù),然后顯示“Done!”表示測量完成。如圖5所示,本次測得的聲音在空氣中的傳播速度是349.38m/s。
4.總結(jié)討論
該實(shí)驗(yàn)應(yīng)在安靜的環(huán)境條件下進(jìn)行,以減小環(huán)境噪聲的干擾。由于聲音在空氣中的傳播速度受氣溫、濕度、氣壓影響較大,故測得的數(shù)據(jù)是特定環(huán)境條件下的聲速數(shù)據(jù),那么環(huán)境條件的記錄是很重要的,下一步的改進(jìn)中還可以為裝置添加監(jiān)測環(huán)境條件的相關(guān)傳感器。由于聲音在傳播過程中音量會(huì)發(fā)聲衰減,實(shí)際上被測聲音到達(dá)不同聲音傳感器處時(shí)對(duì)程序的觸發(fā)能力是不同的。為了減小因此而造成的系統(tǒng)誤差,一是制造的被測聲音要盡可能地短促響亮;二是在保證傳感器能接收到較遠(yuǎn)的聲音前提下,兩個(gè)聲音傳感器之間的距離應(yīng)適當(dāng)遠(yuǎn)一些,當(dāng)然還可以考慮從程序算法上進(jìn)行優(yōu)化。
該裝置簡化了聲速測量的過程,為聲速的測量在方法上提供了更多的可能,同時(shí)也體現(xiàn)了Arduino與聲音傳感器在科學(xué)探究實(shí)驗(yàn)中的應(yīng)用價(jià)值。
參考文獻(xiàn)
[1]Massimo Banzi, Michael Shiloh. 程晨譯. 愛上Arduino[M]. 北京: 人民郵電出版社,2016.
.
[2]John Boxall. 翁愷譯. 動(dòng)手玩轉(zhuǎn)Arduino[M]. 北京: 人民郵電出版社,2014.
[3]賈皓云. 用Arduino研究自由落體運(yùn)動(dòng)[J]. 無線電,2017(11)