找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8090|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

智能化家庭健康監(jiān)護(hù)系統(tǒng)前端開(kāi)發(fā)與設(shè)計(jì)論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:268233 發(fā)表于 2017-12-28 11:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

1 緒論

1.1 課題來(lái)源及背景

1.2 課題研究?jī)?nèi)容及結(jié)構(gòu)

1.3 主要?jiǎng)?chuàng)新點(diǎn)

2 硬件電路設(shè)計(jì)

2.1 系統(tǒng)硬件電路構(gòu)成

2.2  Arduino微處理器最小系統(tǒng)

2.2.1 單片機(jī)控制芯片

2.2.2  ATMEGA2560單片機(jī)電路設(shè)計(jì)

2.3 藍(lán)牙無(wú)線(xiàn)通信模塊

2.4  ZigBee無(wú)線(xiàn)通信模塊

2.5 紅外測(cè)溫模塊

2.6 血氧飽和度傳感器

2.6.1血氧飽和度測(cè)量原理

2.6.2 血氧飽和度探頭

2.7  SD卡存儲(chǔ)模塊

3 系統(tǒng)軟件編程設(shè)計(jì)

3.1  軟件開(kāi)發(fā)環(huán)境

3.1.1  Arduino IDE簡(jiǎn)介

3.2  軟件各模塊程序設(shè)計(jì)

3.2.1  血氧飽和及心率數(shù)值采集

3.2.2  體溫溫度數(shù)值采集

3.2.3  藍(lán)牙無(wú)線(xiàn)通信

3.2.4  ZigBee無(wú)線(xiàn)通信

3.3  Android監(jiān)護(hù)軟件設(shè)計(jì)

3.3.1  系統(tǒng)的開(kāi)發(fā)環(huán)境與安裝

3.3.2  Android應(yīng)用程序開(kāi)發(fā)過(guò)程

3.3.3  主要應(yīng)用模塊的實(shí)現(xiàn)

4 系統(tǒng)整體功能測(cè)試

4.1 智能化家庭健康監(jiān)護(hù)系統(tǒng)實(shí)物圖

總結(jié)與展望

參考文獻(xiàn)

致謝

附錄A

智能化家庭健康監(jiān)護(hù)系統(tǒng)前端設(shè)計(jì)與開(kāi)發(fā)

摘要:隨著人們生活質(zhì)量的提高,越來(lái)越多的人將關(guān)注的重心轉(zhuǎn)移到身體健康上面。醫(yī)療科技的日新月異,家用耳溫槍、體脂分析儀、便攜式血壓計(jì)、運(yùn)動(dòng)手環(huán)等測(cè)量設(shè)備層出不窮,使得各項(xiàng)指標(biāo)的測(cè)量越來(lái)越方便。本課題提出了一種智能化家庭健康監(jiān)護(hù)系統(tǒng)前端方案,利用紅外MLX90614測(cè)量出人體體溫;通過(guò)血氧飽和度模塊測(cè)量的血氧和脈率;通過(guò)ZigBee傳輸給主板上的ZigBee協(xié)調(diào)器,主板接收到體溫?cái)?shù)值后,均在TFT液晶屏上顯示多種生理參數(shù)的數(shù)值,并且繪制實(shí)時(shí)的血氧飽和度曲線(xiàn),每當(dāng)測(cè)量結(jié)束后會(huì)將測(cè)得的數(shù)據(jù)記錄在SD卡中,最后通過(guò)藍(lán)牙模塊將結(jié)果發(fā)送給手機(jī)APP客戶(hù)端,在APP上也可以非常直觀(guān)的看到采集的數(shù)據(jù)。本系統(tǒng)可以實(shí)現(xiàn)多生理參數(shù)同時(shí)采集、即時(shí)圖形顯示、遠(yuǎn)程通信等功能。溫度、血氧、心率測(cè)量數(shù)據(jù)的可靠性和系統(tǒng)的穩(wěn)定性均可達(dá)到遠(yuǎn)程醫(yī)療應(yīng)用需求。


Front-end Design and Exploitation of Intelligent Home Health Monitoring System

Name Jie Mei

IntroducerHuashan Ye

School of Biomedical Engineering, Hubei University of Science and Technology ,

Abstract: As the continuous improvement of people's living standards, more and more people began to pay special attention to their own health. With modern science and technology advances, home thermometers, body fat analyzer, a portable blood pressure monitors, sports bracelet and other measuring equipment after another, so that the indicators measuring more convenient. This paper presents a family of intelligent health monitoring system, which solutions using MLX90614 to measure the body temperature, the body temperature through ZigBee transmitted to the coordinator on the motherboard, the motherboard temperature value is received, oxygen saturation measured by the module blood oxygen. Pulsing rate values are shown in a variety of physiological parameters on the TFT LCD screen, real-time rendering and oxygen saturation curve, every measure will be measured after the data recorded on an SD card, and finally through Bluetooth module sends the results to a mobile phone APP client, the APP can also be very intuitive to see the data collected. This system can achieve simultaneous acquisition of multiple physiological parameters, real-time graphic display, remote communications, and other functions. Temperature, blood oxygen, heart rate measurement reliability and stability of the system can reach remote medical applications.

1 緒論1.1 課題來(lái)源及背景

人類(lèi)社會(huì)從猿類(lèi)時(shí)代進(jìn)化到現(xiàn)在的高科技時(shí)代,人們的生活需求也一直在改變,從對(duì)基本溫飽的需求轉(zhuǎn)變?yōu)楝F(xiàn)在的健康需求,正在逐步升華。2013年 11 月,有關(guān)調(diào)查報(bào)告指出:我國(guó)有近 65%的人群是處于亞健康狀態(tài)的,這一特殊人群雖然沒(méi)有直接表現(xiàn)出明確的疾病,但是他們內(nèi)在活力卻不斷下降,長(zhǎng)此以往,會(huì)非常容易引起各種疾病,因此,這部分人群特別需健全、便捷、舒適的家庭健康監(jiān)護(hù)及醫(yī)療保健服務(wù)[1]。然而目前在醫(yī)院中使用的大型醫(yī)療監(jiān)護(hù)設(shè)備無(wú)法滿(mǎn)足在家庭對(duì)這部分特殊群體的健康監(jiān)測(cè),需要開(kāi)發(fā)設(shè)計(jì)一種更加舒適、便捷、廉價(jià)、人性化的智能化家庭健康監(jiān)護(hù)系統(tǒng)來(lái)適應(yīng)人們對(duì)健康監(jiān)護(hù)設(shè)備的應(yīng)用需求。

繼互聯(lián)網(wǎng)之后,互聯(lián)網(wǎng)+的時(shí)代也漸漸到來(lái),智能這個(gè)詞也唄使用的越來(lái)越廣泛,有關(guān)的智能技術(shù)也逐漸浮現(xiàn)出來(lái),并且相當(dāng)多的領(lǐng)域也開(kāi)始使用智能技術(shù)[2]。“智能化”正在慢慢地使人們的生活健康方式發(fā)生變化。如今智能化的健康醫(yī)療產(chǎn)品在設(shè)計(jì)方面主要有以下兩種體現(xiàn):①智能化健康醫(yī)療產(chǎn)品在其功能上更加符合人們的需求和愿望。比如,現(xiàn)在的智能電子血壓儀,替代了以往老式的血壓儀,其體積變得更加輕盈,不僅使用場(chǎng)合不再受限制,而且可以隨時(shí)隨地的記錄用戶(hù)和患者自身的血壓狀況,可以幫助其管理自身健康和病情,并且通過(guò)最近3次血壓平均值顯示更精準(zhǔn)。自動(dòng)感應(yīng)高度功能,正確提示使用者的測(cè)量姿勢(shì),獲得準(zhǔn)確精值。并且通過(guò)智能手機(jī)連接應(yīng)用實(shí)時(shí)記錄健康信息。傳統(tǒng)的血壓儀同樣也運(yùn)用的物理及生物技術(shù),但與傳統(tǒng)相比,新型智能血壓儀本質(zhì)性區(qū)別在于它的功能變得智能化,更加滿(mǎn)足人們的需求,實(shí)現(xiàn)了血壓?jiǎn)栴}患者的愿望[3]。②這類(lèi)健康醫(yī)療產(chǎn)品的操作非常便捷,人機(jī)交互友好。友好的人機(jī)交互會(huì)給使用者帶來(lái)不錯(cuò)的使用體驗(yàn)。比如,在以往的醫(yī)療環(huán)境中,化驗(yàn)血尿等常規(guī)檢查的流程極為煩冗,而且等待的排隊(duì)時(shí)間會(huì)讓人失去耐心。現(xiàn)在醫(yī)院中為患者提供的自動(dòng)化驗(yàn)以及自動(dòng)取單機(jī),只需要把取樣放到機(jī)器中,錄入病例里的個(gè)人信息二維碼,機(jī)器會(huì)提示過(guò)多久來(lái)取化驗(yàn)單。取單時(shí)只需把病例上的二維碼掃入機(jī)器,單子便可輕松取出。這種智能化醫(yī)療設(shè)備不僅為患者節(jié)省了時(shí)間,同時(shí)也為醫(yī)護(hù)人員減輕了很多工作負(fù)擔(dān)[4]。

智能化家庭健康監(jiān)護(hù)系統(tǒng)就是一種新型家庭醫(yī)療監(jiān)護(hù)設(shè)備,將人體健康數(shù)據(jù)采集,并且具有數(shù)據(jù)交叉分析與處理以及本地健康問(wèn)題咨詢(xún)和云共享等多種功能,可以將傳統(tǒng)的病人去醫(yī)院就診模式轉(zhuǎn)變?yōu)榭蛻?hù)健康信息實(shí)時(shí)上傳至云端服務(wù)器,同時(shí)也會(huì)傳送給手機(jī)APP,能夠由醫(yī)生對(duì)病人的信息進(jìn)行監(jiān)護(hù)和管理,主動(dòng)上門(mén)就診。

1.2 課題研究?jī)?nèi)容及結(jié)構(gòu)

本文設(shè)計(jì)希望通過(guò)前端硬件采集多生理參數(shù),通過(guò)藍(lán)牙遠(yuǎn)程傳輸給手機(jī)APP,從而實(shí)現(xiàn)對(duì)身體健康的遠(yuǎn)程監(jiān)護(hù)。主要的研究工作在于對(duì)多生理參數(shù)同時(shí)采集和藍(lán)牙傳輸系統(tǒng)的設(shè)計(jì)方法,以及對(duì)整體框架進(jìn)行分析,主要從硬件系統(tǒng)設(shè)計(jì)和軟件編程兩個(gè)方面展開(kāi)工作設(shè)計(jì)和開(kāi)發(fā)一個(gè)智能化家庭健康監(jiān)護(hù)系統(tǒng)。整個(gè)系統(tǒng)分為兩個(gè)部分:一是前端硬件,進(jìn)行生理參數(shù)的采集、分析處理以及遠(yuǎn)程傳輸;二是手機(jī)APP客戶(hù)端,負(fù)責(zé)接收前端硬件采集的數(shù)據(jù),并進(jìn)行實(shí)時(shí)顯示。前端硬件包括:ATMEGA2560單片機(jī)、非接觸式紅外測(cè)溫模塊、血氧飽和測(cè)量模塊、BC417143B藍(lán)牙模塊、TFT液晶屏、供電系統(tǒng)。軟件設(shè)計(jì)方面,采用C語(yǔ)言編寫(xiě)Arduino的程序,JAVA語(yǔ)言編寫(xiě)手機(jī)APP程序,實(shí)現(xiàn)與硬件藍(lán)牙對(duì)接,接受數(shù)據(jù)后進(jìn)行實(shí)時(shí)顯示。

