劉怡沛,江龍韜,秦 嶺,張 卓
(河海大學 物聯網工程學院,江蘇 常州 213002)
隨著國內智慧環保理念的發展,如何推動智慧環保落地成為各地政府關心的問題[1-3]。在推進智慧環保落地的過程中,最重要的是環境監測任務[4]。但由于部分地區環境復雜多樣,傳統的非移動式監測無法檢測空間狹小,環境惡劣、位置險要的環境[5-6];人力監測方式耗費過多力資源,且效率低下;部分地區森林火災頻發,如何在保障消防員安全的前提下進行環境監測,避免不必要的犧牲,也成為當下的焦點問題[7-8]。
因此設計出一種可遠程控制的環境監測機器人成為亟待解決的問題[9]。針對此需求,郭威[9]等設計了一種可移動滑桿式環境監測機器人,環境監測效果良好,但對環境要求高,需搭建滑桿供機器人滑行;趙靜[10]等設計了一種基于樹莓派的VR環境監測機器人,解決了監測對環境要求高的問題,但樹莓派成本較高。本文設計了一種基于STM32嵌入式系統的可移動環境監測機器人。通過控制平臺的搖桿模塊控制檢測平臺的移動,檢測平臺上通過藍牙實時傳送監測數據給控制平臺,并將環境參數等顯示在遠程控制平臺的OLED上,且當前方存在障礙物時,檢測平臺發出警報,操控者此時需改變行進方向。該機器人具備環境監測、無線傳輸、遠程控制的功能,解決了監測環境受限的問題,也降低了成本,對于推動智慧環保的建設和檢查火災等災情情況,保障消防員安全等具有重要幫助。
該系統方案采用意法半導體公司生產的STM32F103C8T6微控制器作為機器人的主控芯片。其中,該系統由遠程控制平臺和檢測平臺兩部分組成。其中,硬件電路由溫濕度傳感器模塊、光照傳感器、煙霧傳感器和超聲波測距模塊、OLED顯示模塊、蜂鳴器報警模板等組成。主要完成對環境中溫度、濕度、光照強度、障礙物距離和空氣中顆粒的濃度的測量及障礙物判斷和報警。軟件部分主要由藍牙、測試平臺的行進算法和舵機控制算法組成。檢測平臺和遠程控制平臺通過HC-05藍牙傳遞數據。遠程控制設備的主控輸入有按鍵模塊和搖桿模塊;機器人的主控輸入有和超聲波測距模塊,4個傳感器的數據通過藍牙傳遞給遠程控制設備的主控,再通過OLED分別顯示。通過按鍵模塊的4個按鍵實時更新對應的4個傳感器的數據并通過OLED顯示,搖桿模塊控制機器人行進方向的目標。基于嵌入式的環境監測機器人系統總體設計如圖1所示。

圖1 系統構成
具體實現流程如下:
1)操控遠程控制平臺上的搖桿控制檢測平臺的行進方向,搖桿的偏移度控制行進速度。檢測平臺能夠實時讀取與障礙物的距離,設定安全距離閾值,當實時讀取的距離小于安全閾值時,蜂鳴器報警,操控人員需改變行進方向。
2)遠程控制平臺上有4個按鍵,分別對應機器人的溫濕度檢測模塊、光照檢測模塊、空氣質量檢測模塊和超聲波測距模塊的數據讀取,并更新顯示在遠程控制平臺的OLED上。
系統目標為實現可遠程控制的環境監測機器人。能夠實時監測環境狀態、解決日常環境下監測低效的難題,提高了測量精度,實現了智能化控制,因此需要實現以下兩個目標。
1)高效性:若檢測平臺的MCU實時采集4個環境傳感器的監測數據,則系統總體的反應速度將會被影響,且過于頻繁的數據接收將會使系統內部系統穩定性降低。因此設計的機器人系統通過按鍵控制讀取目標傳感器的數值并在OLED更新顯示,避免了長時間連續的接收冗雜傳感器數據的問題,能夠有效提高環境監測的效率和實際情況下工作的穩定性[11]。
2)智能化:環境監測機器人前行的過程中會出現障礙物或道路崎嶇的困境,系統設定了障礙物安全距離閾值,當真實距離小于閾值時,蜂鳴器發出警報,提示操作者更改行進方向。
系統設計中需滿足硬件的使用要求及設計要求,參數的具體范圍如表1所示。

