張竣朋,崔志濤,孫 振,王逸卓
(1.合肥工業(yè)大學(xué)電子科學(xué)與應(yīng)用物理學(xué)院,安徽合肥 230009;2.合肥工業(yè)大學(xué)儀器科學(xué)與光電工程學(xué)院,安徽 合肥 230009)
隨著居民城鎮(zhèn)化比例的提升,相比于農(nóng)村,如今火災(zāi)和氣體泄漏的事件屢有發(fā)生,因此有必要通過(guò)氣體檢測(cè)儀來(lái)檢測(cè)目的場(chǎng)所易燃易爆氣體濃度,從而判斷是否發(fā)生氣體泄漏。
氣體檢測(cè)儀有固定式和手持式兩種,其中固定式檢測(cè)儀較為笨重,使用不便;手持式檢測(cè)儀雖然便捷,但需要人到達(dá)室內(nèi)手持設(shè)施進(jìn)行檢測(cè),這在室內(nèi)氣體成分尚不明確的情況下,易使檢測(cè)者陷入危險(xiǎn)境地。
因此計(jì)劃設(shè)計(jì)可無(wú)碰撞行走、可檢測(cè)房間易燃易爆氣體的智能小車尤其必要,既能夠有手持式檢測(cè)儀的便捷性,又能夠降低因室內(nèi)檢測(cè)對(duì)人造成的安全風(fēng)險(xiǎn)。
該智能小車以Arduino Uno R3 為主板,搭配了超聲波測(cè)距模塊、易燃易爆氣體檢測(cè)模塊、藍(lán)牙模塊和舵機(jī)模塊,集成了自動(dòng)避障、遙控回收、氣體檢測(cè)和實(shí)時(shí)傳輸數(shù)據(jù)等功能。
系統(tǒng)分為主控模塊、電源模塊、測(cè)距模塊、電機(jī)驅(qū)動(dòng)模塊、無(wú)線通信模塊和氣體檢測(cè)模塊6 個(gè)部分。系統(tǒng)總體框圖如圖1 所示。
圖1 系統(tǒng)總體框圖
據(jù)此設(shè)計(jì)的智能小車實(shí)物圖如圖2 所示。
圖2 小車實(shí)物圖
2.1.1 MQ-2傳感器簡(jiǎn)介
MQ-2 傳感器具有廣泛的應(yīng)用,適用于液化氣、丙烷、氫氣及煙霧等氣體檢測(cè)。其使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫,故而靈敏度高。此傳感器可檢測(cè)多種可燃性氣體,是一款適合多種應(yīng)用的低成本傳感器。
2.1.2 工作原理
當(dāng)傳感器所處環(huán)境中存在可燃?xì)怏w時(shí),傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大,電阻隨之減小,MQ-2 模塊有4 個(gè)引腳VCC、GND、D0和A0。其中D0 為開關(guān)信號(hào)(TTL)輸出,TTL 輸出有效信號(hào)為低電平,即當(dāng)輸出低電平時(shí)信號(hào)燈亮。A0為模擬信號(hào)輸出,模塊內(nèi)部電路將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出電壓信號(hào),因此濃度越高,輸出電壓越高。
圖3 為MQ-2 實(shí)物圖,圖4 為MQ-2 引腳說(shuō)明圖,圖5 為其電路原理圖。由原理圖分析,MQ-2的4 腳輸出隨煙霧濃度變化的直流信號(hào)流入比較器U1A的2 腳,通過(guò)電阻Rp獲得比較器的門檻電壓。當(dāng)煙霧濃度較大,輸出電壓高于門檻電壓時(shí),比較器輸出低電平,此時(shí)LED 亮;反之當(dāng)濃度較低,則LED 滅。
圖3 MQ-2實(shí)物圖
圖4 MQ-2引腳說(shuō)明圖
圖5 MQ-2電路原理圖
2.1.3 MQ-2靜、動(dòng)態(tài)電壓測(cè)試
由于MQ-2 在正常環(huán)境下也會(huì)輸出電壓,這一電壓稱為靜態(tài)電壓。將傳感器和Arduino 相連,打開電源,預(yù)熱2 min,用萬(wàn)用表測(cè)量此時(shí)的模擬輸出端口的靜態(tài)電壓,測(cè)量結(jié)果如表1 所示。
表1 MQ-2靜態(tài)電壓
之后通過(guò)點(diǎn)燃干燥廢紙產(chǎn)生干燥煙霧模擬實(shí)景,測(cè)試煙霧源頭與傳感器的距離對(duì)輸出電壓的影響,此時(shí)電壓為動(dòng)態(tài)電壓。
1)距傳感器5 cm 處點(diǎn)燃干燥廢紙產(chǎn)生煙霧飄入傳感頭,測(cè)試輸出電壓,如表2 所示。
表2 傳感器距煙霧5 cm時(shí)的輸出電壓
此時(shí)動(dòng)態(tài)電壓比靜態(tài)電壓提高了0.4 V 左右,從而在實(shí)驗(yàn)層面驗(yàn)證了輸出電壓會(huì)因氣體濃度變大而增大的結(jié)論。
2)當(dāng)傳感器距離煙霧變?yōu)?0 cm 時(shí),方法同上,輸出電壓如表3 所示。
表3 傳感器距煙霧20 cm時(shí)的輸出電壓
此時(shí)動(dòng)態(tài)電壓比靜態(tài)電壓提高了0.2 V 左右,較距離5 cm的情況降低了0.2 V,這說(shuō)明距煙霧源頭越遠(yuǎn),電壓越小,即檢測(cè)到的濃度越低,與經(jīng)驗(yàn)相符。
2.2.1 測(cè)距原理
利用超聲波在空氣中的傳播速度已知,采用回波時(shí)間法,測(cè)量聲波在發(fā)射后遇到障礙物反射回來(lái)的時(shí)間,由發(fā)射和接收的時(shí)間差計(jì)算出發(fā)射點(diǎn)到障礙物的實(shí)際距離。測(cè)距公式為l=c×t/2。其中l(wèi)為測(cè)量的距離;c為超聲波在空氣中的傳播速度;t為發(fā)射到接收的時(shí)間差。
超聲波的傳播速度受空氣密度影響,空氣密度越高則超聲波的傳播速度越快,而空氣的密度又與溫度有著密切的關(guān)系,近似公式為c=c0+0.607×t。其中c0為零度時(shí)的聲波速度332 m/s;t為實(shí)際溫度,單位為℃。
2.2.2 模塊工作步驟
1)采用IO 觸發(fā)測(cè)距,給出至少10 μs的高電平信號(hào)。
2)模塊自動(dòng)發(fā)送8 個(gè)40 kHz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回。
3)若有信號(hào)返回,則通過(guò)IO 口輸出一高電平,高電平持續(xù)時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。
4)使用測(cè)距公式計(jì)算出測(cè)試距離。
此模塊有4 個(gè)引腳:VCC、GND、Trig和Echo。Trig 為發(fā)射端,Echo 為接收端。
應(yīng)當(dāng)注意,測(cè)距時(shí),被測(cè)物體的面積不少于0.5 m2,且平面要求盡量平整,否則會(huì)影響測(cè)量。
在藍(lán)牙模塊與氣體傳感器的連接使用測(cè)試中,需要在手機(jī)端發(fā)送指令(如遙控或自動(dòng)避障)到藍(lán)牙,同時(shí)需要藍(lán)牙將氣體傳感器模塊的氣體數(shù)據(jù)傳給手機(jī)端,如果只用一個(gè)藍(lán)牙則需不斷更換主從設(shè)置,同時(shí)發(fā)送與接收數(shù)據(jù)易造成信息亂碼等系統(tǒng)不穩(wěn)定情況,故選擇用兩個(gè)藍(lán)牙模塊,一個(gè)發(fā)送數(shù)據(jù),一個(gè)接收數(shù)據(jù),而為了避免藍(lán)牙分辨混淆,選擇HC-05、HC-08 兩種不同的藍(lán)牙模塊。由于Arduino 上的RX、TX 引腳有限,因此選擇軟串口的方法,選擇開發(fā)板上兩個(gè)未使用的2、3 引腳,分別定義為RX、TX,作為另一藍(lán)牙的收發(fā)引腳連接。
軟串口就是用程序模擬硬串口實(shí)現(xiàn)通信的功能,可以在Arduino 主板的引腳進(jìn)行模擬實(shí)現(xiàn)。
圖6 為系統(tǒng)主程序流程圖。
圖6 系統(tǒng)主程序流程圖
首先對(duì)Arduino 以及各個(gè)模塊進(jìn)行初始化,手機(jī)上選擇避障模式,然后進(jìn)行超聲波測(cè)距,判斷接下來(lái)的路線,進(jìn)行小車的無(wú)碰撞到達(dá)目的地,并完成氣體傳感器的數(shù)據(jù)采集,采集完畢后,系統(tǒng)通過(guò)藍(lán)牙模塊將數(shù)據(jù)傳輸?shù)绞謾C(jī)App 予以顯示,最后通過(guò)手機(jī)App 遙控小車得以返回。
3.2.1 車體運(yùn)動(dòng)及模塊初始化
1)首先定義車體運(yùn)動(dòng)的5 種狀態(tài),即向前、向后、向左、向右與停止,再用Arduino 中的函數(shù)SoftwareSerial mySerial(2,3)定義軟串口,即拓展2、3引腳為新的RX、TX 引腳。
之后定義4 個(gè)減速電機(jī)的引腳,再進(jìn)行舵機(jī)引腳與超聲波模塊的初始化,完成避障功能的模塊初始化工作。
2)小車5 種運(yùn)動(dòng)狀態(tài)算法如下:
前進(jìn)狀態(tài)時(shí),四車輪全部設(shè)置為正轉(zhuǎn)(即電機(jī)正轉(zhuǎn))。
后退狀態(tài)時(shí),車輪全部設(shè)置為反轉(zhuǎn)。
左轉(zhuǎn)時(shí),左側(cè)車輪設(shè)置為停止運(yùn)動(dòng),右側(cè)車輪設(shè)置為正轉(zhuǎn)(也可左側(cè)反轉(zhuǎn),右側(cè)正轉(zhuǎn),此算法使轉(zhuǎn)彎速度更快)。
右轉(zhuǎn)時(shí),右側(cè)車輪設(shè)置為停止運(yùn)動(dòng),而左側(cè)車輪設(shè)置為正轉(zhuǎn)。
3.2.2 設(shè)置小車命令模式
初始化完成之后,開始設(shè)置小車的命令模式為避障模式或遙控模式,兩種模式實(shí)現(xiàn)如下:
1)避障模式:向前直行,并同時(shí)測(cè)量小車與前方障礙物的距離,當(dāng)距離小于30 cm 時(shí)(設(shè)置為30 cm的目的是小車從運(yùn)動(dòng)到停止需要一段剎車距離,若距離過(guò)小,則可能與墻體碰撞),小車停止運(yùn)動(dòng),超聲波模塊在舵機(jī)的帶動(dòng)下向左旋轉(zhuǎn)并測(cè)量與左側(cè)障礙物的距離,測(cè)量完畢后,向右轉(zhuǎn)并測(cè)量右側(cè)與障礙物的距離。倘若左側(cè)距離小于右側(cè)距離,即右側(cè)小車可活動(dòng)空間大,則小車向右運(yùn)動(dòng),反之則向左運(yùn)動(dòng)。同時(shí)設(shè)定當(dāng)超聲波的測(cè)量距離大于50 cm 時(shí),返回距離統(tǒng)一設(shè)置為50 cm(數(shù)據(jù)超過(guò)50 cm 之后則測(cè)量精度降低,且之后的距離數(shù)據(jù)為無(wú)效數(shù)據(jù)),若距離小于50 cm 則返回當(dāng)前真實(shí)測(cè)量的距離。
2)遙控模式:需調(diào)用功能函數(shù)void motorRun(String cmd,int value),此函數(shù)會(huì)先調(diào)用analogWrite(pin,value),產(chǎn)生一個(gè)指定占空比的穩(wěn)定方波。pin為不同電機(jī)所接引腳,value 為占空比,取值為0~255,value 越大則轉(zhuǎn)速越大,在設(shè)計(jì)中默認(rèn)設(shè)為255。cmd 則為選擇模式,分別為前進(jìn)(UP)、后退(DOWN)、向左(LEFT)、向右(RIGHT)、停止(STOP),當(dāng)在軟件中按下其中一個(gè)選項(xiàng)時(shí),參數(shù)cmd設(shè)置為相應(yīng)的狀態(tài)(如LEFT 向左)通過(guò)藍(lán)牙傳輸給Arduino 運(yùn)行此函數(shù),從而帶動(dòng)減速電機(jī)按給定占空比使小車進(jìn)行相應(yīng)的運(yùn)動(dòng)。
3.2.3 舵機(jī)轉(zhuǎn)動(dòng)測(cè)距算法
1)若小車在之前的運(yùn)行中已進(jìn)行過(guò)左右距離測(cè)試,則首先運(yùn)行系統(tǒng)函數(shù)myServo.write(90),將舵機(jī)歸為原位(90°)。
2)當(dāng)正向測(cè)試距離dis[1]小于30 cm 時(shí),則運(yùn)行函數(shù)motorRun(STOP,255),使小車停止運(yùn)動(dòng),之后算法為讓舵機(jī)每隔10 ms 向右轉(zhuǎn)動(dòng)1°,直到150°,循環(huán)函數(shù)如下:
這時(shí)超聲波測(cè)距dis[2]=getDistance(),將距離存入dis[2]。
3)對(duì)左側(cè)測(cè)距,算法同上,即舵機(jī)相對(duì)于90°方向左轉(zhuǎn)60°,并測(cè)試距離dis[0]=getDistance(),將距離存入dis[0]。
4)比較dis[0]與dis[2]的大小,若前者小,則左側(cè)距離障礙物更近,運(yùn)行motorRun(RIGHT,255)進(jìn)行右轉(zhuǎn),反之則左轉(zhuǎn)。
3.2.4 MQ-2模塊代碼實(shí)現(xiàn)
MQ-2 氣體檢測(cè)模塊實(shí)現(xiàn)代碼為:
數(shù)據(jù)val 為與讀取的氣體濃度相對(duì)應(yīng)的電壓值,需要設(shè)定與氣體濃度相對(duì)應(yīng)的val 臨界值,高于此值則報(bào)警燈亮。通過(guò)實(shí)驗(yàn)測(cè)試,為與小車的實(shí)際應(yīng)用相貼近,最后設(shè)定當(dāng)val>260 時(shí),室內(nèi)易燃?xì)怏w超過(guò)安全值,ledpin 設(shè)置為高電平,報(bào)警燈亮。
選擇軟串口(即對(duì)應(yīng)3.2.1 中的SoftwareSerial mySerial(2,3)函數(shù))來(lái)解決Arduino的RX、TX 口不足的問(wèn)題,可實(shí)現(xiàn)雙向通信傳輸,由此類推,此方法思想可適用于其他嵌入式系統(tǒng)中有關(guān)引腳資源不足的問(wèn)題,即硬件不足,用軟串口以及類似的軟件方式進(jìn)行解決。
1)可在小車上安裝攝像頭,通過(guò)軟硬件的調(diào)試,將攝像頭捕獲的畫面數(shù)據(jù)實(shí)時(shí)傳輸?shù)絾纹瑱C(jī)上,再通過(guò)藍(lán)牙模塊傳輸?shù)绞謾C(jī)App 上進(jìn)行顯示,使操作人員可以借此知曉小車所處的地形,從而方便進(jìn)行小車的遙控返回。
2)可在原單個(gè)超聲波模塊的基礎(chǔ)上在其左右增加兩個(gè)相同模塊,對(duì)超聲波避障算法進(jìn)行改進(jìn),從而減少一些地形情況下出現(xiàn)的無(wú)法避障的“死循環(huán)”現(xiàn)象,避障更加順暢,進(jìn)一步提高其實(shí)用性和容錯(cuò)率。
該文針對(duì)傳統(tǒng)氣體檢測(cè)儀的不便捷或存在安全風(fēng)險(xiǎn)的現(xiàn)狀,設(shè)計(jì)了能夠避障、遙控檢測(cè)環(huán)境中易燃易爆氣體的智能小車,繼承了便攜式檢測(cè)儀的小巧、易攜帶特點(diǎn),也減小了前者需要人為檢測(cè)可能導(dǎo)致的風(fēng)險(xiǎn)。經(jīng)過(guò)小車的設(shè)計(jì)搭建和實(shí)踐使用,經(jīng)過(guò)30次的實(shí)驗(yàn)發(fā)現(xiàn),有28 次是正常避障,且能夠?qū)怏w信息正常傳輸?shù)绞謾C(jī),故系統(tǒng)具有較高的穩(wěn)定性。當(dāng)然,也有不足之處,即用在較為復(fù)雜的室內(nèi)環(huán)境中,室外的操作人員不一定能看到小車,因此可能無(wú)法正確遙控。可以在小車前方安裝攝像頭對(duì)此加以改進(jìn),方便清楚地了解室內(nèi)環(huán)境,從而遙控小車完成任務(wù)。綜上,其意義不僅是在安全和便捷性上實(shí)現(xiàn)了氣體檢測(cè)功能,更是在人工智能的時(shí)代背景下為氣體檢測(cè)的運(yùn)作提供了一種獨(dú)到且創(chuàng)新的思維方式。