本文首先介紹了硬件電路設(shè)計(jì)的思路,然后詳細(xì)闡明了芯片的選擇及其各自的特點(diǎn),也引用了部分有關(guān)該課題設(shè)計(jì)方面的基本知識(shí)。然后敘述了手機(jī)APP的編程方法和過(guò)程,使用流程圖和程序代碼比較直觀(guān)的介紹了本設(shè)計(jì)的編程思路以及需要注意的一些問(wèn)題。最后是硬件和軟件測(cè)試,通過(guò)具體的測(cè)量和控制說(shuō)明智能化家庭健康監(jiān)護(hù)系統(tǒng)開(kāi)發(fā)與設(shè)計(jì)的合理性和完整性。

1.3 主要創(chuàng)新點(diǎn)

本課題設(shè)計(jì)主要涉及到多生理參數(shù)的同時(shí)采集以及波形的實(shí)時(shí)顯示,還有硬件設(shè)備與手機(jī)APP通過(guò)藍(lán)牙對(duì)接建立通信鏈路。主要?jiǎng)?chuàng)新之處有以下幾點(diǎn):

(1)在無(wú)線(xiàn)遠(yuǎn)程傳輸上采用2.4GHz的ZigBee模塊和藍(lán)牙模塊,可以實(shí)現(xiàn)移動(dòng)設(shè)備與前端硬件設(shè)備之間的短距離數(shù)據(jù)交換,并且在功耗方面具有極大優(yōu)勢(shì),其自身具有超低功耗的特點(diǎn),此外,傳輸數(shù)據(jù)穩(wěn)定可靠,支持雙向傳輸。

(2)實(shí)現(xiàn)多生理參數(shù)采集,本系統(tǒng)在運(yùn)行時(shí),會(huì)同時(shí)測(cè)量使用者的血氧飽和度、脈搏、體溫,并且將具體的數(shù)值實(shí)時(shí)顯示在液晶屏上,較為直觀(guān)。另外,本系統(tǒng)設(shè)計(jì)為便攜式,配備有可充電的移動(dòng)電源,便于隨身攜帶并使用。


2 硬件電路設(shè)計(jì)2.1 系統(tǒng)硬件電路構(gòu)成

本設(shè)計(jì)是以ATMEGA2560單片機(jī)為微處理器,與非接觸式紅外測(cè)溫模塊、血氧飽和度測(cè)量模塊、藍(lán)牙、ZigBee、液晶組成了一個(gè)集多生理參數(shù)數(shù)據(jù)采集、處理、液晶顯示、無(wú)線(xiàn)傳輸、手機(jī)APP顯示為一體的智能化家庭健康監(jiān)護(hù)系統(tǒng)。系統(tǒng)硬件電路主要由紅外測(cè)溫傳感器、血氧飽和度測(cè)量模塊、單片機(jī)、TFT液晶顯示、藍(lán)牙傳輸模塊和ZigBee傳輸模塊組成。其原理圖如圖2.1所示:

圖2.1 硬件原理構(gòu)成圖

生理參數(shù)采集模塊中,在單片機(jī)ATMEGA2560的控制下,非接觸式紅外測(cè)溫傳感器會(huì)先采集外界的溫度并經(jīng)過(guò)模擬轉(zhuǎn)換后通過(guò)單總線(xiàn)接口傳輸給微控制器進(jìn)行判斷處理,然后通過(guò)ZigBee傳輸模塊發(fā)送數(shù)據(jù)給主板上的ZigBee協(xié)調(diào)器。血氧飽和度采集數(shù)據(jù)后通過(guò)串口傳輸給單片機(jī),經(jīng)過(guò)處理后數(shù)據(jù)一方面在模塊上通過(guò)TFT液晶顯示器進(jìn)行數(shù)值和波形的實(shí)時(shí)顯示,另一方面通過(guò)藍(lán)牙無(wú)線(xiàn)模塊發(fā)送到手機(jī)APP客戶(hù)端進(jìn)行顯示。在APP客戶(hù)端接收數(shù)據(jù)時(shí),需要開(kāi)啟手機(jī)藍(lán)牙功能,在客戶(hù)端搜索附近的藍(lán)牙設(shè)備,找到ID為BluetoothBee并輸入連接密碼建立通信鏈路。然后客戶(hù)端就會(huì)收到來(lái)自前端硬件的生理參數(shù)數(shù)據(jù),APP收到監(jiān)護(hù)系統(tǒng)的數(shù)據(jù)后會(huì)判斷該數(shù)據(jù)是否有效,若有效,則在手機(jī)屏幕上顯示出來(lái)。

2.2  Arduino微處理器最小系統(tǒng)

本設(shè)計(jì)采用的MCU是ATMEGA2560芯片。ATMEGA2560芯片適用于需要大量IO接口的設(shè)計(jì)。下面主要介紹所用芯片及相應(yīng)電路設(shè)計(jì)。

2.2.1 單片機(jī)控制芯片

ATMEGA2560的內(nèi)部資源非常豐富,提供了大量的IO接口,包括有54路數(shù)字IO口,其中有16路可以作為PWM輸出,此外,還有16路模擬采集引腳,每一路模擬輸入在芯片內(nèi)部為10位的A/D數(shù)據(jù)轉(zhuǎn)換器,可以采集多路模擬量[5]。在通用全雙工異步串行口(UART)方面,ATMEGA2560具有3路串行口可以使用,此外,還有一些引腳可以通過(guò)程序修改來(lái)實(shí)現(xiàn)虛擬軟串口,故在串行口通信方面ATMEGA2560具有豐富的資源。

2.2.2  ATMEGA2560單片機(jī)電路設(shè)計(jì)

Arduino ATMEGA2560的最小系統(tǒng)電路與STC系列的51單片機(jī)基本類(lèi)似,對(duì)于AREF引腳,是AD轉(zhuǎn)換的參考電壓輸入端,即模擬端口輸入的電壓值是與此處的參考電壓相比較的,開(kāi)發(fā)者可以通過(guò)改變這個(gè)引腳以及程序中的模擬電壓輸入設(shè)置函數(shù),來(lái)實(shí)現(xiàn)測(cè)量電壓范圍的改變[6]。在燒寫(xiě)程序時(shí),可通過(guò)RX0和TX0引腳以及GND引腳與PC機(jī)相連來(lái)實(shí)現(xiàn)。電路設(shè)計(jì)圖如圖2.2所示:

圖2.2  Arduino mega2560電路設(shè)計(jì)圖

2.3 藍(lán)牙無(wú)線(xiàn)通信模塊

藍(lán)牙通信技術(shù)是一種工作在2.4 GHz 頻段的無(wú)線(xiàn)通信技術(shù)。目前藍(lán)牙技術(shù)已經(jīng)逐漸趨向成熟。因?yàn)樗{(lán)牙技術(shù)的日趨成熟,在使用和遠(yuǎn)程傳輸方面具有非常好的系統(tǒng)穩(wěn)定性和抗干擾能力。本設(shè)計(jì)使用的藍(lán)牙模塊如下圖2.3所示:

     

圖2.3 藍(lán)牙傳輸模塊(圖A為正面,圖B為反面)

在局域網(wǎng)范圍內(nèi),可以使用藍(lán)牙無(wú)線(xiàn)傳輸給具有藍(lán)牙功能的設(shè)備發(fā)送數(shù)據(jù),并且可以實(shí)現(xiàn)自主組網(wǎng)。在本設(shè)計(jì)中,藍(lán)牙無(wú)線(xiàn)通信模塊采用的是BC417143B這款芯片,該芯片具有內(nèi)置天線(xiàn)、有超低功耗模式、收發(fā)靈敏度高、成本低、低功耗等優(yōu)點(diǎn),而且只需配備少許外圍器件就可以實(shí)現(xiàn)其強(qiáng)大的功能。

1、主要特性

藍(lán)牙模塊具有全球開(kāi)放的2.4GHz ISM 頻段免許可證;功率等級(jí)為Class 2,其自身為主從一體,抗干擾的能力比較優(yōu)秀,因此非常適合應(yīng)用在工業(yè)控制的場(chǎng)合;具有12路可AT命令編程的輸出IO口,1路帶硬件流控的UART接口,3路8位ADC輸入接口,板載有藍(lán)牙天線(xiàn);無(wú)線(xiàn)串口數(shù)據(jù)透?jìng),其UART兼容3.3~5V的接口,具有128-bit安全校驗(yàn)機(jī)制,符合ROHS等多種國(guó)際認(rèn)證[7];運(yùn)行在可配對(duì)連接模式時(shí),電流最低可達(dá)3.3mA,在通訊模式下最低可達(dá)20mA;低功耗3.0 -3.6V 工作,關(guān)機(jī)模式下為29uA;

2、開(kāi)發(fā)方式

藍(lán)牙模塊的開(kāi)發(fā)方式分為2兩類(lèi):一類(lèi)是基于TI公司的CC2560雙模藍(lán)牙的協(xié)議棧開(kāi)發(fā),即在TI公司開(kāi)放的藍(lán)牙協(xié)議棧上做二次開(kāi)發(fā);一類(lèi)是基于藍(lán)牙透?jìng)髂K的AT指令開(kāi)發(fā),這類(lèi)開(kāi)發(fā)相較前者而言難度稍微小一點(diǎn),是使用串口與藍(lán)牙通信,通過(guò)發(fā)送AT指令的方式來(lái)對(duì)藍(lán)牙模塊進(jìn)行配置以及相關(guān)的控制功能。

本設(shè)計(jì)采用的藍(lán)牙芯片是BC417143,支持藍(lán)牙2.0版本的標(biāo)準(zhǔn)協(xié)議,默認(rèn)波特率為9600b/s。藍(lán)牙芯片與另外一個(gè)藍(lán)牙設(shè)備可以進(jìn)行遠(yuǎn)程無(wú)線(xiàn)通信,同時(shí),藍(lán)牙芯片也可以通過(guò)串口與單片機(jī)進(jìn)行通信,單片機(jī)可以通過(guò)串口通信的方式用AT指令控制藍(lán)牙芯片。

2.4  ZigBee無(wú)線(xiàn)通信模塊

ZigBee是一種低功耗局域網(wǎng)通信協(xié)議。該名字是源自蜜蜂的八字舞,蜜蜂之間是通過(guò)飛行和嗡嗡抖動(dòng)自己的翅膀來(lái)與同伴進(jìn)行溝通交流的。ZigBee技術(shù)的突出特點(diǎn)是復(fù)雜度較低、自組網(wǎng)、超低功耗、低成本,非常適用于蜂窩網(wǎng)中的遠(yuǎn)程信息傳輸與自動(dòng)控制,這種協(xié)議也可以嵌入各種MCU中進(jìn)行使用。