表1 系統相關參數表
系統硬件涉及到的硬件模塊主要有主控模塊、溫濕度傳感器電路、光照傳感器電路、煙霧傳感器電路和超聲波測距電路。
系統主控選擇意法半導體公司的基于Cortex-M3內核的32位微控制器STM32F103C8T6作為主芯片,系統最高工作頻率可達72 MHz,內存包含64 Kb的Flash和20 Kb的SRAM。其系統主要由4個控制單元和4個受控單元(SRAM、FLASH、FSMC和AHB2APBx)組成,其中AHB是一種高性能的系統總線,用于連接CPU和DMA等高性能模塊,由主模塊、從模塊和基礎結構3個部分過程;APB是一種高級外圍總線,主要用于UART等外設的連接,其主模塊是APB橋,數據的傳輸均由主模塊發起、從模塊回應。
且含有3個16位的計時器和1個16位的PWM計時器、2個SPI、3個UART,37個GPIO口和12位的ADC,由于其外設資源眾多,工作的時鐘頻率不盡相同,因此采用5個時鐘源,有8 MHz的系統內部時鐘振蕩器HSI,40 MHz的實時時鐘振蕩器。芯片的封裝體積小,性價比高,更具實用性。
溫濕度傳感器選擇的型號是DHT11,是一款經校準后傳輸數字信號的復合型傳感器。該傳感器與MCU間通過DATA數據線傳輸,傳輸方式屬于半雙工通信方式。數據傳輸格式為一次傳輸40 bit,順序依次為:8 bit的溫度整數部分+8 bit的溫度小數部分+8 bit的濕度整數部分+8 bit的濕度小數部分+8 bit的校驗和[12]。通過校驗位判斷傳輸過程是否出錯,提高傳輸的穩定性和高效性。
其電路應包含一個電阻式感濕元件和一個NTC感溫元件。外界濕度越高,電阻值越小; NTC感溫元件與1 kΩ的電阻串聯,通過采集電阻兩端電壓值的變化來確定環境溫度。其中需要加入一個4.7 kΩ的上拉電阻,可以提高輸入信號的噪聲容限,增強電路的抗干擾能力。電路設計如圖2所示。

圖2 溫濕度傳感器的電路設計
光照傳感器選擇的型號是GY-30,采用BH1750FVI芯片。該傳感器有5個端口,除VCC和GND外,還有SCL、SDA和ADDR,因此BH1750FVI通過IIC協議與MCU進行通信,其中ADDR在該傳感器中的作用為控制讀寫指令,當ARRD=0xB8/0x46時為寫操作,ARRD=0xB9/0x47時為讀操作。MCU傳遞8 bit控制字,由7 bit的發送器地址和1 bit的寫命令組成,BH1750FVI收到后應答,再由MCU發送測量指令,BH1750FVI收到后發送高8位的數據,在單片機應答后,在傳送低8位數據,此時一次通信結束[13]。
BH1750內部由光敏二極管、運算放大器、ADC采集和晶振等組成。光敏二極管將光信號轉變為電流信號,經過運算放大器放大后,通過ADC采集電壓,轉換成16位二進制數存貯到內部寄存器中。且光照強度越高,光電流越大,采集到的電壓越大。光照強度與電壓之間存在對應關系,但二者之間不是嚴格的線性關系。BH1750FVI芯片內部對于采集到的電壓又進一步地進行了線性處理,因此處理后的電壓與光照強度近似線性。
從BH1750采集到的數據并不是最終的光照強度,需要下列公式進行轉換,其中,Value為實際值,Measured為測量值,trans為透光率,mode為模式:
(1)
圖3中,C3電源的濾波電容,能夠使工作性能更加穩定。光照傳感器的電路設計如圖3所示。

