溫 濤,范梅紅
(1.惠州市中心人民醫(yī)院,廣東 惠州 516000;2.惠州市第一人民醫(yī)院,廣東 惠州 516000)
基于Arduino和ZigBee的無(wú)線溫度監(jiān)測(cè)系統(tǒng)
溫 濤1,范梅紅2
(1.惠州市中心人民醫(yī)院,廣東 惠州 516000;2.惠州市第一人民醫(yī)院,廣東 惠州 516000)
層流系統(tǒng)24 h不間斷工作,對(duì)冷卻水和熱水要求較高,利用Arduino的開(kāi)放性和ZigBee的易組網(wǎng)性,快速搭建遠(yuǎn)程無(wú)線監(jiān)控層流系統(tǒng)水溫系統(tǒng),可滿足實(shí)時(shí)監(jiān)控要求。
Arduino;ZigBee;無(wú)線監(jiān)控;層流
Arduino是一款包含硬件和軟件開(kāi)源平臺(tái),方便設(shè)計(jì)和制造用于電子設(shè)備和交互對(duì)象的微處理器套件。因?yàn)锳rduino為開(kāi)源平臺(tái),硬件具有不同版本,大多數(shù)都具有不同數(shù)量的閃存,引腳和8位的微控制器。板上的單排或者雙排引腳便于連接進(jìn)行編程并結(jié)合到其他電路中,也可以連接到其他附加模塊。Arduino的軟件開(kāi)發(fā)可用Arduino IDE,可在Windows、MAC OS、Linux等主流操作系統(tǒng)運(yùn)行。Arduino IDE對(duì)初學(xué)者極易掌握,還具有足夠的靈活性,它不需要太多的單片機(jī)基礎(chǔ),熟悉C語(yǔ)言,簡(jiǎn)單學(xué)習(xí)后就可在平臺(tái)上快速開(kāi)發(fā)軟件。
ZigBee是基于IEEE802.15.4標(biāo)準(zhǔn)的低功耗局域網(wǎng)協(xié)議,是一種短距離、低功耗的無(wú)線通信技術(shù)。其特點(diǎn)是近距離、低復(fù)雜度、自組織、低功耗、低數(shù)據(jù)速率。簡(jiǎn)而言之,ZigBee就是一種便宜、低功耗的近距離無(wú)線組網(wǎng)通訊技術(shù)。ZigBee網(wǎng)絡(luò)通常由3種節(jié)點(diǎn)構(gòu)成:①Coordinator(協(xié)調(diào)器)。用來(lái)初始化1個(gè)ZigBee網(wǎng)絡(luò),并為最初加入網(wǎng)絡(luò)的節(jié)點(diǎn)分配地址,每個(gè)網(wǎng)絡(luò)需要且只能夠有1個(gè)協(xié)調(diào)器。②Router(路由)。也稱(chēng)為ZigBee的全功能節(jié)點(diǎn),可以轉(zhuǎn)發(fā)數(shù)據(jù),起到路由的作用,也可以收發(fā)數(shù)據(jù),當(dāng)成一個(gè)數(shù)據(jù)節(jié)點(diǎn),還能保持網(wǎng)絡(luò),為后加入的節(jié)點(diǎn)分配地址。③End Device(終端節(jié)點(diǎn))。通常定義為電池供電的低功耗設(shè)備,通常只周期性發(fā)送數(shù)據(jù),不接收數(shù)據(jù)。我院手術(shù)室為層流凈化手術(shù)室,層流凈化系統(tǒng)在調(diào)節(jié)溫度和濕度時(shí)需要穩(wěn)定的冷熱水供應(yīng)。由于我院層流凈化系統(tǒng)的冷熱水由后勤部門(mén)負(fù)責(zé)供應(yīng),后勤對(duì)冷熱水機(jī)房是定時(shí)巡查機(jī)制,每天只在固定時(shí)間檢查系統(tǒng)是否工作正常,但層流系統(tǒng)要求24 h冷熱水的正常供應(yīng),這種定時(shí)巡查機(jī)制無(wú)法滿足需要。特別在夏天時(shí),通常會(huì)在巡查時(shí)間空檔發(fā)生設(shè)備故障使層流系統(tǒng)無(wú)法正常工作,導(dǎo)致手術(shù)室環(huán)境不適合開(kāi)展手術(shù)。以往,總是在手術(shù)室發(fā)現(xiàn)溫濕度異常后,才通知維修。實(shí)際中,冷熱水異常到手術(shù)室環(huán)境異常會(huì)經(jīng)過(guò)一定的時(shí)間,如果能在水溫一出現(xiàn)異常時(shí)就報(bào)警提醒維修,則能較早地解決故障。所以,需要實(shí)時(shí)監(jiān)測(cè)水溫的裝置,在溫度異常時(shí)立即提醒工作人員進(jìn)行維修。
本研究使用的裝置需要Arduino板、溫度探頭、ZigBee模塊、LCD屏幕、蜂鳴器和按鈕。因?yàn)閷恿鳈C(jī)房距離值班室距離較遠(yuǎn),從下位機(jī)到上位機(jī)之前需要1個(gè)中繼路由(ZigBee模塊)連接,原理圖如圖1所示。