本設(shè)計(jì)采用的ZigBee芯片為CC2530芯片,內(nèi)嵌有標(biāo)準(zhǔn)ZigBee協(xié)議棧,在芯片內(nèi)部集成了8051內(nèi)核,是增強(qiáng)型的51單片機(jī)。在ZigBee網(wǎng)絡(luò)中,所有的節(jié)點(diǎn)設(shè)備分為3種類(lèi)型,一種是協(xié)調(diào)器,一種是路由器,一種是終端。在同一個(gè)網(wǎng)絡(luò)中,需要一個(gè)協(xié)調(diào)器來(lái)啟動(dòng)并維護(hù)整個(gè)網(wǎng)絡(luò),這個(gè)協(xié)調(diào)器負(fù)責(zé)所在網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)設(shè)備的16位地址分配(為自動(dòng)分配)[8]。路由模塊的作用是在協(xié)調(diào)器模塊啟動(dòng)后,協(xié)助其維護(hù)整個(gè)網(wǎng)絡(luò)中的設(shè)備,同時(shí),路由模塊也可以作為信息傳遞的中轉(zhuǎn)站,使得信息傳遞的距離更遠(yuǎn)。而終端設(shè)備即處于網(wǎng)絡(luò)邊緣的設(shè)備,一般用于控制器,執(zhí)行來(lái)自路由器或協(xié)調(diào)器的命令。

ZigBee網(wǎng)絡(luò)的組建方式各種各樣,有星狀,網(wǎng)狀,樹(shù)狀等等。星狀網(wǎng)絡(luò),是以協(xié)調(diào)器為中心,向四周發(fā)散開(kāi)來(lái),連接路由設(shè)備或者終端設(shè)備。網(wǎng)狀網(wǎng)絡(luò),是由協(xié)調(diào)器、路由器組成的一個(gè)類(lèi)似蜘蛛網(wǎng)般的網(wǎng)狀網(wǎng)絡(luò),路由與協(xié)調(diào)器之間可以互發(fā)互收數(shù)據(jù)。

本設(shè)計(jì)使用的ZigBee模塊為無(wú)線(xiàn)透?jìng)髂J,通過(guò)軟件配置模塊的PAN ID,即網(wǎng)絡(luò)號(hào),用于分辨不同的網(wǎng)絡(luò),所以在同一個(gè)網(wǎng)絡(luò)中的設(shè)備的PAN ID需要設(shè)置為同一個(gè)ID[9]。其次,需要設(shè)置ZigBee的串口通信波特率,用于與外部單片機(jī)的通信。ZigBee模塊的實(shí)物圖如下圖2.4所示:


   

圖2.4  ZigBee模塊的實(shí)物圖(圖A為正面,圖B為反面)

每個(gè)ZigBee模塊在出廠(chǎng)時(shí),就有一個(gè)終身屬于它的64位地址,例如這個(gè)ZigBee模塊的唯一64位地址為0x0013a20040e830dd,這個(gè)唯一地址可以用于在一個(gè)網(wǎng)絡(luò)中的唯一識(shí)別,也可以作為數(shù)據(jù)接收終端地址。

2.5 紅外測(cè)溫模塊

MLX90614是一個(gè)應(yīng)用于非接觸式的紅外溫度傳感器,其集成了紅外探測(cè)熱電堆芯片與信號(hào)處理專(zhuān)用集成芯片,且全部都封裝在TO-39。17位ADC、低噪聲放大器和強(qiáng)大的DSP處理單元的全集成,使傳感器實(shí)現(xiàn)了高分辨率,高精度的測(cè)量。處理好的被測(cè)目標(biāo)溫度和環(huán)境溫度均存儲(chǔ)在MLX90302的RAM內(nèi),分辨率為0.01 ˚C。傳感器的測(cè)量結(jié)果均出廠(chǎng)校準(zhǔn)化,數(shù)據(jù)接口為數(shù)字式的PWM和SMBus(System Management Bus) 輸出。傳感器出廠(chǎng)默認(rèn),上電復(fù)位時(shí)為SMBus通信[10]。

  • 主要特性

對(duì)于MLX90614芯片而言,引出了4個(gè)引腳,它們分別為VSS、SCL/Vz、PWM/SDA、VDD。接地端為VSS,接地端也與金屬封裝連通,使得信號(hào)更好,SCL/Vz是SMBus串行時(shí)鐘的輸入端。 VDD為電源的輸入端。

對(duì)于脈寬調(diào)制,PWM的數(shù)位帶寬為10bit,PWM的輸出周期為1.024ms,輸出高電位電壓值時(shí),I=2mA,輸出低電位電壓值時(shí),I=2mA,輸出驅(qū)動(dòng)電流為7mA,輸出反向電流為13.5mA。對(duì)于SMBus標(biāo)準(zhǔn)雙線(xiàn)的參數(shù)如下表2.5所示:

表2.5  SMBus標(biāo)準(zhǔn)雙線(xiàn)的參數(shù)

參數(shù)

測(cè)試條件

最小值

典型值

最大值

單位

子設(shè)備地址

出廠(chǎng)設(shè)置

5A

Hex

SMBus請(qǐng)求時(shí)間

SCL線(xiàn)低電位

1.44

ms

低位超時(shí)值

SCL線(xiàn)低電位

27

33

ms

高位超時(shí)值

SCL線(xiàn)高電位

45

55

us

主設(shè)備接收信號(hào)

準(zhǔn)備時(shí)間

第八個(gè)SCL時(shí)鐘下降沿,主設(shè)備

0.5

1.5

us

主設(shè)備接收信號(hào)

保持時(shí)間

第九個(gè)SCL時(shí)鐘下降沿,主設(shè)備

1.5

2.5

us

子設(shè)備接收信號(hào)

準(zhǔn)備時(shí)間

第八個(gè)SCL時(shí)鐘下降沿,子設(shè)備

2.5

us

子設(shè)備接收信號(hào)

保持時(shí)間

第九個(gè)SCL時(shí)鐘下降沿,主設(shè)備

1.5

us


  • 工作原理

在自然界中,通過(guò)對(duì)某物體自身的紅外輻射收集并測(cè)量可以較精確的得出該物體的體表溫度。本設(shè)計(jì)使用的紅外測(cè)溫模塊由光電探測(cè)器、光學(xué)系統(tǒng)、信號(hào)處理和信號(hào)放大器及輸出等部分組成。紅外測(cè)溫的原理大致如下圖2.6所示:

圖2.6 紅外測(cè)溫原理圖

MLX90614系列測(cè)溫模塊是由Melexis公司生產(chǎn)的,用于非接觸式紅外測(cè)溫非常方便。這家公司生產(chǎn)的所有模塊在出廠(chǎng)前都進(jìn)行了必要的校驗(yàn),使得紅外測(cè)溫模塊可以直接輸出線(xiàn)性信號(hào),免去了復(fù)雜的校正過(guò)程。

環(huán)境溫度和目標(biāo)溫度由81101內(nèi)置的一個(gè)熱電偶測(cè)定測(cè)量,兩路溫度信號(hào)經(jīng)由放大器放大后,再由一個(gè)17-bit的模數(shù)轉(zhuǎn)換器和較強(qiáng)大的數(shù)字信號(hào)處理單元后輸出。

  • 操作流程

MLX90614的SMBus協(xié)議:

1           7            1     1            8             1    1

S

Slave Address

Wr

A

Data Byte

A

P

S     Start condition(起始位)

Sr    Repeated start cordition(重復(fù)起始位)

Rd    Read(讀標(biāo)志位)

Wr    Write(寫(xiě)標(biāo)志位)

A     Acknowledge(應(yīng)答位)

S     Stop Condition(停止位)

PEC   Packet Error Code(出錯(cuò)數(shù)據(jù)包)

數(shù)據(jù)傳輸時(shí)序圖入下圖2.7所示:

圖2.7 數(shù)據(jù)傳輸時(shí)序圖

PWM/SDA為數(shù)據(jù)腳,若數(shù)據(jù)腳需要變化,將SCL引腳拉低300ns之后即可。而數(shù)據(jù)被捕獲需要在SCL為上升沿的時(shí)刻。數(shù)據(jù)傳輸時(shí),16bit數(shù)據(jù)需分兩次傳輸,每個(gè)字節(jié)均按照高位(MSB)在前,低位(LSB)在后的順序傳輸。

2.6 血氧飽和度傳感器2.6.1血氧飽和度測(cè)量原理

血氧飽和度在進(jìn)行測(cè)量時(shí),使用兩個(gè)發(fā)光二極管,發(fā)射的波長(zhǎng)分別為660nm和940nm,在手指的上下兩端分別放置發(fā)射管和接受管。發(fā)射管發(fā)射的光波透過(guò)手指后會(huì)在另一端被接受管接受,因?yàn)槿梭w的內(nèi)部組織對(duì)于這種光的吸收系數(shù)是恒定的,所以此時(shí)的光波會(huì)有一定的衰減,通過(guò)衰減程度再配合一定的計(jì)算方法,我們便可以得出測(cè)量者的血氧飽和度為多少,如圖2.8所示

圖2.8 血氧飽和度測(cè)量原理

2.6.2 血氧飽和度探頭

血氧飽和度探頭是測(cè)定人體血液中的氧濃度即血氧飽和度的一種儀器,傳感器由兩只發(fā)光管和一只光電管組成,在外科手術(shù)或危重病人的監(jiān)護(hù)中可及時(shí)了解血液中氧含量。

在本設(shè)計(jì)中發(fā)射管采用的是660~905nm波長(zhǎng)的發(fā)射管,接收管為235。這種血氧飽和度探頭為數(shù)字血氧探頭,其傳輸出來(lái)的信號(hào)為數(shù)字信號(hào)[11]。在采集模塊上,使用了一塊STM32核心芯片進(jìn)行初步的采集以及處理,然后通過(guò)UART接口與atmega2560芯片相連,將數(shù)據(jù)傳輸過(guò)去,由atmega2560進(jìn)行下一步的處理。其中數(shù)據(jù)傳輸協(xié)議入下表2.5.2所示:

與單片機(jī)進(jìn)行數(shù)據(jù)傳輸時(shí)是默認(rèn)設(shè)置:波特率為9600b/s;每秒發(fā)送50個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包含有5個(gè)字節(jié)。





字節(jié)0:

描述

信號(hào)強(qiáng)度0

信號(hào)強(qiáng)度1

信號(hào)強(qiáng)度2

信號(hào)強(qiáng)度3

1=搜索超時(shí)

1=未接傳感器

1=脈搏跳動(dòng)聲

1(同步位)

0

1

2

3

4

5

6

7

字節(jié)1:

描述

體積描記圖0

體積描記圖1

體積描記圖2

體積描記圖3

體積描記圖4

體積描記圖5

體積描記圖6

0(同步位)

0

1

2

3

4

5

6

7


字節(jié)2:

描述

棒圖0

棒圖1

棒圖2

棒圖3

1=傳感器錯(cuò)誤

1=搜索脈搏

脈率7

0(同步位)

0

1

2

3

4

5

6

7


字節(jié)3:

描述

脈率0

脈率1

脈率2

脈率3

脈率4

脈率5

脈率6

0(同步位)

0

1

2

3

4

5

6

7


字節(jié)4:

描述

血氧0

血氧1

血氧2

血氧3

血氧4

血氧5

血氧6

0(同步位)

0

1

2

3

4

5

6

7


2.7  SD卡存儲(chǔ)模塊

SD卡即安全數(shù)碼卡,是繼MMC之后發(fā)展的一種快閃記憶器的新一代記憶設(shè)備,目前已經(jīng)被廣泛應(yīng)用在許多設(shè)備上。SD卡擁有大容量、速數(shù)據(jù)傳輸快、移動(dòng)靈活性強(qiáng)以及高安全性等優(yōu)點(diǎn)。