圖3 光照傳感器電路設計
煙霧傳感器選擇的型號是MQ-135。對空氣中的硫化物、氨氣和污染氣體的靈敏度高,是適應森林火災監測、城市環保等多場合的低成本傳感器。MQ-135有兩種輸出:AOUT和DOUT,分別對應模擬量輸出和數字量輸出,選擇模擬量輸出,將LM393的輸出電壓作為參考值,按照換算關系:電壓每升高0.1 V,實際被測氣體的濃度增加200 pm。滿足以下換算公式:
(2)
煙霧傳感器常用電路有兩種,本文選用比較器電路監控。將MQ135的2引腳,即隨煙霧濃度變化的直流信號做比較器的2腳,IN作為比較器的門檻電壓。當煙霧濃度高于門檻電壓時,LM393的輸出電平為0 V,則D1燈亮;當煙霧濃度低于門檻電壓時,LM393的輸出電平為VCC,D1燈滅。電路設計如圖4所示。

圖4 煙霧傳感器的電路設計
超聲波測距模塊選擇的型號為HC-SR04,有4個端口:VCC、GND、Trig(控制端)、Echo(接收端)。其中模塊會自動發送方波,即通過TRIG端通過傳輸10 μs的高電平型號觸發測距,此時模塊會自動發送8個40 kHz的方波,并檢測是否有信號返回。若前方存在障礙物,則通過Echo輸出高電平,則距障礙物的距離dis(m)為:
(3)
其中:Vvoice為聲速,t為超聲波從發射到返回的時間。

圖5 超聲波測距的電路設計
超聲波電路主要由放大電路、選頻電路和比較電路組成。其中Net端是漏極開路。當開始測距時,TRIG端發送一個10 μs的高電平觸發脈沖,此時NET端引腳置低,濾除干擾信號,此時該模塊發送8個40 kHz的脈沖來啟動定時器和開中斷,等待接收到接收觸發中斷信號后再關閉定時器、中斷,計算計時器的時間。在此電路中,用到兩級運放,均由GS324運算放大器放大,該放大器具有低輸入偏置電流、失調電流和快速電壓轉換率的優點。在第一級放大中,放大倍數為6.2倍,二級放大倍數為7.5倍。超聲波的電路設計如圖5所示。
系統的軟件部分采用STM32F103C8T6系統進行C語言的編輯,Keil 5 MDK編譯軟件作為系統的編譯平臺。
首先完成各類傳感器的初始化和藍牙配對,OLED顯示各傳感器參數的顯示界面,若此時按鍵未按下,機器人跟隨遠程控制設備的控制狀態行進或停止;若按鍵按下,則讀取對應傳感器的數據,并通過OLED更新顯示,并判斷此時距障礙物的距離是否小于安全閾值,若小于安全閾值,則蜂鳴器報警,發出警告。軟件設計部分主要分為三方面:藍牙配對、串口中斷算法和機器人行進控制算法。具體流程如圖6所示。

