劉衛國 , 王紅彬
(1.國防科學技術大學 湖南 長沙 410073;2.77606部隊 西藏 拉薩 850000)
距離是描述建筑物平面結構的重要內容,建筑物尺寸的傳統測量手段都需要人員借助工具現地進行,但面對比較危險的建筑物時,傳統的測量手段勢必增加人員的傷亡幾率。隨著科學技術的發展,測距技術和無線傳輸技術日趨成熟,無人距離測量在特殊領域中將得到廣泛應用。利用超聲波測距成本低、精度高、速度快等技術特點,結合單片機、無線通信技術可對建筑物內部平面尺寸進行測量,并將數據無線傳至終端設備實時顯示。
超聲波測距系統由發射端和接收端兩部分組成。發射端由Arduino開發板、無線射頻發射模塊、天線、超聲波模塊及電源模塊組成。接收端由Arduino開發板、無線射頻接收模塊、天線和終端設備等組成。
在系統發射端,超聲波模塊HC-SR04對距離信號進行實時采集,在Arduino的控制下通過無線射頻發射模塊將距離數字信號發送至接收端;在系統接收端,在Arduino開發板的作用下,通過無線射頻接收模塊接收發射端發送過來的距離數字信號,通過串口通信模塊與PC機進行通信,在PC機中利用軟件讀取數據并繪制曲線。
本系統中所采用的Arduino UNO[1-2]是一塊采用USB接口的核心電路板,處理器核心是ATmega328,包括14個數字輸入輸出IO(其中6個可提供PWM輸出),6個模擬輸入IO,一個16 MHz晶體振蕩器,一個USB口(便于在線進行程序調試),一個電源插座和一個復位按鍵。
HC-SR04超聲波測距模塊可提供2~400 cm的非接觸式距離感測功能,測距精度可達到3 mm,模塊包括超聲波發射器、接收器和控制電路。模塊采用IO口TRIG觸發測距,給至少10 μs的高電平信號,之后模塊自動發送8個40 kHz的方波,自動檢測是否有信號返回,如有信號返回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間[3-4]。
nRF24L01是一款新型單片射頻收發一體器件,工作于2.4~2.5 GHz ISM頻段[5]。其內置頻率合成器、功率放大器、晶體振蕩器、調制器、低噪聲放大器等功能模塊,并融合了增強型ShockBurst技術,其中輸出功率和通信頻道可通過程序進行配置。nRF24L01具有極低的電流消耗,當工作在發射模式下發射功率為0 dBm時電流消耗為11.3 mA,接收模式時為13.5 mA,掉電模式和待機模式下電流消耗更低。本文采用nRF24L01+模塊,在原模塊的基礎上增加了PA和LNA。在發射端通過PA電路將nRF24L01的輸出功率放大,同時在接收端通過LNA電路增加接收信號的強度。
Arduino與nRF24L01+無線收發模塊之間利用同步串口SPI[6]進行通信。nRF24L01+的 SPI總線有 GND(接地)、VCC(1.9~3.6 V電源)、CE (使能發射或接收)、CSN (片選信號)、SCK(時鐘信號)、MOSI(數據輸入)、MISO(數據輸出)、IRQ(中斷標志位)。Arduino與nRF24L01+的連接圖如圖1所示。

圖1 Arduino與nRF24L01+的連接圖Fig.1 Connection diagram of Arduino and nRF24L01+
發射端(HC-SR04、nRF24L01+和 Arduino 連接)和接收端(nRF24L01+和Arduino連接)實驗電路連接如圖2所示。

圖2 發射端和接收端實驗電路連接圖Fig.2 Connection diagram of transmitting and receiving experimental circuit
對nRF24L01+的相關寄存器進行配置,設置為增強型ShockBurstTM發送模式,通信速率為 1 Mbit/s,晶振16 MHz,發射功率設置為0 dBm,MCU通過MOSI寫入數據,通過MISO讀出數據,設置通過nRF24L01+的數據輸入,保存到TX FIFO寄存器中,開始發送數據。在數據發送之后,讀取狀態寄存器的值并做出判斷,確定是否接收到應答信號,判斷自動重發次數是否達到最大值(10次)。如果在設定的應答時間內接收到應答信號,則認為數據成功發送到了接收端。如果在設定的時間范圍內沒有接收到應答信號,則重新發送數據,并且自動重發計數器自動加1。若自動重發次數達到最大值,則表明數據沒有發送成功,需要清除MAX_RT位讓數據繼續重發。發送程序流程圖如3所示。
發射程序中的主要函數如下:


圖3 nRF24L01+發送程序流程圖Fig.3 Flow chart of nRF24L01+sending program

unsigned char SPI_Read_Buf(unsigned char reg, unsigned char*pBuf, unsigned char bytes)//從寄存器"reg"讀無符號字符型變量
設置nRF24L01+為接收模式,與發射端相同的CRC配置、地址寬度、頻道和傳輸速率,拉高CE啟動接收,通過讀取狀態寄存器的值判斷是否有數據接收,若有數據,接收端通過自身通道地址與接收到的數據包中的地址進行匹配,若相同就接收該數據,若不同就放棄該數據,繼續等待接收。接收程序流程圖如圖4所示。

圖4 nRF24L01+接收程序流程圖Fig.4 Flow chart of nRF24L01+receiving program
接收程序中的主要函數如下:

unsigned char SPI_Write_Buf(unsigned char reg, unsigned char*pBuf,unsigned char bytes)//將 nRF24L01+的內容寫入緩沖區"*PBUF"
按照本方案設計的超聲波測距系統 (實物如圖5所示)經過建筑物現地測試,測量最大寬度8 m,最大高度4 m,超聲波模塊工作穩定,無線傳輸模塊傳輸距離符合要求,完全可以達到實際應用的目的。由于該系統目前還是初具功能的試驗品,測距平臺上功能模塊不夠豐富,應搭配更多的傳感器模塊,提升系統功能。

圖5 測距系統實物圖Fig.5 Entity diagram of ranging system
本文著重介紹了基于nRF24L01+與Arduino的超聲波測距系統的設計,通過較低的成本實現了超聲波測距、數據無線傳輸、PC機實時接收顯示并繪制曲線等功能,可搭載不同的移動平臺,完成建筑物測距任務,具有一定的實用價值。
[1]蔡睿妍.Arduino的原理及應用[J].電子設計工程,2012,20(16):155-157.
[2]王欣,馬青玉.基于Arduino的LED光立方設計[J].南京師范大學學報,2013,13(4):24-28.
[3]劉楚紅,董鎮,錢宇捷,等.基于Arduino的倒車雷達系統設計[J].現代電子技術,2014,37(17):148-150.
[4]蘇琳.基于HC-SR04的超聲波測距器的設計 [J].科技信息,2012(9):125-126.
[5]孫志遠.2.4 GHz無線傳感器網絡節點通信模塊的設計與實現[D].長沙:國防科學技術大學,2010.
[6]戈惠梅,徐曉慧,顧志華,等.基于Arduino的智能小車避障系統的設計[J].現代電子技術,2014,37(11):118-120.