SD卡使用的電壓為3.3V。同時(shí),若在SPI模式下,需要注意的是,SPI通信的引腳均需要外加10~100K左右的上拉電阻才能保證其正常工作[12]。

SD卡有5個(gè)寄存器,如下表2.9所示:

表2.9  SD卡寄存器

名稱(chēng)

寬度

描述

CID

128

卡標(biāo)識(shí)寄存器

RCA

16

相對(duì)卡地址

CSD

128

卡操作條件相關(guān)的信息數(shù)據(jù)

SCR

64

SD配置寄存器

OCR

32

操作條件寄存器


操作SD卡的6條重要命令:

SD卡初始化過(guò)程:

  • 初始化與SD卡連接的硬件條件;
  • 上電延時(shí);
  • 復(fù)位卡,進(jìn)入IDLE狀態(tài);
  • 發(fā)送CMD8,檢查是否支持2.0協(xié)議;
  • 根據(jù)不同協(xié)議檢查SD卡;
  • 取消片選,發(fā)送多于8個(gè)CLK,結(jié)束初始化;

SD卡讀取數(shù)據(jù):

  • 發(fā)送CMD17;
  • 接收卡響應(yīng)R1;
  • 接收數(shù)據(jù)起始令牌0XFE;
  • 接收數(shù)據(jù);
  • 接收2個(gè)字節(jié)CRC,若不用CRC,這兩個(gè)字節(jié)在讀取后可丟掉;
  • 禁止片選,發(fā)多于8個(gè)CLK;

SD卡存儲(chǔ)數(shù)據(jù):

  • 發(fā)送CMD24;
  • 接收卡響應(yīng)R1
  • 發(fā)送寫(xiě)數(shù)據(jù)起始令牌0XFE;
  • 發(fā)送數(shù)據(jù);
  • 發(fā)送2字節(jié)的偽CRC;
  • 禁止片選,發(fā)多于8個(gè)CLK

在本設(shè)計(jì)中,由ATMEGA2560采集血氧飽和、脈率、體溫的數(shù)據(jù),進(jìn)行處理后,在每次測(cè)量完畢后,這些數(shù)據(jù)會(huì)以TXT文件存儲(chǔ)到SD卡中,便于之后的數(shù)據(jù)分析。


















3 系統(tǒng)軟件編程設(shè)計(jì)3.1  軟件開(kāi)發(fā)環(huán)境3.1.1  Arduino IDE簡(jiǎn)介

Arduino是一款基于ATMEL AVR單片機(jī)的控制器平臺(tái),便捷靈活而且較為容易上手。Arduino是一個(gè)開(kāi)源的系統(tǒng),除了不能使用Arduino作為商標(biāo),任何人或公司都可以利Arduino公布的文檔來(lái)制作屬于自己的電子物品,而且Arduino的價(jià)格低廉,非常受?chē)?guó)內(nèi)外廣大的電子愛(ài)好者歡迎[13]。

Arduino具有特定的標(biāo)準(zhǔn)擴(kuò)展口,可以在擴(kuò)展口上使用各種傳感器來(lái)采集或控制周邊事物,例如窗簾上的步進(jìn)電機(jī)、房間的照明燈、室溫等等[14]。這款芯片可以通過(guò)Arduino特有的API(應(yīng)用程序編程接口)函數(shù)來(lái)編寫(xiě)自己的程序。編譯生成二進(jìn)制文件,燒錄編譯文件都可以使用Arduino IDE軟件完成[15]。

Arduino IDE的編程界面如下圖3.1所示:

Arduino IDE的編程方式與51單片機(jī)是相似的。在軟件編程界面有兩個(gè)空的函數(shù):void setup()和void loop(),前者中需要填寫(xiě)程序的初始化部分,后者為整個(gè)程序的主循環(huán)內(nèi)容[16]。編寫(xiě)完程序后,就要進(jìn)入下載部分。Arduino的核心板具有ISP功能。這個(gè)功能可以在不改變硬件連接,即使硬件仍然在運(yùn)行內(nèi)部代碼時(shí),不需要分離任何電路也可以立即下載新的程序代碼,這樣就可以節(jié)省很多開(kāi)發(fā)時(shí)間[17]。在Arduino的芯片內(nèi)部都有一個(gè)bootloader,這個(gè)bootloader可以幫助MCU加載程序,當(dāng)單片機(jī)在復(fù)位時(shí),首先會(huì)跳轉(zhuǎn)到bootloader中判斷之后進(jìn)入的數(shù)據(jù)是否屬于程序代碼,若為程序代碼就將其安置到內(nèi)存的剩余空間中。所以因?yàn)橛衎ootloader的存在,使得Arduinod 程序代碼非常便于下載[18]。

圖3.1  Arduino IDE界面

3.2  軟件各模塊程序設(shè)計(jì)3.2.1  血氧飽和及心率數(shù)值采集

     血氧飽和度測(cè)量模塊在采集到血氧數(shù)值后,會(huì)通過(guò)串口(UART)的方式發(fā)送給單片機(jī),其格式在上文已經(jīng)有過(guò)介紹,血氧模塊回以每秒50個(gè)數(shù)據(jù)包的速度發(fā)送數(shù)據(jù),每個(gè)數(shù)據(jù)包包含有5個(gè)字節(jié)的數(shù)據(jù),其中有3個(gè)字節(jié)的數(shù)據(jù)是我們所必須的,一個(gè)字節(jié)是探頭監(jiān)測(cè)位,需要通過(guò)判斷這個(gè)位的數(shù)據(jù)來(lái)判斷傳感器是否連接成功[19];一個(gè)字節(jié)是血氧飽和度的數(shù)值,共有8位,將這8位2進(jìn)制數(shù)值轉(zhuǎn)換成10進(jìn)制的數(shù)值,即血氧飽和度的數(shù)值;一個(gè)字節(jié)是描述心率的數(shù)值,與血氧飽和度一樣,將二進(jìn)制轉(zhuǎn)換為10進(jìn)制即可顯示出來(lái)。所以在單片機(jī)處理時(shí),需要定義一個(gè)數(shù)組來(lái)存儲(chǔ)我們所需的字節(jié)[20]。

3.2.2  體溫溫度數(shù)值采集

非接觸式紅外溫度傳感器是采用的SMBus協(xié)議進(jìn)行讀取、寫(xiě)入數(shù)據(jù)操作的。

讀器件的數(shù)據(jù)格式(命令決定是讀RAM或EEPROM)如下圖3.2所示:

圖3.2 讀數(shù)據(jù)格式

寫(xiě)器件的數(shù)據(jù)格式(命令決定是寫(xiě)RAM或EEPROM)如下圖3.3所示:

圖3.3 寫(xiě)數(shù)據(jù)格式

在主程序中調(diào)用函數(shù)readObjectTempC();即可讀取溫度的數(shù)值。
3.2.3  藍(lán)牙無(wú)線(xiàn)通信

本設(shè)計(jì)使用的藍(lán)牙通信模塊為AT指令開(kāi)發(fā),可以通過(guò)AT指令修改串口通信的波特率,設(shè)置配對(duì)碼等。具體的AT指令如下:

1、設(shè)置和查詢(xún)配對(duì)碼:

AT+PSWD = <Param>      

Param: 配對(duì)碼

2、設(shè)置和查詢(xún)串口參數(shù):

AT+UART = <Param1>,<Param2>,<Param3>

Param1:波特率(bits/s)

Param2:停止位

Param3:校驗(yàn)位

3、設(shè)置和查詢(xún)模塊角色:

AT+ROLE = <Param>

Param :0——從角色(slave),被動(dòng)連接,可以與任何藍(lán)牙適配器連接通信

           1——主角色(master),主動(dòng)連接,建立通信數(shù)據(jù)傳輸通道

          2——回環(huán)角色(slave--loop),被動(dòng)連接,接收主設(shè)備發(fā)送數(shù)據(jù)并返回給主設(shè)備

在進(jìn)行程序設(shè)計(jì)之前可以先通過(guò)AT指令將模塊的參數(shù)配置完成,然后在程序中設(shè)置好波特率后即可直接使用串口發(fā)送函數(shù),將數(shù)據(jù)通過(guò)串口發(fā)送給藍(lán)牙模塊,然后藍(lán)牙模塊會(huì)自動(dòng)再將數(shù)據(jù)遠(yuǎn)程發(fā)送給手機(jī)APP端[21]。

    整個(gè)系統(tǒng)的程序設(shè)計(jì)流程圖如下圖3.4所示:

圖3.4 系統(tǒng)程序設(shè)計(jì)流程圖

3.2.4  ZigBee無(wú)線(xiàn)通信

本設(shè)計(jì)使用的局域網(wǎng)無(wú)線(xiàn)通信模塊為美國(guó)DIGI的一種ZigBee通信模塊,其內(nèi)置有ZigBee協(xié)議棧,可以使用DIGI提供的X-CTU軟件通過(guò)AT指令的方式配置ZigBee模塊的相關(guān)參數(shù),包括通信波特率、運(yùn)行模式(協(xié)調(diào)器或路由或終端)、網(wǎng)絡(luò)ID、發(fā)送數(shù)據(jù)的目的地址等等[22]。

X-CTU軟件可以配置ZigBee模塊,界面如下圖3.5所示:

圖3.5  X-CTU界面

左上角的兩個(gè)按鈕用于發(fā)現(xiàn)設(shè)備,將ZigBee模塊通過(guò)串口與電腦端連接后,即可使用該功能發(fā)現(xiàn)設(shè)備進(jìn)行下一步的配置,MAC尋找界面如下圖3.6所示:

圖3.6  MAC尋找界面

在這個(gè)界面讀出模塊后,會(huì)顯示一些基本參數(shù),比如此串口號(hào)和模塊的64為地址。然后點(diǎn)擊Add selected devices,即可進(jìn)入?yún)?shù)讀取/配置界面,如下圖3.7所示:

圖3.7 讀取/配置參數(shù)界面

在設(shè)置參數(shù)時(shí),主要設(shè)置以下參數(shù):首先為模塊波特率,用于與單片機(jī)之間的通信,本設(shè)計(jì)中設(shè)置為115200;然后設(shè)置PAN ID,這個(gè)ID用于加入網(wǎng)絡(luò),當(dāng)多個(gè)ZigBee模塊的PAN ID相同時(shí),便能實(shí)現(xiàn)自組網(wǎng),形成局域網(wǎng)絡(luò)進(jìn)行通信;最后為發(fā)送數(shù)據(jù)的目的地址,在本設(shè)計(jì)中,是終端設(shè)備發(fā)送數(shù)據(jù)給協(xié)調(diào)器,故在終端設(shè)備中需要設(shè)置協(xié)調(diào)器的64位唯一地址[23]。也可以在協(xié)調(diào)器上設(shè)置終端的64位唯一地址,使用協(xié)調(diào)器給終端發(fā)送數(shù)據(jù)。

3.3  Android監(jiān)護(hù)軟件設(shè)計(jì)3.3.1  系統(tǒng)的開(kāi)發(fā)環(huán)境與安裝