圖6 軟件系統的設計流程圖
環境監測機器人的藍牙選擇了正點原子公司的HC-05模塊。該模塊是一款高性能、主從一體的藍牙串口,支持波特率范圍為4 800~1 382 400 baud,機器人的藍牙波特率設定為38 400 baud,8位數據位,1位停止位,無校驗位。機器人傳輸讀取到的傳感器數據至遠程控制設備,需通過藍牙的AT指令完成藍牙配對,并設置主機和從機。
實際應用中的步驟如下:
1)進入AT模式。將AT引腳置高,當藍牙模塊state燈變為慢閃,則表明已經進入AT模式;
2)恢復藍牙的默認狀態:打開串口調試助手,調用AT+ORGL/r/n 即恢復默認設置;
3)設置藍牙名稱:配置第一個藍牙的名稱:AT+NAME= Bluetooth-Marster/r/n(主),第二個藍牙:AT+NAME= Bluetooth-Slave/r/n(從);
4)設置藍牙的配對碼為:AT+PSWD= 0000/r/n;
5)將第一個藍牙設置為主機: AT+ROLE=1/r/n,并將第二個藍牙設置為從機:AT+ROLE=0/r/n;
6)配置串口參數:配置波特率、停止位和校驗位:AT+UART=115 200,0,0/r/n,設置藍牙通信串口波特率為9 600,停止位1位,無校驗位;
7)查詢地址: AT+ADDR?/r/n,得到地址為:2015:2:120758;
8)綁定藍牙: AT+CMODE=1/r/n(調節為綁定模式) AT+BIND=2015,2,120758/r/n
至此,藍牙已完成配對。此時機器人可實現與遠程控制設備的數據傳輸。
3.2.1 遠程控制設備的傳輸協議
藍牙完成配對后,通過串口傳輸數據。遠程控制設備控制機器人運動和按鍵選擇對應的傳感器讀取數據需要通過串口函數USART_SendData()傳遞給機器人,串口通信協議如表2所示,采用數據幀格式:{0xFF、0xFE、spe_dat,x_value&0x00FF、x_value&0xFF00、y_value&0x00FF、y_value&0xFF00}。

表2 遠程控制設備傳輸協議的語法解釋
由數據幀順序,0xFF和0xFE為數據幀的幀頭,兩個幀頭能夠大幅提高數據傳遞的準確性,同時避免過多幀頭導致的數據傳輸效率低的問題。spe_dat是中斷檢測到的被按下按鍵的值,取值為0-4,0則是未按下,無需檢測,1-4分別對應遠程控制設備上的4個按鍵、也對應檢測平臺的4個傳感器:空氣質量傳感器、溫濕度傳感器、光照傳感器和超聲波傳感器。x_value&0x00FF和x_value&0xFF00分別代表x_value的低八位和高八位,y_value&0x00FF和y_value&0xFF00分別代表y_value的第八位和高八位。通過將高八位左移八位,與低八位相加,即可恢復x_value和y_value的原始數據。
x_value=x_value&0x00FF+x_value&0xFF00?8
(4)
y_value=y_value&0x00FF+y_value&0xFF00?8
(5)
檢測平臺獲得x_value和y_value的原數據后,可按照機器人的行進控制算法,計算運行方向。
3.2.2 機器人的傳輸協議
檢測平臺接收到通過串口傳遞來的按鍵數值后,讀取響應的傳感器數據,將讀取到的參數再次通過串口傳輸,串口傳輸協議如表3所示。
由于一次僅傳輸一個傳感器的讀取數據,此次的傳輸的具體值根據檢測平臺接收到的按鍵值變化。當檢測平臺收到遠程控制設備傳來的參數spe_dat=1時,此時對應空氣質量傳感器,讀取到空氣質量數據air,則Temp1此時為空氣質量air的低八位,Temp2此時為空氣質量air的高八位,光照傳感器和距離傳感器的格式也是如此。當機器人收到遠程控制設備傳來的參數spe_dat=2時,此時對應溫濕度傳感器,讀取到溫度數據wendu、濕度數據shidu,則Temp1此時為溫度值,Temp2此時為濕度值。

表3 系統間傳輸協議的語法解釋
3.3.1 舵機控制算法
舵機是一種帶有輸出軸的伺服電機,是由可變寬度的脈沖信號進行控制的。PWM信號是脈寬調制信號,即通過改變脈沖時間寬度實現信號控制,舵機的PWM信號控制周期是20 ms,基準寬度為1.5 ms,即對應圖7中的中間位置,此時的轉動角度為90°。脈沖持續時間每增加/減少0.5 ms,對應轉動順時針/逆時針45°。本系統中,檢測平臺選用的舵機型號為MG995R,為180°可轉動舵機,可控制的角度范圍為0~180°,脈沖寬度范圍為0.5~2.5 ms[14],脈沖范圍對應的多級轉動如圖7所示。

