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