本設(shè)計(jì)開(kāi)發(fā)android程序是采用的eclipse環(huán)境,eclipse編譯器是一款比較強(qiáng)大的APP開(kāi)發(fā)軟件,相較其他的開(kāi)發(fā)平臺(tái)而言,具有比較大的優(yōu)勢(shì),比如界面的操作簡(jiǎn)單,在編寫(xiě)程序的過(guò)程中可以非常清晰、直觀(guān)地發(fā)現(xiàn)問(wèn)題[24]。

              開(kāi)發(fā)android軟件是采用的eclipse軟件,安裝時(shí),先在官網(wǎng)eclipse.org中下載安裝包,分為32位與64位,注意要與電腦配置一致。下載完安裝包后,解壓并運(yùn)行eclipse.exe[25],F(xiàn)在首先需要安裝java環(huán)境,第一要設(shè)置工作環(huán)境,選擇你希望安裝的盤(pán),點(diǎn)擊OK。如下圖3.8所示:

圖3.8 設(shè)置工作環(huán)境

然后創(chuàng)建項(xiàng)目,選擇file->new->java project,如下圖3.9所示:

圖3.9 創(chuàng)建項(xiàng)目

鍵入項(xiàng)目名,點(diǎn)擊finish。完成項(xiàng)目創(chuàng)建后,點(diǎn)擊Java按鈕,然后在菜單的左側(cè)選擇test項(xiàng)目,右鍵點(diǎn)擊new->class,鍵入工程名,完成。最后在代碼框中就可以開(kāi)始敲代碼開(kāi)發(fā)了。

3.3.2  Android應(yīng)用程序開(kāi)發(fā)過(guò)程

Android應(yīng)用程序的設(shè)計(jì)分為以下幾個(gè)過(guò)程:在程序運(yùn)行時(shí),會(huì)開(kāi)啟一個(gè)主線(xiàn)程,用于主界面的顯示,然后需要搜索手機(jī)附近開(kāi)啟的藍(lán)牙設(shè)備,搜索到相關(guān)的藍(lán)牙設(shè)備后即可連接,在連接時(shí)會(huì)開(kāi)啟一個(gè)子線(xiàn)程用于socket連接。當(dāng)建立與設(shè)備的連接后,會(huì)不斷接收來(lái)自前端藍(lán)牙設(shè)備發(fā)送的多參數(shù)生理數(shù)據(jù)值,每次接收到數(shù)據(jù)后,程序會(huì)首先判斷該數(shù)據(jù)是否為有效數(shù)據(jù),若是,則在屏幕上顯示出來(lái),若不是,則繼續(xù)監(jiān)測(cè)數(shù)據(jù)。

程序設(shè)計(jì)的流程圖如下圖3.10所示

圖3.10  APP程序流程圖


3.3.3  主要應(yīng)用模塊的實(shí)現(xiàn)

首先進(jìn)入APP界面后,會(huì)進(jìn)行一系列的初始化過(guò)程,進(jìn)入界面后會(huì)有一個(gè)搜索按鈕,用于發(fā)現(xiàn)周?chē)目蛇B接藍(lán)牙設(shè)備。

點(diǎn)擊搜索按鈕后,在界面會(huì)出現(xiàn)一個(gè)設(shè)備列表,用于展現(xiàn)發(fā)現(xiàn)的所有藍(lán)牙設(shè)備,此時(shí),選擇我們的前端藍(lán)牙設(shè)備“BluetoothBee”,進(jìn)行連接,連接過(guò)程是一個(gè)基于socket通信的連接,因?yàn)槠湎鄬?duì)來(lái)說(shuō)耗時(shí)較長(zhǎng),故不能運(yùn)行在主線(xiàn)程,所以開(kāi)辟了另外一個(gè)子線(xiàn)程供手機(jī)與藍(lán)牙設(shè)備進(jìn)行連接。當(dāng)手機(jī)APP與前端藍(lán)牙設(shè)備建立連接后,即可開(kāi)始讀取數(shù)據(jù)。

讀取完數(shù)據(jù)后需要進(jìn)行解析數(shù)據(jù),然后會(huì)在界面上顯示相應(yīng)的生理參數(shù)。

    手機(jī)APP的界面以及生理參數(shù)數(shù)值顯示實(shí)物圖如下圖3.11:

   

圖3.11  APP界面

在APP客戶(hù)端顯示的數(shù)據(jù)都是根據(jù)主控板采集的數(shù)據(jù)實(shí)時(shí)變化的,可以方便使用者非常直觀(guān)的看到自己的生理參數(shù)數(shù)值。












4 系統(tǒng)整體功能測(cè)試4.1 智能化家庭健康監(jiān)護(hù)系統(tǒng)實(shí)物圖

智能化家庭健康監(jiān)護(hù)系統(tǒng)是一個(gè)便攜式的多生理參數(shù)實(shí)時(shí)監(jiān)測(cè)系統(tǒng),在整套系統(tǒng)中包含有主控板ATMEGA2560、Arduino模塊、血氧飽和度測(cè)量模塊、紅外測(cè)溫模塊、藍(lán)牙傳輸模塊、ZigBee無(wú)線(xiàn)傳輸模塊、TFT液晶屏、充電模塊、升壓模塊、充電電池。在實(shí)際使用時(shí),進(jìn)行血氧飽和度、心率、體溫的參數(shù)測(cè)量,并且每次測(cè)量時(shí)都會(huì)將數(shù)據(jù)實(shí)時(shí)傳入手機(jī)APP端進(jìn)行顯示,可以讓使用者很直觀(guān)的看到測(cè)量的具體參數(shù)。對(duì)于電源,采用的是充放電電池,并設(shè)計(jì)有充電電源口,當(dāng)電池電量不足時(shí)可以通過(guò)這個(gè)接口充電,使用起來(lái)非常方便。具體的實(shí)物圖如下圖4.1所示:

圖4.1 系統(tǒng)整機(jī)圖

對(duì)于紅外測(cè)溫模塊,在另外一個(gè)節(jié)點(diǎn)設(shè)備上,打開(kāi)電源后,模塊會(huì)自動(dòng)采集目標(biāo)體溫,然后通過(guò)ZigBee模塊傳輸給主系統(tǒng)板上的ZigBee協(xié)調(diào)器,實(shí)物圖如下圖4.2所示:

圖4.2 紅外測(cè)溫從機(jī)圖

在進(jìn)行測(cè)量的時(shí)候,按下電源開(kāi)關(guān),然后手指戴上血氧探頭,幾秒鐘過(guò)后,即可同步成功,然后在液晶屏上面會(huì)有血氧的波形圖和血氧值、心率值、體溫值的顯示。在TFT液晶屏上的效果圖如下圖4.3所示,屏幕上方左邊為BMP(心率),中間為SPO(血氧飽和度),右邊為T(mén)EMP(體溫):

圖4.3  TFT液晶屏顯示

在手機(jī)APP上的顯示界面如下圖4.4所示,手機(jī)通過(guò)藍(lán)牙接收到的數(shù)據(jù)在屏幕上進(jìn)行顯示,包括心跳、血氧、體溫的具體數(shù)值,并根據(jù)前端設(shè)備的實(shí)時(shí)采集進(jìn)行更新:

圖4.4  實(shí)測(cè)效果圖


總結(jié)與展望

本課題設(shè)計(jì)的智能化家庭健康監(jiān)護(hù)系統(tǒng)采取了硬件與軟件相結(jié)合的開(kāi)發(fā)方法。在整個(gè)設(shè)計(jì)的過(guò)程中需要我對(duì)單片機(jī)開(kāi)發(fā)、PCB繪制調(diào)試、C/C++編程語(yǔ)言、JAVA語(yǔ)言都有一定程度的了解。與此同時(shí),需要學(xué)會(huì)查找相關(guān)的資料文件,熟悉各個(gè)芯片的開(kāi)發(fā)使用方法以及它們的電氣特性等等,這些資料對(duì)于開(kāi)發(fā)者來(lái)說(shuō),是非常重要的第一步。整個(gè)課題設(shè)計(jì)的過(guò)程也同時(shí)是我再次學(xué)習(xí)、鞏固、加深的過(guò)程,對(duì)“溫故而知新”這句話(huà)也有了更深一步的理解。我們只有在不斷學(xué)習(xí),不斷鞏固,不斷思考,才能不斷進(jìn)步,掌握的知識(shí)技能才能越來(lái)越牢靠,并且在實(shí)踐過(guò)程中需要我們本著實(shí)事求是的心態(tài)去做事,善于發(fā)現(xiàn)并解決問(wèn)題,有意識(shí)培養(yǎng)自己解決問(wèn)題的能力,為今后的學(xué)習(xí)和工作打下良好的基礎(chǔ)。

作者在最初進(jìn)行本課題的設(shè)計(jì)時(shí)遇到了很多的艱難困阻。首先是血氧飽和度的數(shù)據(jù)一直無(wú)法同步,因?yàn)閱纹瑱C(jī)無(wú)法采用串口中斷的方式,所以一直是采用的串口查詢(xún)的方式來(lái)接收數(shù)據(jù),這就導(dǎo)致時(shí)不時(shí)會(huì)丟包,而不能完全同步。其次,在單片機(jī)設(shè)計(jì)方面,沒(méi)有接觸過(guò)TFT液晶屏的開(kāi)發(fā),所以當(dāng)采集到生理數(shù)值時(shí),需要在液晶屏上顯示出具體數(shù)值,同時(shí)還需要實(shí)時(shí)繪制血氧飽和度的波形,這一部分在程序設(shè)計(jì)上也花費(fèi)了很大精力才得以解決。再就是android APP開(kāi)發(fā)方面,因?yàn)樽髡咭恢倍际鞘褂肅語(yǔ)言開(kāi)發(fā)單片機(jī)程序,而完全沒(méi)有接觸過(guò)軟件APP的開(kāi)發(fā),所以從零開(kāi)始學(xué)習(xí)java語(yǔ)言,了解并熟悉eclipse開(kāi)發(fā)環(huán)境也是難點(diǎn)之一。

本文在設(shè)計(jì)上有兩大特點(diǎn):一是采用主從一體的藍(lán)牙傳輸模塊進(jìn)行遠(yuǎn)程的數(shù)據(jù)傳輸。這種無(wú)線(xiàn)通信方式是使用的很頻繁,也深受大眾喜愛(ài)的一種通信方式,其使用起來(lái)非常便捷,而且傳輸數(shù)據(jù)穩(wěn)定可靠,同時(shí)還具有低功耗模式,適用于便攜式設(shè)備。二是系統(tǒng)采集的多生理參數(shù)除了會(huì)在設(shè)備本身的TFT液晶屏上顯示出來(lái),還會(huì)通過(guò)藍(lán)牙將數(shù)據(jù)發(fā)送給APP客戶(hù)端,在手機(jī)上進(jìn)行實(shí)時(shí)的顯示。

最后,本文雖然實(shí)現(xiàn)了智能化家庭健康監(jiān)護(hù)系統(tǒng)的生理參數(shù)采集、顯示、無(wú)線(xiàn)傳輸功能,但仍然存在很多問(wèn)題有待改進(jìn),而且在功能上還有很多是可以繼續(xù)完善的。在生理參數(shù)采集部分,可以加入心電的采集、分析,在無(wú)線(xiàn)傳輸部分可以使用WIFI或其他可以接入互聯(lián)網(wǎng)的設(shè)備,讓前端系統(tǒng)采集的生理數(shù)據(jù)能夠傳輸?shù)皆贫朔⻊?wù)器,與醫(yī)院進(jìn)行合作,使醫(yī)院的主治醫(yī)師能夠查看我們的生理數(shù)據(jù),從而能夠在日常飲食或生活習(xí)慣上給予適當(dāng)?shù)慕ㄗh,使得全社會(huì)人的身體都能夠更加健康。在系統(tǒng)的供電部分可以設(shè)計(jì)的再微小點(diǎn),不用占據(jù)很大的空間,同時(shí)也能提供足夠的電量。通過(guò)上述改進(jìn)措施,此智能化家庭健康監(jiān)護(hù)系統(tǒng)將會(huì)具備更加強(qiáng)大的實(shí)用價(jià)值以及商業(yè)價(jià)值。


