吳建惠
當(dāng)物體振動(dòng)時(shí)會(huì)發(fā)出聲音,科學(xué)家們將每秒鐘振動(dòng)的次數(shù)稱為聲音的頻率,它的單位是赫茲(Hz).人類耳朵能聽(tīng)到的聲波頻率為20 Hz-20000 Hz.因此,我們把頻率高于20000赫茲的聲波稱為“超聲波”.超聲波具有方向性好、穿透能力強(qiáng)、易于獲得較集中的聲能等特性,在測(cè)距、測(cè)速等方面具有廣泛應(yīng)用.本文結(jié)合高中物理數(shù)字鍵、化實(shí)驗(yàn)開(kāi)發(fā)實(shí)例,闡述如何利用arduino平臺(tái)實(shí)現(xiàn)超聲波測(cè)距和數(shù)據(jù)采集,實(shí)現(xiàn)精確、直觀、高效率的實(shí)驗(yàn)測(cè)量和數(shù)據(jù)處理.
1超聲波測(cè)距原理及方案對(duì)比
超聲波測(cè)距有兩種常見(jiàn)方案,一種是人教版高中物理必修Ⅰ教材第23頁(yè)所示的方案,把超聲波發(fā)射器件和接收器件分別置放在所測(cè)距離的起點(diǎn)和終點(diǎn),在紅外線遙控器件輔助下計(jì)算超聲波從起點(diǎn)至終點(diǎn)的時(shí)間Δt,再根據(jù)s=v·Δt求得距離.另一種方案可稱為“反射式”,是把超聲波發(fā)射器件和接收器件并列安裝在起點(diǎn)處,然后測(cè)得超聲波從發(fā)射到經(jīng)過(guò)終點(diǎn)反射回來(lái)被接受到的時(shí)間差Δt,再根據(jù)s=v·(Δt/2)求得距離.方案一的測(cè)量精度較高,但實(shí)現(xiàn)較繁瑣、使用也不便,方案二的測(cè)試時(shí)間是方案一的兩倍、理論上誤差也翻倍,但使用較為方便、所需模塊也更易于購(gòu)置,因此我們采用了方案二“反射式”測(cè)距方式.
常見(jiàn)的“反射式”超聲波測(cè)距模塊有SR系列、US系列等,表1是我們?cè)囉眠^(guò)的幾種模塊的電性能參數(shù),看上去都屬于民用產(chǎn)品、差別并不大,因此網(wǎng)上的超聲波測(cè)距應(yīng)用都采用了常見(jiàn)且廉價(jià)的HC-SR04模塊.但事實(shí)上HC-SR04模塊和US-016模塊并不能滿足中學(xué)物理實(shí)驗(yàn)的必備要求,很多人都忽略了測(cè)量頻率的問(wèn)題,下面試分析之.
如前所述,在高中物理必修Ⅰ第二章第5節(jié)《自由落體運(yùn)動(dòng)》教學(xué)中,研究自由落體加速度(重力加速度)是一個(gè)非常重要的課堂演示實(shí)驗(yàn),傳統(tǒng)上采用打點(diǎn)計(jì)時(shí)器在紙帶上打點(diǎn)記錄距離,測(cè)量的頻率是50 Hz,如果要用超聲波測(cè)距代替打點(diǎn)計(jì)時(shí)器,那么測(cè)量頻率同樣必須達(dá)到50 Hz,也就是說(shuō)測(cè)量周期不能大于20 ms.而幾種模塊不同的輸出方式導(dǎo)致了他們實(shí)際輸出效果的區(qū)別:
(1) HC-SR系列模塊的測(cè)量時(shí)序如圖1,它的測(cè)量結(jié)果是以脈沖時(shí)長(zhǎng)的方式輸出的,導(dǎo)致測(cè)量周期是超聲波從起點(diǎn)到終點(diǎn)傳播時(shí)間的4倍以上,嚴(yán)重限制了測(cè)量頻率的提高.為了便于理解,我們以測(cè)量一米的距離為例分析測(cè)量過(guò)程:首先單片機(jī)向模塊發(fā)送10 us的高電平,然后模塊發(fā)射8個(gè)40 kHz超聲波脈沖約耗時(shí)0.2 ms,超聲波傳播至目標(biāo)需時(shí)t=1 m/(340 m/s)=2.94 ms,反射至接收器件又需2.94 ms,最后模塊向單片機(jī)輸出一個(gè)寬度為5.88 ms的高電平脈沖,單片機(jī)測(cè)得此脈沖寬度后再折算得到測(cè)量結(jié)果.整個(gè)過(guò)程約需12 ms,再加上兩次測(cè)量之間的間隔時(shí)間、其他運(yùn)行步驟消耗時(shí)間、尤其是單片機(jī)與PC計(jì)算機(jī)數(shù)據(jù)通訊時(shí)間(實(shí)測(cè)建議不少于5 ms),整個(gè)測(cè)量周期很難控制在20 ms之內(nèi).換個(gè)說(shuō)法,50Hz的測(cè)量頻率使得測(cè)量距離被限制在一米以內(nèi),嚴(yán)重影響了實(shí)驗(yàn)的可操作性.盡管HC-SR04模塊的標(biāo)稱量程達(dá)到4米,但這么長(zhǎng)的距離會(huì)導(dǎo)致測(cè)量周期在50 ms以上,不能達(dá)到實(shí)驗(yàn)的要求.
(2) US-016模塊的輸出方式是模擬電平,即把距離轉(zhuǎn)換為輸出端口的電壓值再由數(shù)據(jù)采集模塊測(cè)量取值發(fā)送PC,它的轉(zhuǎn)換過(guò)程中必然經(jīng)過(guò)積分環(huán)節(jié),最終實(shí)際效果雖然沒(méi)有明確的測(cè)量周期限制但難以測(cè)量距離突變,從數(shù)據(jù)采集的曲線來(lái)看就是測(cè)量曲線被修飾圓滑了,出現(xiàn)了較大的高頻失真.
(3) US-100模塊可采用UART輸出模式(串口模式),工作過(guò)程簡(jiǎn)述如下:首先單片機(jī)向模塊Trig/TX管腳輸入0X55(波特率9600耗時(shí)<1ms),模塊發(fā)出8個(gè)40KHZ的超聲波脈沖(耗時(shí)約0.2ms),然后檢測(cè)回波信號(hào),仍以一米為例,5.88ms后檢測(cè)到回波信號(hào),然后模塊根據(jù)此時(shí)間計(jì)算距離(同時(shí)還檢測(cè)溫度對(duì)聲速進(jìn)行修正),最后將結(jié)果通過(guò)Echo/RX管腳以串口數(shù)據(jù)直接輸出給單片機(jī).輸出的距離值共兩個(gè)字節(jié),第一個(gè)字節(jié)是距離的高8位(HDate),第二個(gè)字節(jié)為距離的低8位(LData),單位為毫米(即距離值為(HData*256 +LData)mm).它與HC-SR04模塊主要區(qū)別是:測(cè)量值是以兩個(gè)字節(jié)的數(shù)據(jù)通過(guò)9600波特率串口輸出,不管距離是多少,輸出所耗的時(shí)間都是2*8/9600約1.6ms,而不像HC-SR04那樣輸出結(jié)果所需的時(shí)間會(huì)隨著距離的增大而增大.
US-100模塊的測(cè)量時(shí)序如圖2,采用該模塊進(jìn)行超聲波測(cè)距時(shí),如果設(shè)定測(cè)量周期為20 ms,考慮到測(cè)量間隔和其他時(shí)間,我們認(rèn)為實(shí)際測(cè)量過(guò)程時(shí)間可以達(dá)到12 ms,則最大測(cè)量距離可達(dá)340×12/2=2040mm,約為2米,比HC-SR04模塊更符合重力加速度測(cè)量實(shí)驗(yàn)的需求.
此外,US-100模塊內(nèi)帶自動(dòng)溫度測(cè)量并對(duì)結(jié)果進(jìn)行校正,也能有效提高實(shí)驗(yàn)對(duì)環(huán)境溫度的適應(yīng)性.從下表可以看出,溫度對(duì)超聲波速度的影響還是很大的,當(dāng)溫度從0變化到20攝氏度時(shí),超聲波速度變化量達(dá)到3.6%,已經(jīng)不能忽視.
所以,在反復(fù)測(cè)試對(duì)比后,最終決定采用US-100模塊作為距離測(cè)量的傳感器.
2利用arduino平臺(tái)實(shí)現(xiàn)超聲波測(cè)距和數(shù)據(jù)采集
Arduino是目前風(fēng)靡全球的開(kāi)源電子創(chuàng)新平臺(tái),它本質(zhì)上是一個(gè)經(jīng)過(guò)易用性封裝的AVR單片機(jī)系統(tǒng),具有13個(gè)數(shù)字輸入/輸出端口和5個(gè)模擬輸入/輸出端口,可以通過(guò)外接傳感器實(shí)現(xiàn)對(duì)各類物理量的測(cè)量和數(shù)據(jù)采集.結(jié)合專用的編程開(kāi)發(fā)環(huán)境,能夠快速簡(jiǎn)便地實(shí)現(xiàn)對(duì)傳感器進(jìn)行控制、數(shù)據(jù)采集并與PC計(jì)算機(jī)軟件結(jié)合,實(shí)現(xiàn)數(shù)字實(shí)驗(yàn)室的功能.
(1)系統(tǒng)硬件構(gòu)成:我們采用Arduino Uno主控板控制US-100超聲波測(cè)距模塊,并通過(guò)USB連接線連接計(jì)算機(jī),同時(shí)通過(guò)USB的5 V電源給主控板和模塊供電,架構(gòu)清晰制作容易.為了方便使用,我們又把主控板和模塊都安裝在一個(gè)鋁合金盒子里,使用時(shí)只需要把盒子放在測(cè)試處,然后通過(guò)USB連接線連接計(jì)算機(jī)即可.圖3即系統(tǒng)框架示意圖;圖4和圖5分別為各模塊實(shí)物圖和安裝后的成品圖.
(2)系統(tǒng)軟件設(shè)計(jì)和優(yōu)化:由于超聲波測(cè)距模塊已經(jīng)把發(fā)射、接收、計(jì)時(shí)整體設(shè)計(jì)在內(nèi),所以本系統(tǒng)的單片機(jī)程序很簡(jiǎn)潔,這也是采用成品測(cè)距模塊的原因,主程序只負(fù)責(zé)觸發(fā)模塊、接收數(shù)據(jù)、向計(jì)算機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)三個(gè)環(huán)節(jié).但想要得到比較穩(wěn)定精確的試驗(yàn)效果還有許多問(wèn)題需要解決,我們發(fā)現(xiàn)網(wǎng)絡(luò)和雜志常見(jiàn)的一些測(cè)距方案或?qū)嶒?yàn)都缺乏必要的嚴(yán)謹(jǐn)性,本次設(shè)計(jì)重點(diǎn)思考并優(yōu)化解決了如下幾個(gè)問(wèn)題:
問(wèn)題一,如何提高測(cè)量量程?
如前所述,我們采用US-100模塊進(jìn)行超聲波測(cè)距,摒棄了常用的HC-SR04模塊,能夠減少讀取測(cè)量結(jié)果的時(shí)間,從而把量程擴(kuò)大到2米左右,使之符合常見(jiàn)中學(xué)物理實(shí)驗(yàn)的要求.
問(wèn)題二,如何提高測(cè)量頻率?
為了進(jìn)一步降低測(cè)量周期、提高測(cè)量穩(wěn)定性,我們把Arduino向PC通訊常用的Serial.print命令改為Serial.write命令,每次發(fā)送四字節(jié)的二進(jìn)制數(shù)據(jù),前兩字節(jié)為數(shù)據(jù)標(biāo)志位,一方面可以作為起始位避免數(shù)據(jù)錯(cuò)位,另一方面第二字節(jié)還可以作為擴(kuò)展位以提供功能擴(kuò)展.后兩字節(jié)是二進(jìn)制的測(cè)量結(jié)果數(shù)據(jù),并設(shè)定傳輸波特率為115200,使數(shù)據(jù)傳輸時(shí)間減少到0.27 ms,向計(jì)算機(jī)實(shí)際通訊時(shí)間小于一毫秒,從而進(jìn)一步減小測(cè)量和通訊所需時(shí)間,保證測(cè)量頻率為50 Hz時(shí)具有足夠冗余時(shí)間,保障了試驗(yàn)的穩(wěn)定性.
問(wèn)題三,如何精確控制測(cè)量周期為20 ms?
測(cè)量周期的計(jì)時(shí)原則上可以由上位機(jī)或下位機(jī)決定,但實(shí)際上Windows作為多任務(wù)操作系統(tǒng)根本難以保證毫秒級(jí)的時(shí)間穩(wěn)定性,而單片機(jī)從架構(gòu)上來(lái)說(shuō)就具有較好的時(shí)間穩(wěn)定性,因此我們?cè)O(shè)定由單片機(jī)程序進(jìn)行測(cè)量周期的計(jì)時(shí)和比較.單片機(jī)程序的各個(gè)步驟都有一些微秒級(jí)的操作時(shí)間,這個(gè)時(shí)間是固定的,但唯有單片機(jī)與計(jì)算機(jī)通訊的命令受計(jì)算機(jī)影響時(shí)間穩(wěn)定性較差,有些類似程序沒(méi)有考慮周全導(dǎo)致程序整體的時(shí)間精確性達(dá)不到要求.我們的解決方案是把初始計(jì)時(shí)放在程序之首,然后就是數(shù)據(jù)發(fā)送環(huán)節(jié),之后是數(shù)據(jù)采集環(huán)節(jié),大于0.05%.
(3)核心代碼:
3PC數(shù)據(jù)采集與圖形化顯示程序
上述Arduino系統(tǒng)已經(jīng)完成了超聲波測(cè)距、數(shù)據(jù)采集并向計(jì)算機(jī)發(fā)送的工作,最后還需要通過(guò)一定的Windows程序接收數(shù)據(jù)、保存數(shù)據(jù),并能以圖形化顯示.為此,我們用Vb6.0編寫了數(shù)據(jù)接收和顯示程序,并命名為“GeekFlash數(shù)據(jù)采集器”,如下圖6是程序的運(yùn)行界面和某次動(dòng)態(tài)測(cè)距的曲線圖.限于篇幅,PC端程序不做詳細(xì)說(shuō)明.
4超聲波測(cè)距與采集在高中物理實(shí)驗(yàn)中的實(shí)踐案例
下面是采用本系統(tǒng)測(cè)量重力加速度實(shí)驗(yàn)的一組數(shù)據(jù),限于超聲波測(cè)距模塊的精度(實(shí)測(cè)在+-1 mm左右),去除首尾無(wú)效數(shù)據(jù),所測(cè)得重力加速度在9.7-9.8左右,學(xué)生不僅可以通過(guò)圖像直觀了解物體下落過(guò)程位移隨時(shí)間變化的特點(diǎn),也可以根據(jù)現(xiàn)場(chǎng)采集的數(shù)據(jù)計(jì)算當(dāng)?shù)刂亓铀俣戎?,在?shí)驗(yàn)誤差范圍內(nèi),其精確度、直觀性以及實(shí)驗(yàn)效率均大大優(yōu)于打點(diǎn)計(jì)時(shí)器的效果.