圖1 原理圖

圖2 下位機(jī)程序流程圖

圖3 線路圖

圖4 上位機(jī)流程圖
下位機(jī)的主要作用是測(cè)量水溫,并把數(shù)據(jù)發(fā)送到上位機(jī)。中繼路由把從下位機(jī)接收到的數(shù)據(jù)轉(zhuǎn)發(fā)到上位機(jī)。上位機(jī)接收數(shù)據(jù)并顯示處理,如果溫度超過(guò)預(yù)設(shè)值,則報(bào)警提醒。
下位機(jī)程序流程見(jiàn)圖2.下位機(jī)可獲取水溫,然后把數(shù)據(jù)發(fā)送出去。程序運(yùn)行后首先會(huì)初始化,主要是串口波特率設(shè)置,傳感器管腳初始化和LCD屏幕管腳進(jìn)行設(shè)定,程序運(yùn)行后每秒對(duì)2個(gè)探頭獲取溫度值。為了讓獲得的溫度更加準(zhǔn)確,一共獲取10次后再平均數(shù)據(jù),然后通過(guò)ZigBee模塊傳輸出去。下位機(jī)的設(shè)計(jì)關(guān)鍵點(diǎn)和難點(diǎn)其一在于需要連接的管腳較多,需要合理安排各個(gè)模塊的管腳接口,以免管腳不夠。
管腳2~6用來(lái)連接溫度探頭一,管腳2和管腳3分別設(shè)置為高電平和低電平,可用來(lái)為溫度探頭供電,管腳4~6用來(lái)與溫度芯片通訊。管腳9~13用來(lái)連接溫度探頭二,管腳9和管腳10分別設(shè)置為高電平和低電平,用來(lái)為溫度探頭供電,管腳11~13用來(lái)和溫度芯片通訊。電源5 V和3.3 V分別為L(zhǎng)CD屏幕和ZigBee模塊供電,管腳A4和管腳A5為L(zhǎng)CD模塊通訊管腳。管腳TΧ1連接ZigBee模塊的RΧ管腳,用來(lái)發(fā)送數(shù)據(jù)。此外,要在單位時(shí)間內(nèi)進(jìn)行多次采集溫度數(shù)據(jù),然后平均這些數(shù)據(jù),從而消除一些干擾數(shù)據(jù)。線路圖如圖3所示,上位機(jī)流程圖如圖4所示。上位機(jī)也是Arduino平臺(tái),接收從下位機(jī)傳來(lái)的數(shù)據(jù),可實(shí)時(shí)查看水溫,當(dāng)水溫異常時(shí)報(bào)警。程序運(yùn)行后進(jìn)行初始化,主要完成對(duì)串口設(shè)置、LCD屏幕初始化、按鈕中斷管腳初始化和初始化一些標(biāo)識(shí)位,各項(xiàng)初始化完成后開(kāi)始從下位機(jī)接收數(shù)據(jù),接收完成后在LCD屏幕上顯示數(shù)值。如果溫度超過(guò)預(yù)設(shè)報(bào)警溫度,則讓蜂鳴器報(bào)警。管腳2和管腳3由于平臺(tái)規(guī)定只能用來(lái)設(shè)置成中斷,可使用5 V和10 K電阻連接做成中斷電路。管腳8用來(lái)設(shè)置蜂鳴器的開(kāi)關(guān),高電平報(bào)警,低電平不報(bào)警。管腳RΧ1連接ZigBee模塊的管腳TΧ。電源Vin和3.3 V用來(lái)給LCD屏幕和ZigBee模塊供電,管腳A4和管腳A5為L(zhǎng)CD模塊通訊管腳。上位機(jī)的關(guān)鍵點(diǎn)和難點(diǎn)在于當(dāng)檢測(cè)到溫度異常時(shí)的報(bào)警,如果每次接收到的水溫檢測(cè)到異常時(shí)都置管腳8為高電平報(bào)警,則實(shí)際使用中每隔10 s就會(huì)激活報(bào)警。這個(gè)平臺(tái)主要作用是提醒值班人員溫度有異常需要去處理,水溫從異常到正常是需要一段時(shí)間的,只需要在正常溫度發(fā)生異常的時(shí)候提醒值班人員,在值班人員確認(rèn)后(按下消音按鈕),即使溫度異常也無(wú)需報(bào)警。只有在溫度恢復(fù)正常后,再次發(fā)生異常時(shí)才報(bào)警,所以,在程序編寫(xiě)時(shí)對(duì)當(dāng)時(shí)報(bào)警狀態(tài)邏輯的判斷中,如果靜音標(biāo)識(shí)位被設(shè)定,則系統(tǒng)將不報(bào)警,以免造成過(guò)多的報(bào)警,影響正常使用。在溫度報(bào)警上限的設(shè)置中,因?yàn)橄挛粰C(jī)的溫度探頭不是直接接觸水的,而是附著在輸送管壁上的,與實(shí)際溫度有偏差,水溫會(huì)在一個(gè)溫度區(qū)間中波動(dòng),所以,這個(gè)值需要實(shí)際使用一段時(shí)間后再確定在一個(gè)比較合理的數(shù)值,過(guò)于接近臨界值易誤報(bào),離臨界值太遠(yuǎn)則容易錯(cuò)過(guò)最佳報(bào)警時(shí)間。中斷代碼的編寫(xiě)中,其中一個(gè)按鈕是控制LCD背光的,Arduino系統(tǒng)要求,一旦進(jìn)入中斷程序,就會(huì)自動(dòng)禁止中斷,但在這個(gè)程序中,觸發(fā)其中一個(gè)按鈕是中斷,向LCD屏幕發(fā)數(shù)據(jù)時(shí)也需要中斷,向LCD屏幕發(fā)送數(shù)據(jù)發(fā)生在按鈕中斷過(guò)程中,所以,正常情況下是不允許的,會(huì)造成系統(tǒng)死機(jī)。因此,在按鈕被按下執(zhí)行中斷函數(shù)時(shí),需要在函數(shù)里面置位中斷允許“sei();”,然后再執(zhí)行其他語(yǔ)句。
整個(gè)系統(tǒng)啟動(dòng)時(shí),要先啟動(dòng)上位機(jī),即ZigBee模塊協(xié)調(diào)器,然后啟動(dòng)中間的路由模塊,最后啟動(dòng)下位機(jī)。系統(tǒng)在運(yùn)行期間多次、及時(shí)、準(zhǔn)確監(jiān)測(cè)到冷水溫度異常,為搶修冷水機(jī)組或者切換應(yīng)急供水提供了寶貴時(shí)間。利用Arduino的模塊化和代碼易編寫(xiě)性及ZigBee的無(wú)線傳輸,可以快速搭建簡(jiǎn)單的監(jiān)測(cè)平臺(tái),實(shí)現(xiàn)多點(diǎn)參數(shù)監(jiān)控。如果在不同設(shè)備上多搭建幾個(gè)平臺(tái),可以把這些不同設(shè)備的參數(shù)匯集一起,則可實(shí)現(xiàn)自己醫(yī)院設(shè)備的物聯(lián)網(wǎng)平臺(tái),實(shí)時(shí)監(jiān)測(cè)各設(shè)備參數(shù),從而對(duì)設(shè)備故障進(jìn)行預(yù)判和為維修提供歷史記錄。
TP273.5
A
10.15913/j.cnki.kjycx.2017.21.057
2095-6835(2017)21-0057-03
〔編輯:張思楠〕