參考文獻(xiàn)

[1] 劉翔, 朱士俊, 李信春. 我國(guó)遠(yuǎn)程醫(yī)療發(fā)展現(xiàn)狀、難點(diǎn)和對(duì)策分析[J]. 中國(guó)信息界, 2006(4):60-63.

[2] 吳明, 張振忠. 中國(guó)農(nóng)村合作醫(yī)療發(fā)展模式的制度分析[J]. 中國(guó)衛(wèi)生資源, 2000(3):104-107.

[3] 鄔寬明. 單片機(jī)外圍器件實(shí)用手冊(cè)--數(shù)據(jù)傳輸接口器件分冊(cè)(第2版)[M]. 北航大學(xué)出版社, 2005.

[4] 劉坤, 趙紅波, 張憲棟. 51單片機(jī)C語(yǔ)言應(yīng)用開(kāi)發(fā)技術(shù)大全[M]. 人民郵電出版社, 2011.

[5] 陸垂偉, 毛雪濤, 戴翔宇,等. 遠(yuǎn)程串行數(shù)據(jù)通信技術(shù)的實(shí)現(xiàn)方法及其應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用研究, 2002, 19(3):23-24.

[6] 石東海. 單片機(jī)數(shù)據(jù)通信技術(shù)從入門(mén)到精通[M]. 西安電子科技大學(xué)出版社, 2002.

[7] 高潮. TFT液晶顯示驅(qū)動(dòng)電路與電源優(yōu)化設(shè)計(jì)方法[J]. 深圳信息職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2007, 5(2):14-18.

[8] 原羿, 蘇鴻根. 基于ZigBee技術(shù)的無(wú)線(xiàn)網(wǎng)絡(luò)應(yīng)用研究[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(6):89-91.

[9] 屈景輝 李傳偉. TEECHART應(yīng)用技術(shù)詳解--快速圖表制作工具[M]. 水利水電出版社, 2008.

[10] 繆璐璐. 基于Arduino平臺(tái)開(kāi)發(fā)交互式產(chǎn)品原型的研究[D]. 上海交通大學(xué), 2013.

[11] 惠特. Arduino技術(shù)內(nèi)幕[M]. 人民郵電出版社, 2013.

[12] 李莉, 劉剛. 基于藍(lán)牙技術(shù)的溫室環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J]. 農(nóng)業(yè)機(jī)械學(xué)報(bào), 2006, 37(10):97-100.

[13] 龔建偉. Visual C++/Turbo C 串口通信編程實(shí)踐[M]. 電子工業(yè)出版社, 2004.

[14] 何希才. 數(shù)字移動(dòng)通信技術(shù)及應(yīng)用[M]. 機(jī)械工業(yè)出版社, 2003.

[15] 鐘君, 蔡黎明, 于涌. 基于MLX90614的無(wú)線(xiàn)溫度采集系統(tǒng)設(shè)計(jì)[J]. 傳感器與微系統(tǒng), 2015, 34(3):87-89.

[16] 封瑜, 葛萬(wàn)成. 基于ZigBee技術(shù)的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)構(gòu)建與應(yīng)用[J]. 電子工程師, 2007, 33(3):21-23.

[17] 許一萍. Zigbee技術(shù)在無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中的應(yīng)用研究[D]. 復(fù)旦大學(xué), 2008.

[18] 張利江, 郭進(jìn)利, 宋亞娟. 遠(yuǎn)程醫(yī)療監(jiān)護(hù)的現(xiàn)狀與發(fā)展[J]. 新農(nóng)村:黑龍江, 2011(2):138-139.

[19] 諸強(qiáng), 王學(xué)民, 胡賓,等. 無(wú)線(xiàn)遠(yuǎn)程醫(yī)療系統(tǒng)[J]. 北京生物醫(yī)學(xué)工程, 2004, 23(3):225-227.

[20] 張利江, 郭進(jìn)利, 宋亞娟. 遠(yuǎn)程醫(yī)療監(jiān)護(hù)的現(xiàn)狀與發(fā)展[J]. 新農(nóng)村:黑龍江, 2011(2):138-139.

[21] 范曉武. 基于嵌入式設(shè)備的家庭健康監(jiān)護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 浙江工業(yè)大學(xué)學(xué)報(bào), 2010, 38(3):289-293.

[22] Roll J S, Froma W. Systemic training for healthcare professionals: the Chicago Center For Family Health approach.[J]. Family Process, 2005, 44(3):283-301.

[23] Heydon A, Mcdonald J. Measurement of family health teams is underdeveloped.[J]. Sedimentology, 2011, 183(14):1628-1628.

[24] 朱新建, 吳寶明, 卓豫,等. 多參數(shù)家庭健康監(jiān)護(hù)實(shí)時(shí)檢測(cè)的方法[J]. 中國(guó)組織工程研究與臨床康復(fù), 2007(1):121-123.

[25] 黃永健, 王偉, 謝廣明,等. 物聯(lián)網(wǎng)家庭健康監(jiān)護(hù)系統(tǒng)[J]. 兵工自動(dòng)化, 2013(11):87-90.


附錄A