圖7 PWM信號控制舵機示意圖
1)分頻值的確定:脈沖輸出是利用通用定時器通過GPIO引腳輸出。檢測平臺的主控中選用定時器3,先初始化TIM3,選擇向上計數模式[15]。由舵機信號的控制周期20 ms計算對應頻率脈沖50 Hz。
設置自動重裝載寄存器周期的值為1 999,TIMx時鐘頻率的預分頻值為719,根據分頻計算公式可知:
(6)
式中,arr為PWM輸出高電平的計數時間,psc為預分頻計數器的值。
2)由信號控制舵機轉動:定時器輸出模式選擇PWM1模式。在輸出不同高電平占空比的過程中需要通過調用定時器通道1比較函數TIM_SetCompare1(TIM2,arr)來裝填TIMx->CCR1寄存器的值。第一個參數TIM2是操作的定時器,第二個參數arr是輸出PWM的高電平計數時間。通過設定不同的計數時間,就可以輸出不同高電平占空比的PWM方波[16]。通過輸出的舵機信號來控制檢測平臺的方向轉動角度,定義函數Steer_Angle(u16arr);
void Steer_Angle(u16 arr)
{
TIM_SetCompare1(TIM2,arr);
}
其中,arr的值為機器人接收到的搖桿模塊x值經過轉換后,范圍在[50,250]之間。將arr值裝填進入TIMx->CCR1之后,arr的值將會與TIMx_CNT寄存器的計數值對比,當計數值低于arr時引腳為高電平,當計數值高于arr時引腳為低電平,因此,通過控制arr的值就可以控制舵機輸出對應的角度中arr的值與角度轉換關系如下所示:
(7)
其中:θ為舵機輸出角度,當其為90°時,檢測平臺方向回正。
3.3.2 檢測平臺行進控制算法
圖8為行進控制算法的流程圖,通過遠程控制設備的搖桿模塊轉動控制檢測平臺前進、后退和左右轉彎的方向,搖桿模塊具有(X,Y)2軸模擬輸出,且輸出電壓值x和y的范圍為0~4 095。x和y的數值由藍牙通過USART通信傳遞給檢測平臺的主控。由于檢測平臺是由舵機控制轉向,因此將轉化后用于控制舵機的參數tempx控制范圍在[50,250],對應舵機的占空比(0.5~2.5 ms),同時對應舵機的轉動角度[-90°,90°]。將控制方向的參數tempy控制范圍在[-100,100],利用轉換公式即可完成轉換:
tempx=150-(x-2 048)*0.048 828 125
(8)
tempy=(y-2 048)*0.048 828 125
(9)