1.  主控板程序:

  1. #include <UTFT.h>

  2. #include <SPI.h>

  3. #include <SD.h>

  4. #include <SoftwareSerial.h>

  5. #include <Wire.h>

  6. #include <Adafruit_MLX90614.h>



  7. Adafruit_MLX90614 mlx = Adafruit_MLX90614();

  8. SoftwareSerial mySerial(6, 7);



  9. // Declare which fonts we will be using

  10. extern uint8_t SmallFont[];

  11. UTFT myGLCD(QD220A,A2,A1,A5,A4,A3);   //初始化液晶的類(lèi)

  12. File myFile;     / /初始化SD卡的類(lèi)

  13. extern uint8_t BigFont[];

  14. int data[5];

  15. char str[9];

  16. int buf[220],buf1[4];

  17. int y1=0;      //判斷是否為第一次畫(huà)線(xiàn)

  18. int y2=45;   

  19. int x=1, x2=0;

  20. int r=0,time=0;

  21. long a=0,t1=0;



  22. void setup()

  23. {

  24.   myGLCD.InitLCD();            //液晶屏初始化

  25.   myGLCD.setFont(SmallFont);     //設(shè)置液晶屏上字的大小

  26.   Serial.begin(9600);              //ZigBee波特率

  27.   Serial1.begin(9600);             //調(diào)試串口

  28.   mySerial.begin(115200);          //血氧飽和度通信

  29.   mlx.begin();                    //初始化紅外測(cè)溫模塊



  30.   myGLCD.fillScr(255,255,255);    //清屏



  31.   if (!SD.begin(53)) {               //檢測(cè)SD卡是否讀取成功

  32.     return;

  33.   }

  34.   myFile = SD.open("SPO2.txt", FILE_WRITE);

  35.   myGLCD.setColor(0,255,255);               //設(shè)置字體顏色

  36.   myGLCD.setBackColor(255, 0, 0);            //設(shè)置背景顏色

  37.   myGLCD.print("BMP:", 5, 1);

  38.   myGLCD.print("SPO:", 70, 1);

  39.   myGLCD.print("TEMP:", 130, 1);

  40. }



  41. void loop() {

  42. if (Serial1.available()){                //采用循環(huán)查詢(xún)方式檢測(cè)串口是否有數(shù)據(jù)

  43.     for(int i=0;i<5;i++){               //采用for循環(huán)連續(xù)讀取5個(gè)字節(jié)數(shù)據(jù)

  44.       data[i] = Serial1.read();           //讀一個(gè)字節(jié)數(shù)據(jù)

  45.       delay(1);

  46.     }

  47.   }

  48. Serial.println(data[4]);

  49. if(data[3]<120&&data[3]>50){          //判斷數(shù)據(jù)是否已經(jīng)同步,為有效數(shù)據(jù)

  50.    y1=data[1];

  51.     if(a==1){                    //若滿(mǎn)屏,則開(kāi)始清理歷史數(shù)據(jù),即消除部分波形

  52.         myGLCD.setColor(255,255,255);

  53.         if(t1==1){

  54.           myGLCD.drawLine(1,135-buf[209],2,135-buf[1]); //第一次畫(huà)波形,兩點(diǎn)連線(xiàn)

  55.           t1=0;

  56.         }               

  57.         myGLCD.drawLine(x+1,135-buf[x],x+2,135-buf[x+1]); //兩點(diǎn)連線(xiàn),繪制波形

  58.     }

  59.     if(x<210){                   //若沒(méi)有滿(mǎn)屏,則繼續(xù)繪制波形

  60.         myGLCD.setColor(0,255,255);

  61.                               myGLCD.drawLine(x,135-y2,x+1,135-y1);

  62.                               y2=y1;

  63.                               buf[x]=y1;

  64.                               x++;

  65.         time++;

  66.     }else{

  67.                 x=1;a=1;t1=1;

  68.     }

  69. }

  70.     if(time==100){

  71.        myGLCD.setBackColor(255, 0, 0);

  72.        String b = (String)data[3];

  73.        myGLCD.print(b, 35, 1);      //在液晶屏上顯示心率的數(shù)值

  74.        b = (String)data[4];

  75.        myGLCD.print(b, 100, 1);     //在液晶上顯示血氧飽和度的數(shù)值

  76.        b = (String)mlx.readObjectTempC();

  77.        myGLCD.print(b, 168, 1);     //在液晶上顯示溫度的數(shù)值

  78.        delay(20);

  79.        mySerial.print(data[3]);       //通過(guò)串口發(fā)送將心率的數(shù)值發(fā)送給藍(lán)牙

  80.        mySerial.print(",");

  81.        mySerial.print(data[4]);       //將血氧飽和度的數(shù)值發(fā)送給藍(lán)牙

  82.        mySerial.print(",");

  83.        mySerial.print(b);            //將體溫的數(shù)值發(fā)送給藍(lán)牙

  84.        mySerial.print(" ");

  85.        time=0;

  86.      }

  87. }

  88. 2.  紅外測(cè)溫讀取數(shù)據(jù)部分代碼:

  89. #define MLX90614_TOBJ1  0x07



  90. uint16_t read16(uint8_t a)

  91. {

  92. uint16_t  ret;

  93. uint8_t  pec;

  94. Wire.beginTransmission(_addr); // 開(kāi)始發(fā)送數(shù)據(jù)給設(shè)備

  95. Wire.write(a); // 發(fā)送寄存器地址給傳遞參數(shù)

  96.     Wire.endTransmission(false); // 結(jié)束數(shù)據(jù)傳送

  97. Wire.requestFrom(_addr, (uint8_t)3);// 發(fā)送讀取的n字節(jié)數(shù)據(jù)

  98.     ret  =  Wire.read(); // 接受數(shù)據(jù)

  99. ret  |=  Wire.read() << 8; // 接受數(shù)據(jù)

  100. pec  =  Wire.read();

  101. return ret;

  102. }

  103. float readTemp(uint8_t reg)

  104. {

  105. float temp;

  106. temp  =  read16(reg);

  107. temp  *=  .02;

  108. temp  -=  273.15;

  109. return  temp;

  110. }

  111. double readObjectTempC(void)

  112. {

  113. return readTemp(MLX90614_TOBJ1);

  114. }



  115. 2.  APP客戶(hù)端初始化代碼:

  116. private void init() {                              

  117.                             list = new ArrayList<SiriListItem>();

  118.                             mAdapter = new ChatListAdapter(this, list);

  119.                             mListView = (ListView) findViewById(R.id.list);

  120.                             mListView.setAdapter(mAdapter);

  121.                             mListView.setFastScrollEnabled(true);

  122.                             mListView.setOnItemClickListener(mDeviceClickListener);                           



  123.                   IntentFilterdiscoveryFilter=new IntentFilter(BluetoothDevice.ACTION_FOUND);

  124.         this.registerReceiver(mReceiver, discoveryFilter);

  125.         // Register for broadcasts when discovery has finished

  126.         IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

  127.         this.registerReceiver(mReceiver, foundFilter);



  128.         Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();

  129.         if (pairedDevices.size() > 0) {

  130.             for (BluetoothDevice device : pairedDevices) {

  131.           list.add(new SiriListItem(device.getName() + "\n" + device.getAddress(), true));

  132.                           mAdapter.notifyDataSetChanged();

  133.                                     mListView.setSelection(list.size() - 1);

  134.             }

  135.         } else {

  136.                       list.add(new SiriListItem("沒(méi)有設(shè)備已經(jīng)配對(duì)", true));

  137.                       mAdapter.notifyDataSetChanged();

  138.                                 mListView.setSelection(list.size() - 1);

  139.         }

  140.                            

  141.                             seachButton = (Button)findViewById(R.id.start_seach);

  142.                             seachButton.setOnClickListener(seachButtonClickListener);

  143.                            

  144.                             serviceButton = (Button)findViewById(R.id.start_service);

  145.                             serviceButton.setOnClickListener(new OnClickListener() {

  146.                                           @Override

  147.                                           public void onClick(View arg0) {

  148.                                                         Bluetooth.serviceOrCilent=ServerOrCilent.SERVICE;

  149.                                                         Bluetooth.mTabHost.setCurrentTab(1);

  150.                                           }

  151.                             });            

  152.               }   

  153. 3.  發(fā)現(xiàn)藍(lán)牙模塊:

  154. private OnClickListener seachButtonClickListener = new OnClickListener() {

  155. public void onClick(View arg0) {

  156. if(mBtAdapter.isDiscovering())

  157.               {

  158.                             mBtAdapter.cancelDiscovery();

  159.                             seachButton.setText("重新搜索");

  160.               }

  161.               else

  162.               { list.clear();

  163.               mAdapter.notifyDataSetChanged();

  164.                                          

  165.               Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();

  166.               if (pairedDevices.size() > 0) {

  167.                             for (BluetoothDevice device : pairedDevices) {

  168.                   list.add(new SiriListItem(device.getName() + "\n" + device.getAddress(), true));

  169.                   mAdapter.notifyDataSetChanged();

  170.                             mListView.setSelection(list.size() - 1);

  171.                             }

  172.               } else {

  173.                             list.add(new SiriListItem("No devices have been paired", true));

  174.                             mAdapter.notifyDataSetChanged();

  175.                             mListView.setSelection(list.size() - 1);

  176.               }                                                                     

  177.               /* 開(kāi)始搜索 */

  178.               mBtAdapter.startDiscovery();

  179.               seachButton.setText("停止搜索");

  180.                             }                                                      

  181.               }

  182. };



  183. 4.  連接藍(lán)牙模塊

  184. // 開(kāi)啟客戶(hù)端

  185. private class clientThread extends Thread {

  186. public void run() {

  187.               try {

  188.               // 創(chuàng)建一個(gè)Socket連接:只需要服務(wù)器在注冊(cè)時(shí)的UUID號(hào)

  189.               socket = device.createRfcommSocketToServiceRecord(UUID

  190.                             .fromString("00001101-0000-1000-8000-00805F9B34FB"));

  191.               // 連接

  192.               Message msg2 = new Message();

  193.               msg2.obj = "請(qǐng)稍候,正在連接服務(wù)器:" + Bluetooth.BlueToothAddress;

  194.               msg2.what = 0;

  195.               LinkDetectedHandler.sendMessage(msg2);



  196.               socket.connect();



  197.               Message msg = new Message();

  198.               msg.obj = "已經(jīng)連接上服務(wù)端!可以發(fā)送信息。";

  199.               msg.what = 0;

  200.               LinkDetectedHandler.sendMessage(msg);

  201.               // 啟動(dòng)接受數(shù)據(jù)

  202.               mreadThread = new readThread();

  203.               mreadThread.start();

  204.               } catch (IOException e) {

  205.               Log.e("connect", "", e);

  206.               Message msg = new Message();

  207.               msg.obj = "連接服務(wù)端異常!斷開(kāi)連接重新試一試。";

  208.               msg.what = 0;

  209.               LinkDetectedHandler.sendMessage(msg);

  210.                   }

  211.               }

  212. };



  213.      讀取數(shù)據(jù):

  214. // 讀取數(shù)據(jù)

  215. private class readThread extends Thread {

  216.               public void run() {

  217.                             byte[] buffer = new byte[1024];

  218.                             int bytes;

  219.                             InputStream mmInStream = null;

  220.                             try {

  221.                                           mmInStream = socket.getInputStream();

  222.                             } catch (IOException e1) {

  223.                                           e1.printStackTrace();

  224.                             }

  225.                             while (true) {

  226.                                           byte[] buffer1 = new byte[128];

  227.                                           int count;

  228.                                           try {

  229.                                                         count = mmInStream.read(buffer1);

  230.                                                         Message msg = new Message();

  231.                                                         msg.obj = new String(buffer1, 0, count, "UTF-8");

  232.                                                         msg.what = 1;

  233.                                                         LinkDetectedHandler.sendMessage(msg);

  234.                                           } catch (IOException e) {

  235.                                                         e.printStackTrace();

  236.                                           }

  237.                             }

  238.               }

  239. }

  240. 6.  解析并顯示數(shù)據(jù):

  241. public void setdata(String string)

  242. {

  243.               String[] s = string.split(",");

  244.               int s_0 = 0, s_1 = 0, s_2 = 0;

  245.             

  246.               if (s.length == 3 && s[0] != null && !s[0].equals("")

  247.                             && s[1] != null && !s[1].equals("") && s[2] != null

  248.                             && !s[2].equals("")) {

  249.                             s_0 = Integer.parseInt(s[0].trim());

  250.                             s_1 = Integer.parseInt(s[1].trim());

  251.                             double  d = Double.parseDouble(s[2]);

  252.                             s_2 = (int)d;

  253.               }

  254.               if (s.length == 3 && s_0 > 49 && s_0 < 121 && s_1 > 94 && s_1 < 100

  255.                                           && s_2 > 20 && s_2 < 40) {

  256.                             chat_textview.setText("心跳:" + s[0] + "\n血氧:" + s[1] + "\n體溫:"

  257.                                                                       + s[2]);

  258.                             }

  259. }
復(fù)制代碼






文獻(xiàn)綜述
前言:
目前人們的生活質(zhì)量正在逐漸提高,越來(lái)越多的人們開(kāi)始將關(guān)注的重心從金錢(qián)轉(zhuǎn)移到身體健康上面,所以做好疾病預(yù)防工作的重要性尤為突出。對(duì)于一些單獨(dú)在家的“空巢老人”,我們更加需要重視他們的日常健康監(jiān)護(hù),這也是現(xiàn)代社會(huì)關(guān)注的焦點(diǎn)問(wèn)題之一[1]。以往老人需要進(jìn)行身體檢查時(shí)要前往醫(yī)院進(jìn)行檢查,但隨著信息化時(shí)代的到來(lái),我們可以讓老人在家進(jìn)行健康檢查,并且能遠(yuǎn)程異地的對(duì)老人的健康進(jìn)行監(jiān)護(hù)。本課題設(shè)計(jì)了一個(gè)智能化家庭健康監(jiān)護(hù)系統(tǒng),通過(guò)血氧傳感器,體溫傳感器采集人體的血氧飽和度、脈率以及體溫,通過(guò)液晶屏顯示出來(lái)并且通過(guò)藍(lán)牙模塊發(fā)送到手機(jī)APP中[2]。
主體:
主要芯片選擇
  • arduino單片機(jī)控制模塊
Arduino Mega2560是基于ATmega2560的微控制板,具有54路數(shù)字輸入輸出,適合需要大量IO接口的設(shè)計(jì)。處理器的核心是ATmega2560,采用晶振為16MHz晶體振蕩器。
  • AT Mega2560系列單片機(jī)操作電壓:5V;
  • I/O腳直流電流:40mA
  • 3.3V腳的電流: 50mA
  • 閃存: 256K(其中8KB用于引導(dǎo)程序);
  • SRAM8KB;
  • EEPROM4KB;
(7)工作溫度范圍: -40℃~+85℃/0℃~+75℃;
  • 藍(lán)牙模塊
藍(lán)牙通信技術(shù)是一種工作在2.4 GHz 頻段的無(wú)線(xiàn)通信技術(shù)。目前藍(lán)牙技術(shù)已經(jīng)逐漸趨向成熟。因?yàn)樗{(lán)牙技術(shù)的日趨成熟,在使用和遠(yuǎn)程傳輸方面具有非常好的系統(tǒng)穩(wěn)定性和抗干擾能力,而且只需配備少許外圍器件就可以實(shí)現(xiàn)其強(qiáng)大的功能[3]。
藍(lán)牙模塊是使用2.4Ghz 全球開(kāi)放的ISM 頻段免許可證;Class 2功率等級(jí),主從一體,抗干擾能力強(qiáng),特別適合工業(yè)控制場(chǎng)合;具有12路可AT命令編程的輸出IO口,1路帶硬件流控的UART接口,3路8位ADC輸入接口,板載有藍(lán)牙天線(xiàn);無(wú)線(xiàn)串口數(shù)據(jù)透?jìng)鳎銾ART兼容3.3~5V的接口,具有128-bit安全校驗(yàn)機(jī)制,符合ROHS等多種國(guó)際認(rèn)證[4];運(yùn)行在可配對(duì)連接模式時(shí),電流最低可達(dá)3.3mA,在通訊模式下最低可達(dá)20mA;低功耗3.0 -3.6V 工作,關(guān)機(jī)模式下為29uA;
  • ZigBee模塊
本設(shè)計(jì)采用的ZigBee芯片為T(mén)I公司設(shè)計(jì)生產(chǎn)的CC2530芯片,芯片內(nèi)嵌有標(biāo)準(zhǔn)ZigBee協(xié)議棧,而且在芯片內(nèi)部還集成有一塊8051內(nèi)核,是一片增強(qiáng)型的51單片機(jī)[5]。在ZigBee網(wǎng)絡(luò)中,所有的節(jié)點(diǎn)設(shè)備分為3中類(lèi)型,一種是協(xié)調(diào)器,一種是路由器,一種是終端。在同一個(gè)網(wǎng)絡(luò)中,需要一個(gè)協(xié)調(diào)器來(lái)啟動(dòng)并維護(hù)整個(gè)網(wǎng)絡(luò),這個(gè)協(xié)調(diào)器負(fù)責(zé)所在網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)設(shè)備的16位地址分配(為自動(dòng)分配)。路由器是在協(xié)調(diào)器啟動(dòng)網(wǎng)絡(luò)后,協(xié)助其維護(hù)整個(gè)網(wǎng)絡(luò)的設(shè)備,同時(shí),路由器也可以作為信息傳遞的中轉(zhuǎn)站,使得信息傳遞的距離更遠(yuǎn)[6]。而終端設(shè)備即處于網(wǎng)絡(luò)邊緣的設(shè)備,一般用于控制器,執(zhí)行來(lái)自路由器或協(xié)調(diào)器的命令。
  • MLX90164模塊
MLX90614是一款用于非接觸式的紅外溫度傳感器,它的內(nèi)部集成了紅外探測(cè)熱電堆芯片和信號(hào)處理專(zhuān)用集成芯片。這款芯片全部封裝在TO-39。MLX90614在信號(hào)調(diào)節(jié)的芯片中使用了先進(jìn)的低噪音放大器,是一個(gè)17-bit ADC以及具有強(qiáng)大功能的DSP器件,從而實(shí)現(xiàn)高精度溫度測(cè)量[7]。其中MLX90614的輸出方式分為SMBus和PWM兩種數(shù)字輸出方式。
  • TFT液晶屏
TFT液晶屏是每個(gè)像素都設(shè)有一個(gè)半導(dǎo)體開(kāi)關(guān),其加工工藝類(lèi)似于大規(guī)模集成電路。因?yàn)槊總(gè)像素都可以通過(guò)點(diǎn)脈沖直接控制,所以,每個(gè)節(jié)點(diǎn)都相對(duì)獨(dú)立,并且可以進(jìn)行連續(xù)控制,這種設(shè)計(jì)不僅提高了顯示屏的反應(yīng)速度,同時(shí)可以精確控制顯示灰度,所以TFT液晶的色彩更逼真[8]。
  • 血氧飽和度檢測(cè)模塊
血氧飽和度(SpO2)是指血液中被氧氣結(jié)合的氧合血紅蛋白(HbO2)的總?cè)萘克既靠山Y(jié)合的血紅蛋白(Hb,hemoglobin)容量的百分比,即血液中血氧的濃度,是呼吸循環(huán)的一個(gè)重要生理參數(shù)[9]。
血氧飽和度檢測(cè)模塊指標(biāo):
血氧值:
測(cè)量范圍:70%~100%
分 辨 率:1%
精    度:90-100: ±2%  70-89: ±3%
脈率值:
  測(cè)量范圍:30~250 BPM
  分 辨 率:1BPM
  精    度:2BPM或2%,兩者取大者
抗弱灌注:
BCI™兼容模式:0.3%
血氧探頭為數(shù)字血氧探頭,其發(fā)射管波長(zhǎng)為660,940nm,接受管為235,并且接受管采用光頻轉(zhuǎn)換器,可以將光信號(hào)直接轉(zhuǎn)換成數(shù)字信號(hào)由OUT引腳輸出[10]。數(shù)字血氧探頭有5個(gè)引腳,分別為L(zhǎng)EDR-,LEDR+,OUT,VCC,GND其中LEDR-,LEDR+連接發(fā)射管兩端,當(dāng)測(cè)量時(shí),探頭中的光頻轉(zhuǎn)換器會(huì)將光信號(hào)轉(zhuǎn)換為電信號(hào)后可以直接被單片機(jī)的模擬輸入引腳讀取[11]。血氧飽和度模塊上有一片ARM架構(gòu)的32位單片機(jī),對(duì)探頭輸出的信號(hào)進(jìn)行放大,濾波,然后以串口通信的方式對(duì)外輸出。輸出的格式為:9600波特率;每秒有50個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包為5個(gè)字節(jié)[12]。

  • SD卡存儲(chǔ)
SD存儲(chǔ)卡是一種完全開(kāi)放的標(biāo)準(zhǔn),存儲(chǔ)方便,大多用在MP3,數(shù)碼相機(jī)等電子產(chǎn)品上[13]。SD卡具有容量大、體積小、安全性能好、靈活等優(yōu)點(diǎn),目前市場(chǎng)上已有各種大小容量,2G、8G、16G、32G等等,這里采用的是Kingston公司的8G容量SD卡[14]。該SD卡模塊與單片機(jī)之間的通信方式為SPI通信,這種通信方式可以使得數(shù)據(jù)的寫(xiě)入或者讀取的速度能得以保障。在編程時(shí),對(duì)SD卡的操作主要為初始化以及寫(xiě)入操作,此處采用的是多塊寫(xiě)模式[15]。SD卡的存儲(chǔ)功能可以記錄每次使用者所采集的生理數(shù)據(jù),便于以后進(jìn)行定量分析或診斷等等[16]。
Arduino開(kāi)發(fā)環(huán)境介紹
    Arduino是一個(gè)近幾年興起的開(kāi)源單片機(jī)設(shè)計(jì)開(kāi)發(fā)平臺(tái)。其硬件部分由Atmel公司開(kāi)發(fā)的AVR單片機(jī)、I/O接口以及外圍電路組成。在軟件部分,Arduino IDE 包括標(biāo)準(zhǔn)的程序編譯器和程序下載器[17]。它作為一種集成開(kāi)發(fā)環(huán)境,最大的一個(gè)優(yōu)點(diǎn)是簡(jiǎn)單易用,使得開(kāi)發(fā)者可以在短時(shí)間內(nèi)學(xué)會(huì)如何使用。它使用的編程語(yǔ)言是類(lèi)似與C++、C和Java的一種語(yǔ)言,許多的功能函數(shù)都經(jīng)過(guò)了很好的模塊化,開(kāi)發(fā)者只需了解這些功能函數(shù)即可,無(wú)需理解底層函數(shù)的設(shè)計(jì)部分,因此Arduino極大降低了開(kāi)發(fā)者的編程難度[18]。
主體芯片編程方法
Arduino mega2560的編程是采用Arduino語(yǔ)言,編寫(xiě)時(shí)除了主體函數(shù)外還需要根據(jù)具體的外設(shè)模塊加入特定的函數(shù)庫(kù)文件,編寫(xiě)后檢查編譯是否有誤,以及編寫(xiě)是需注意各個(gè)函數(shù)之間的模塊化思想[19]。
整個(gè)程序中需要使用多個(gè)串口進(jìn)行通信,所以要先分配好串口引腳。首先需要對(duì)TFT液晶屏、SD卡進(jìn)行初始化,然后讀取血氧飽和度模塊和紅外測(cè)溫模塊的數(shù)據(jù)值,在讀取數(shù)據(jù)值時(shí)需要注意模塊端發(fā)送的格式及協(xié)議。其中紅外測(cè)溫模塊由從機(jī)通過(guò)ZigBee傳輸給主板,然后由主板單片機(jī)進(jìn)行分析處理,并且在液晶屏上顯示數(shù)值及血氧飽和度的波形圖[20]。最后將測(cè)量的結(jié)果通過(guò)藍(lán)牙模塊傳輸給手機(jī)APP。

參考文獻(xiàn)

[1] 劉翔, 朱士俊, 李信春. 我國(guó)遠(yuǎn)程醫(yī)療發(fā)展現(xiàn)狀、難點(diǎn)和對(duì)策分析[J]. 中國(guó)信息界, 2006(4):60-63.

[2] 吳明, 張振忠. 中國(guó)農(nóng)村合作醫(yī)療發(fā)展模式的制度分析[J]. 中國(guó)衛(wèi)生資源, 2000(3):104-107.

[3] 鄔寬明. 單片機(jī)外圍器件實(shí)用手冊(cè)--數(shù)據(jù)傳輸接口器件分冊(cè)(第2版)[M]. 北航大學(xué)出版社, 2005.

[4] 劉坤, 趙紅波, 張憲棟. 51單片機(jī)C語(yǔ)言應(yīng)用開(kāi)發(fā)技術(shù)大全[M]. 人民郵電出版社, 2011.

[5] 陸垂偉, 毛雪濤, 戴翔宇,等. 遠(yuǎn)程串行數(shù)據(jù)通信技術(shù)的實(shí)現(xiàn)方法及其應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用研究, 2002, 19(3):23-24.

[6] 石東海. 單片機(jī)數(shù)據(jù)通信技術(shù)從入門(mén)到精通[M]. 西安電子科技大學(xué)出版社, 2002.

[7] 高潮. TFT液晶顯示驅(qū)動(dòng)電路與電源優(yōu)化設(shè)計(jì)方法[J]. 深圳信息職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2007, 5(2):14-18.

[8] 原羿, 蘇鴻根. 基于ZigBee技術(shù)的無(wú)線(xiàn)網(wǎng)絡(luò)應(yīng)用研究[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(6):89-91.

[9] 屈景輝 李傳偉. TEECHART應(yīng)用技術(shù)詳解--快速圖表制作工具[M]. 水利水電出版社, 2008.

[10] 繆璐璐. 基于Arduino平臺(tái)開(kāi)發(fā)交互式產(chǎn)品原型的研究[D]. 上海交通大學(xué), 2013.

[11] 惠特. Arduino技術(shù)內(nèi)幕[M]. 人民郵電出版社, 2013.

[12] 李莉, 劉剛. 基于藍(lán)牙技術(shù)的溫室環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J]. 農(nóng)業(yè)機(jī)械學(xué)報(bào), 2006, 37(10):97-100.

[13] 龔建偉. Visual C++/Turbo C 串口通信編程實(shí)踐[M]. 電子工業(yè)出版社, 2004.

[14] 何希才. 數(shù)字移動(dòng)通信技術(shù)及應(yīng)用[M]. 機(jī)械工業(yè)出版社, 2003.

[15] 鐘君, 蔡黎明, 于涌. 基于MLX90614的無(wú)線(xiàn)溫度采集系統(tǒng)設(shè)計(jì)[J]. 傳感器與微系統(tǒng), 2015, 34(3):87-89.

[16] 封瑜, 葛萬(wàn)成. 基于ZigBee技術(shù)的無(wú)線(xiàn)傳感器網(wǎng)絡(luò)構(gòu)建與應(yīng)用[J]. 電子工程師, 2007, 33(3):21-23.

[17] 許一萍. Zigbee技術(shù)在無(wú)線(xiàn)傳感器網(wǎng)絡(luò)中的應(yīng)用研究[D]. 復(fù)旦大學(xué), 2008.

[18] 張利江, 郭進(jìn)利, 宋亞娟. 遠(yuǎn)程醫(yī)療監(jiān)護(hù)的現(xiàn)狀與發(fā)展[J]. 新農(nóng)村:黑龍江, 2011(2):138-139.

[19] 諸強(qiáng), 王學(xué)民, 胡賓,等. 無(wú)線(xiàn)遠(yuǎn)程醫(yī)療系統(tǒng)[J]. 北京生物醫(yī)學(xué)工程, 2004, 23(3):225-227.

[20] 張利江, 郭進(jìn)利, 宋亞娟. 遠(yuǎn)程醫(yī)療監(jiān)護(hù)的現(xiàn)狀與發(fā)展[J]. 新農(nóng)村:黑龍江, 2011(2):138-139.


完整的Word格式文檔51黑下載地址:
智能化家庭健康監(jiān)護(hù)系統(tǒng)前端設(shè)計(jì)與開(kāi)發(fā).docx (3.83 MB, 下載次數(shù): 17)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表