圖8 機器人行進控制算法流程圖
控制前進/后退方向:當tempy>0時,標記方向dir=1,即檢測平臺前進;
當tempy<0時,標記方向dir=0,即檢測平臺后退,并將取反,取絕對值。
控制左右轉彎方向:由于tempx和tempy的范圍不一致,因此先通過公式
tx=tempx-150
(10)
因此將tx的范圍控制為[-100,100]。行進速度為:
(11)
通過函數Steer_Angle(tempx)控制左右轉彎角度,Motor_Power(speed,dir)函數控制行進方向和速度。
此部分函數定義為Motor_Power(power,dir), power為速度,dir為前進和后退的標志位,代碼如下:
void Motor_Power(u16 power,u8 dir)
{
u8 arr;
if(dir==1)
{
arr = power;
TIM_SetCompare1(TIM4,arr);
TIM_SetCompare3(TIM4,arr);
TIM_SetCompare2(TIM4,0);
TIM_SetCompare4(TIM4,0);
}
else
{
arr = power;
TIM_SetCompare1(TIM4,0);
TIM_SetCompare3(TIM4,0);
TIM_SetCompare2(TIM4,arr);
TIM_SetCompare4(TIM4,arr);
}
}
當計算出的y<0時,dir=0,檢測平臺后退;計算出的y>0時,dir=1,檢測平臺前進。此處調用了庫函數TIM_SetCompare1 (TIM4,arr),該函數的作用是設置TIM4->CCR1的值,通過比較TIM4_CNT與TIM4->CCR1, 就可以控制定時器引腳高低電平的輸出,進而通過設定不同的arr就可以輸出不同高電平占空比的PWM波來類比不同的電壓模擬量,以此來控制檢測平臺前行的速度。
由上文的舵機控制算法和檢測平臺行進控制算法,就可以將遠程控制設備的X,Y雙軸模擬偏移量,通過藍牙傳輸給檢測平臺,進而控制其方向和速度。
為了驗證本文設計的基于嵌入式的可移動環境監測機器人在現實生活中的環境監測準確性,與各試驗點的真實環境數據進行對比。實驗地點分別在操場、實驗室和地下停車場,各試驗點經過30次實驗。本次實驗主要針對傳感器讀取的準確度測試[17-18],同時判斷其遇障報警功能。
首先測試環境狀態監測機器人的遠程控制功能是否正常,通過對檢測平臺及遠程控制設備進行供電,待藍牙連接完成后,推動搖桿進行上下左右移動的測試,測試結果表明,檢測平臺可以根據發出的指示進行運動,當改變搖桿在Y軸上的狀態時,檢測平臺會相應的向前向后變速行駛,當改變搖桿在X軸上的狀態時,檢測平臺的舵機會相應的轉動,決定檢測平臺的前進方向。
檢測平臺的舵機跟隨遠程控制設備的轉動正常行駛,經過實際的測試表明,檢測平臺可以很好的聽從遠程控制設備的命令進行移動,可以滿足日常場景下的遠程控制需求。
接著對各傳感器的檢測功能進行測試,看其是否能夠傳回實時環境的目標監測數據,傳送回來的數據在OLED上更新顯示。
OLED顯示屏上包括了DHT11溫濕度傳感器、GY-30光照傳感器、HCSR04超聲波傳感器、MQ135空氣質量檢測傳感器回傳回來的各種數據,從上到下分別是距離、溫度、濕度、光照強度、空氣質量等環境監測狀態[19]。實驗的測試結果如下:
經過30次測試,部分測試數據如表4所示。

表4 實驗室部分測試結果
操場測試結果:經過30次測試,部分測試數據如表5所示。

表5 操場部分測試結果
地下停車場測試結果:經過30次測試,部分測試數據如表6所示。
由上述在3個不同的測試地點中,檢測平臺各傳感器的測試結果和實際結果對比基本一致,綜合準確率達到97.7%。

表6 地下停車場部分測試結果
但在實驗室和地下停車場時,由于在室內時受到照明燈的影響,在不同的位置上光照強度會由于有輕微波動,因此在實驗室和地下停車場的光照強度有波動。本次測試中,將安全距離設定為10 cm,在實驗過程中遇到障礙物時報警功能正常。綜上,實驗結果達到預期目標。
未來無論在消防救助領域還是在狹隘、復雜空間下的環境監測和高污染地區的環境檢測等,可移動的環境監測機器人都將發揮巨大的作用,推進智慧環保落地,檢測危險環境、保護消防員安全[20-21]。本文設計的基于嵌入式的可移動環境監測機器人能夠通過遠程控制平臺的搖桿控制檢測平臺行駛,并通過檢測平臺上的傳感器完成對周圍環境的高精度檢測,通過藍牙傳遞回遠程控制平臺,并通過OLED顯示實時的監控數據。經過多場景測試,環境監測機器人具有較高的穩定性,各項指標達到了預期結果,執行任務時運行穩定。未來考慮將藍牙換用傳輸距離更遠的WIFI模塊;加入攝像頭模塊,返回檢測現場環境狀態和拓展環境監測的指標[22]。