久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8176|回復: 0
收起左側

智能化家庭健康監護系統前端開發與設計論文

[復制鏈接]
ID:268233 發表于 2017-12-28 11:20 | 顯示全部樓層 |閱讀模式

1 緒論

1.1 課題來源及背景

1.2 課題研究內容及結構

1.3 主要創新點

2 硬件電路設計

2.1 系統硬件電路構成

2.2  Arduino微處理器最小系統

2.2.1 單片機控制芯片

2.2.2  ATMEGA2560單片機電路設計

2.3 藍牙無線通信模塊

2.4  ZigBee無線通信模塊

2.5 紅外測溫模塊

2.6 血氧飽和度傳感器

2.6.1血氧飽和度測量原理

2.6.2 血氧飽和度探頭

2.7  SD卡存儲模塊

3 系統軟件編程設計

3.1  軟件開發環境

3.1.1  Arduino IDE簡介

3.2  軟件各模塊程序設計

3.2.1  血氧飽和及心率數值采集

3.2.2  體溫溫度數值采集

3.2.3  藍牙無線通信

3.2.4  ZigBee無線通信

3.3  Android監護軟件設計

3.3.1  系統的開發環境與安裝

3.3.2  Android應用程序開發過程

3.3.3  主要應用模塊的實現

4 系統整體功能測試

4.1 智能化家庭健康監護系統實物圖

總結與展望

參考文獻

致謝

附錄A

智能化家庭健康監護系統前端設計與開發

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


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 課題來源及背景

人類社會從猿類時代進化到現在的高科技時代,人們的生活需求也一直在改變,從對基本溫飽的需求轉變為現在的健康需求,正在逐步升華。2013年 11 月,有關調查報告指出:我國有近 65%的人群是處于亞健康狀態的,這一特殊人群雖然沒有直接表現出明確的疾病,但是他們內在活力卻不斷下降,長此以往,會非常容易引起各種疾病,因此,這部分人群特別需健全、便捷、舒適的家庭健康監護及醫療保健服務[1]。然而目前在醫院中使用的大型醫療監護設備無法滿足在家庭對這部分特殊群體的健康監測,需要開發設計一種更加舒適、便捷、廉價、人性化的智能化家庭健康監護系統來適應人們對健康監護設備的應用需求。

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

智能化家庭健康監護系統就是一種新型家庭醫療監護設備,將人體健康數據采集,并且具有數據交叉分析與處理以及本地健康問題咨詢和云共享等多種功能,可以將傳統的病人去醫院就診模式轉變為客戶健康信息實時上傳至云端服務器,同時也會傳送給手機APP,能夠由醫生對病人的信息進行監護和管理,主動上門就診。

1.2 課題研究內容及結構

本文設計希望通過前端硬件采集多生理參數,通過藍牙遠程傳輸給手機APP,從而實現對身體健康的遠程監護。主要的研究工作在于對多生理參數同時采集和藍牙傳輸系統的設計方法,以及對整體框架進行分析,主要從硬件系統設計和軟件編程兩個方面展開工作設計和開發一個智能化家庭健康監護系統。整個系統分為兩個部分:一是前端硬件,進行生理參數的采集、分析處理以及遠程傳輸;二是手機APP客戶端,負責接收前端硬件采集的數據,并進行實時顯示。前端硬件包括:ATMEGA2560單片機、非接觸式紅外測溫模塊、血氧飽和測量模塊、BC417143B藍牙模塊、TFT液晶屏、供電系統。軟件設計方面,采用C語言編寫Arduino的程序,JAVA語言編寫手機APP程序,實現與硬件藍牙對接,接受數據后進行實時顯示。

本文首先介紹了硬件電路設計的思路,然后詳細闡明了芯片的選擇及其各自的特點,也引用了部分有關該課題設計方面的基本知識。然后敘述了手機APP的編程方法和過程,使用流程圖和程序代碼比較直觀的介紹了本設計的編程思路以及需要注意的一些問題。最后是硬件和軟件測試,通過具體的測量和控制說明智能化家庭健康監護系統開發與設計的合理性和完整性。

1.3 主要創新點

本課題設計主要涉及到多生理參數的同時采集以及波形的實時顯示,還有硬件設備與手機APP通過藍牙對接建立通信鏈路。主要創新之處有以下幾點:

(1)在無線遠程傳輸上采用2.4GHz的ZigBee模塊和藍牙模塊,可以實現移動設備與前端硬件設備之間的短距離數據交換,并且在功耗方面具有極大優勢,其自身具有超低功耗的特點,此外,傳輸數據穩定可靠,支持雙向傳輸。

(2)實現多生理參數采集,本系統在運行時,會同時測量使用者的血氧飽和度、脈搏、體溫,并且將具體的數值實時顯示在液晶屏上,較為直觀。另外,本系統設計為便攜式,配備有可充電的移動電源,便于隨身攜帶并使用。


2 硬件電路設計2.1 系統硬件電路構成

本設計是以ATMEGA2560單片機為微處理器,與非接觸式紅外測溫模塊、血氧飽和度測量模塊、藍牙、ZigBee、液晶組成了一個集多生理參數數據采集、處理、液晶顯示、無線傳輸、手機APP顯示為一體的智能化家庭健康監護系統。系統硬件電路主要由紅外測溫傳感器、血氧飽和度測量模塊、單片機、TFT液晶顯示、藍牙傳輸模塊和ZigBee傳輸模塊組成。其原理圖如圖2.1所示:

圖2.1 硬件原理構成圖

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

2.2  Arduino微處理器最小系統

本設計采用的MCU是ATMEGA2560芯片。ATMEGA2560芯片適用于需要大量IO接口的設計。下面主要介紹所用芯片及相應電路設計。

2.2.1 單片機控制芯片

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

2.2.2  ATMEGA2560單片機電路設計

Arduino ATMEGA2560的最小系統電路與STC系列的51單片機基本類似,對于AREF引腳,是AD轉換的參考電壓輸入端,即模擬端口輸入的電壓值是與此處的參考電壓相比較的,開發者可以通過改變這個引腳以及程序中的模擬電壓輸入設置函數,來實現測量電壓范圍的改變[6]。在燒寫程序時,可通過RX0和TX0引腳以及GND引腳與PC機相連來實現。電路設計圖如圖2.2所示:

圖2.2  Arduino mega2560電路設計圖

2.3 藍牙無線通信模塊

藍牙通信技術是一種工作在2.4 GHz 頻段的無線通信技術。目前藍牙技術已經逐漸趨向成熟。因為藍牙技術的日趨成熟,在使用和遠程傳輸方面具有非常好的系統穩定性和抗干擾能力。本設計使用的藍牙模塊如下圖2.3所示:

     

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

在局域網范圍內,可以使用藍牙無線傳輸給具有藍牙功能的設備發送數據,并且可以實現自主組網。在本設計中,藍牙無線通信模塊采用的是BC417143B這款芯片,該芯片具有內置天線、有超低功耗模式、收發靈敏度高、成本低、低功耗等優點,而且只需配備少許外圍器件就可以實現其強大的功能。

1、主要特性

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

2、開發方式

藍牙模塊的開發方式分為2兩類:一類是基于TI公司的CC2560雙模藍牙的協議棧開發,即在TI公司開放的藍牙協議棧上做二次開發;一類是基于藍牙透傳模塊的AT指令開發,這類開發相較前者而言難度稍微小一點,是使用串口與藍牙通信,通過發送AT指令的方式來對藍牙模塊進行配置以及相關的控制功能。

本設計采用的藍牙芯片是BC417143,支持藍牙2.0版本的標準協議,默認波特率為9600b/s。藍牙芯片與另外一個藍牙設備可以進行遠程無線通信,同時,藍牙芯片也可以通過串口與單片機進行通信,單片機可以通過串口通信的方式用AT指令控制藍牙芯片。

2.4  ZigBee無線通信模塊

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

本設計采用的ZigBee芯片為CC2530芯片,內嵌有標準ZigBee協議棧,在芯片內部集成了8051內核,是增強型的51單片機。在ZigBee網絡中,所有的節點設備分為3種類型,一種是協調器,一種是路由器,一種是終端。在同一個網絡中,需要一個協調器來啟動并維護整個網絡,這個協調器負責所在網絡中的各個節點設備的16位地址分配(為自動分配)[8]。路由模塊的作用是在協調器模塊啟動后,協助其維護整個網絡中的設備,同時,路由模塊也可以作為信息傳遞的中轉站,使得信息傳遞的距離更遠。而終端設備即處于網絡邊緣的設備,一般用于控制器,執行來自路由器或協調器的命令。

ZigBee網絡的組建方式各種各樣,有星狀,網狀,樹狀等等。星狀網絡,是以協調器為中心,向四周發散開來,連接路由設備或者終端設備。網狀網絡,是由協調器、路由器組成的一個類似蜘蛛網般的網狀網絡,路由與協調器之間可以互發互收數據。

本設計使用的ZigBee模塊為無線透傳模式,通過軟件配置模塊的PAN ID,即網絡號,用于分辨不同的網絡,所以在同一個網絡中的設備的PAN ID需要設置為同一個ID[9]。其次,需要設置ZigBee的串口通信波特率,用于與外部單片機的通信。ZigBee模塊的實物圖如下圖2.4所示:


   

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

每個ZigBee模塊在出廠時,就有一個終身屬于它的64位地址,例如這個ZigBee模塊的唯一64位地址為0x0013a20040e830dd,這個唯一地址可以用于在一個網絡中的唯一識別,也可以作為數據接收終端地址。

2.5 紅外測溫模塊

MLX90614是一個應用于非接觸式的紅外溫度傳感器,其集成了紅外探測熱電堆芯片與信號處理專用集成芯片,且全部都封裝在TO-39。17位ADC、低噪聲放大器和強大的DSP處理單元的全集成,使傳感器實現了高分辨率,高精度的測量。處理好的被測目標溫度和環境溫度均存儲在MLX90302的RAM內,分辨率為0.01 ˚C。傳感器的測量結果均出廠校準化,數據接口為數字式的PWM和SMBus(System Management Bus) 輸出。傳感器出廠默認,上電復位時為SMBus通信[10]。

  • 主要特性

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

對于脈寬調制,PWM的數位帶寬為10bit,PWM的輸出周期為1.024ms,輸出高電位電壓值時,I=2mA,輸出低電位電壓值時,I=2mA,輸出驅動電流為7mA,輸出反向電流為13.5mA。對于SMBus標準雙線的參數如下表2.5所示:

表2.5  SMBus標準雙線的參數

參數

測試條件

最小值

典型值

最大值

單位

子設備地址

出廠設置

5A

Hex

SMBus請求時間

SCL線低電位

1.44

ms

低位超時值

SCL線低電位

27

33

ms

高位超時值

SCL線高電位

45

55

us

主設備接收信號

準備時間

第八個SCL時鐘下降沿,主設備

0.5

1.5

us

主設備接收信號

保持時間

第九個SCL時鐘下降沿,主設備

1.5

2.5

us

子設備接收信號

準備時間

第八個SCL時鐘下降沿,子設備

2.5

us

子設備接收信號

保持時間

第九個SCL時鐘下降沿,主設備

1.5

us


  • 工作原理

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

圖2.6 紅外測溫原理圖

MLX90614系列測溫模塊是由Melexis公司生產的,用于非接觸式紅外測溫非常方便。這家公司生產的所有模塊在出廠前都進行了必要的校驗,使得紅外測溫模塊可以直接輸出線性信號,免去了復雜的校正過程。

環境溫度和目標溫度由81101內置的一個熱電偶測定測量,兩路溫度信號經由放大器放大后,再由一個17-bit的模數轉換器和較強大的數字信號處理單元后輸出。

  • 操作流程

MLX90614的SMBus協議:

1           7            1     1            8             1    1

S

Slave Address

Wr

A

Data Byte

A

P

S     Start condition(起始位)

Sr    Repeated start cordition(重復起始位)

Rd    Read(讀標志位)

Wr    Write(寫標志位)

A     Acknowledge(應答位)

S     Stop Condition(停止位)

PEC   Packet Error Code(出錯數據包)

數據傳輸時序圖入下圖2.7所示:

圖2.7 數據傳輸時序圖

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

2.6 血氧飽和度傳感器2.6.1血氧飽和度測量原理

血氧飽和度在進行測量時,使用兩個發光二極管,發射的波長分別為660nm和940nm,在手指的上下兩端分別放置發射管和接受管。發射管發射的光波透過手指后會在另一端被接受管接受,因為人體的內部組織對于這種光的吸收系數是恒定的,所以此時的光波會有一定的衰減,通過衰減程度再配合一定的計算方法,我們便可以得出測量者的血氧飽和度為多少,如圖2.8所示

圖2.8 血氧飽和度測量原理

2.6.2 血氧飽和度探頭

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

在本設計中發射管采用的是660~905nm波長的發射管,接收管為235。這種血氧飽和度探頭為數字血氧探頭,其傳輸出來的信號為數字信號[11]。在采集模塊上,使用了一塊STM32核心芯片進行初步的采集以及處理,然后通過UART接口與atmega2560芯片相連,將數據傳輸過去,由atmega2560進行下一步的處理。其中數據傳輸協議入下表2.5.2所示:

與單片機進行數據傳輸時是默認設置:波特率為9600b/s;每秒發送50個數據包,每個數據包含有5個字節。





字節0:

描述

信號強度0

信號強度1

信號強度2

信號強度3

1=搜索超時

1=未接傳感器

1=脈搏跳動聲

1(同步位)

0

1

2

3

4

5

6

7

字節1:

描述

體積描記圖0

體積描記圖1

體積描記圖2

體積描記圖3

體積描記圖4

體積描記圖5

體積描記圖6

0(同步位)

0

1

2

3

4

5

6

7


字節2:

描述

棒圖0

棒圖1

棒圖2

棒圖3

1=傳感器錯誤

1=搜索脈搏

脈率7

0(同步位)

0

1

2

3

4

5

6

7


字節3:

描述

脈率0

脈率1

脈率2

脈率3

脈率4

脈率5

脈率6

0(同步位)

0

1

2

3

4

5

6

7


字節4:

描述

血氧0

血氧1

血氧2

血氧3

血氧4

血氧5

血氧6

0(同步位)

0

1

2

3

4

5

6

7


2.7  SD卡存儲模塊

SD卡即安全數碼卡,是繼MMC之后發展的一種快閃記憶器的新一代記憶設備,目前已經被廣泛應用在許多設備上。SD卡擁有大容量、速數據傳輸快、移動靈活性強以及高安全性等優點。

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

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

表2.9  SD卡寄存器

名稱

寬度

描述

CID

128

卡標識寄存器

RCA

16

相對卡地址

CSD

128

卡操作條件相關的信息數據

SCR

64

SD配置寄存器

OCR

32

操作條件寄存器


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

SD卡初始化過程:

  • 初始化與SD卡連接的硬件條件;
  • 上電延時;
  • 復位卡,進入IDLE狀態;
  • 發送CMD8,檢查是否支持2.0協議;
  • 根據不同協議檢查SD卡;
  • 取消片選,發送多于8CLK,結束初始化;

SD卡讀取數據:

  • 發送CMD17
  • 接收卡響應R1
  • 接收數據起始令牌0XFE
  • 接收數據;
  • 接收2個字節CRC,若不用CRC,這兩個字節在讀取后可丟掉;
  • 禁止片選,發多于8CLK

SD卡存儲數據:

  • 發送CMD24
  • 接收卡響應R1
  • 發送寫數據起始令牌0XFE
  • 發送數據;
  • 發送2字節的偽CRC
  • 禁止片選,發多于8CLK

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


















3 系統軟件編程設計3.1  軟件開發環境3.1.1  Arduino IDE簡介

Arduino是一款基于ATMEL AVR單片機的控制器平臺,便捷靈活而且較為容易上手。Arduino是一個開源的系統,除了不能使用Arduino作為商標,任何人或公司都可以利Arduino公布的文檔來制作屬于自己的電子物品,而且Arduino的價格低廉,非常受國內外廣大的電子愛好者歡迎[13]。

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

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

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

圖3.1  Arduino IDE界面

3.2  軟件各模塊程序設計3.2.1  血氧飽和及心率數值采集

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

3.2.2  體溫溫度數值采集

非接觸式紅外溫度傳感器是采用的SMBus協議進行讀取、寫入數據操作的。

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

圖3.2 讀數據格式

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

圖3.3 寫數據格式

在主程序中調用函數readObjectTempC();即可讀取溫度的數值。
3.2.3  藍牙無線通信

本設計使用的藍牙通信模塊為AT指令開發,可以通過AT指令修改串口通信的波特率,設置配對碼等。具體的AT指令如下:

1、設置和查詢配對碼:

AT+PSWD = <Param>      

Param: 配對碼

2、設置和查詢串口參數:

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

Param1:波特率(bits/s)

Param2:停止位

Param3:校驗位

3、設置和查詢模塊角色:

AT+ROLE = <Param>

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

           1——主角色(master),主動連接,建立通信數據傳輸通道

          2——回環角色(slave--loop),被動連接,接收主設備發送數據并返回給主設備

在進行程序設計之前可以先通過AT指令將模塊的參數配置完成,然后在程序中設置好波特率后即可直接使用串口發送函數,將數據通過串口發送給藍牙模塊,然后藍牙模塊會自動再將數據遠程發送給手機APP端[21]。

    整個系統的程序設計流程圖如下圖3.4所示:

圖3.4 系統程序設計流程圖

3.2.4  ZigBee無線通信

本設計使用的局域網無線通信模塊為美國DIGI的一種ZigBee通信模塊,其內置有ZigBee協議棧,可以使用DIGI提供的X-CTU軟件通過AT指令的方式配置ZigBee模塊的相關參數,包括通信波特率、運行模式(協調器或路由或終端)、網絡ID、發送數據的目的地址等等[22]。

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

圖3.5  X-CTU界面

左上角的兩個按鈕用于發現設備,將ZigBee模塊通過串口與電腦端連接后,即可使用該功能發現設備進行下一步的配置,MAC尋找界面如下圖3.6所示:

圖3.6  MAC尋找界面

在這個界面讀出模塊后,會顯示一些基本參數,比如此串口號和模塊的64為地址。然后點擊Add selected devices,即可進入參數讀取/配置界面,如下圖3.7所示:

圖3.7 讀取/配置參數界面

在設置參數時,主要設置以下參數:首先為模塊波特率,用于與單片機之間的通信,本設計中設置為115200;然后設置PAN ID,這個ID用于加入網絡,當多個ZigBee模塊的PAN ID相同時,便能實現自組網,形成局域網絡進行通信;最后為發送數據的目的地址,在本設計中,是終端設備發送數據給協調器,故在終端設備中需要設置協調器的64位唯一地址[23]。也可以在協調器上設置終端的64位唯一地址,使用協調器給終端發送數據。

3.3  Android監護軟件設計3.3.1  系統的開發環境與安裝

本設計開發android程序是采用的eclipse環境,eclipse編譯器是一款比較強大的APP開發軟件,相較其他的開發平臺而言,具有比較大的優勢,比如界面的操作簡單,在編寫程序的過程中可以非常清晰、直觀地發現問題[24]。

              開發android軟件是采用的eclipse軟件,安裝時,先在官網eclipse.org中下載安裝包,分為32位與64位,注意要與電腦配置一致。下載完安裝包后,解壓并運行eclipse.exe[25]。現在首先需要安裝java環境,第一要設置工作環境,選擇你希望安裝的盤,點擊OK。如下圖3.8所示:

圖3.8 設置工作環境

然后創建項目,選擇file->new->java project,如下圖3.9所示:

圖3.9 創建項目

鍵入項目名,點擊finish。完成項目創建后,點擊Java按鈕,然后在菜單的左側選擇test項目,右鍵點擊new->class,鍵入工程名,完成。最后在代碼框中就可以開始敲代碼開發了。

3.3.2  Android應用程序開發過程

Android應用程序的設計分為以下幾個過程:在程序運行時,會開啟一個主線程,用于主界面的顯示,然后需要搜索手機附近開啟的藍牙設備,搜索到相關的藍牙設備后即可連接,在連接時會開啟一個子線程用于socket連接。當建立與設備的連接后,會不斷接收來自前端藍牙設備發送的多參數生理數據值,每次接收到數據后,程序會首先判斷該數據是否為有效數據,若是,則在屏幕上顯示出來,若不是,則繼續監測數據。

程序設計的流程圖如下圖3.10所示

圖3.10  APP程序流程圖


3.3.3  主要應用模塊的實現

首先進入APP界面后,會進行一系列的初始化過程,進入界面后會有一個搜索按鈕,用于發現周圍的可連接藍牙設備。

點擊搜索按鈕后,在界面會出現一個設備列表,用于展現發現的所有藍牙設備,此時,選擇我們的前端藍牙設備“BluetoothBee”,進行連接,連接過程是一個基于socket通信的連接,因為其相對來說耗時較長,故不能運行在主線程,所以開辟了另外一個子線程供手機與藍牙設備進行連接。當手機APP與前端藍牙設備建立連接后,即可開始讀取數據。

讀取完數據后需要進行解析數據,然后會在界面上顯示相應的生理參數。

    手機APP的界面以及生理參數數值顯示實物圖如下圖3.11:

   

圖3.11  APP界面

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












4 系統整體功能測試4.1 智能化家庭健康監護系統實物圖

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

圖4.1 系統整機圖

對于紅外測溫模塊,在另外一個節點設備上,打開電源后,模塊會自動采集目標體溫,然后通過ZigBee模塊傳輸給主系統板上的ZigBee協調器,實物圖如下圖4.2所示:

圖4.2 紅外測溫從機圖

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

圖4.3  TFT液晶屏顯示

在手機APP上的顯示界面如下圖4.4所示,手機通過藍牙接收到的數據在屏幕上進行顯示,包括心跳、血氧、體溫的具體數值,并根據前端設備的實時采集進行更新:

圖4.4  實測效果圖


總結與展望

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

作者在最初進行本課題的設計時遇到了很多的艱難困阻。首先是血氧飽和度的數據一直無法同步,因為單片機無法采用串口中斷的方式,所以一直是采用的串口查詢的方式來接收數據,這就導致時不時會丟包,而不能完全同步。其次,在單片機設計方面,沒有接觸過TFT液晶屏的開發,所以當采集到生理數值時,需要在液晶屏上顯示出具體數值,同時還需要實時繪制血氧飽和度的波形,這一部分在程序設計上也花費了很大精力才得以解決。再就是android APP開發方面,因為作者一直都是使用C語言開發單片機程序,而完全沒有接觸過軟件APP的開發,所以從零開始學習java語言,了解并熟悉eclipse開發環境也是難點之一。

本文在設計上有兩大特點:一是采用主從一體的藍牙傳輸模塊進行遠程的數據傳輸。這種無線通信方式是使用的很頻繁,也深受大眾喜愛的一種通信方式,其使用起來非常便捷,而且傳輸數據穩定可靠,同時還具有低功耗模式,適用于便攜式設備。二是系統采集的多生理參數除了會在設備本身的TFT液晶屏上顯示出來,還會通過藍牙將數據發送給APP客戶端,在手機上進行實時的顯示。

最后,本文雖然實現了智能化家庭健康監護系統的生理參數采集、顯示、無線傳輸功能,但仍然存在很多問題有待改進,而且在功能上還有很多是可以繼續完善的。在生理參數采集部分,可以加入心電的采集、分析,在無線傳輸部分可以使用WIFI或其他可以接入互聯網的設備,讓前端系統采集的生理數據能夠傳輸到云端服務器,與醫院進行合作,使醫院的主治醫師能夠查看我們的生理數據,從而能夠在日常飲食或生活習慣上給予適當的建議,使得全社會人的身體都能夠更加健康。在系統的供電部分可以設計的再微小點,不用占據很大的空間,同時也能提供足夠的電量。通過上述改進措施,此智能化家庭健康監護系統將會具備更加強大的實用價值以及商業價值。


參考文獻

[1] 劉翔, 朱士俊, 李信春. 我國遠程醫療發展現狀、難點和對策分析[J]. 中國信息界, 2006(4):60-63.

[2] 吳明, 張振忠. 中國農村合作醫療發展模式的制度分析[J]. 中國衛生資源, 2000(3):104-107.

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

[4] 劉坤, 趙紅波, 張憲棟. 51單片機C語言應用開發技術大全[M]. 人民郵電出版社, 2011.

[5] 陸垂偉, 毛雪濤, 戴翔宇,等. 遠程串行數據通信技術的實現方法及其應用[J]. 計算機應用研究, 2002, 19(3):23-24.

[6] 石東海. 單片機數據通信技術從入門到精通[M]. 西安電子科技大學出版社, 2002.

[7] 高潮. TFT液晶顯示驅動電路與電源優化設計方法[J]. 深圳信息職業技術學院學報, 2007, 5(2):14-18.

[8] 原羿, 蘇鴻根. 基于ZigBee技術的無線網絡應用研究[J]. 計算機應用與軟件, 2004, 21(6):89-91.

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

[10] 繆璐璐. 基于Arduino平臺開發交互式產品原型的研究[D]. 上海交通大學, 2013.

[11] 惠特. Arduino技術內幕[M]. 人民郵電出版社, 2013.

[12] 李莉, 劉剛. 基于藍牙技術的溫室環境監測系統設計[J]. 農業機械學報, 2006, 37(10):97-100.

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

[14] 何希才. 數字移動通信技術及應用[M]. 機械工業出版社, 2003.

[15] 鐘君, 蔡黎明, 于涌. 基于MLX90614的無線溫度采集系統設計[J]. 傳感器與微系統, 2015, 34(3):87-89.

[16] 封瑜, 葛萬成. 基于ZigBee技術的無線傳感器網絡構建與應用[J]. 電子工程師, 2007, 33(3):21-23.

[17] 許一萍. Zigbee技術在無線傳感器網絡中的應用研究[D]. 復旦大學, 2008.

[18] 張利江, 郭進利, 宋亞娟. 遠程醫療監護的現狀與發展[J]. 新農村:黑龍江, 2011(2):138-139.

[19] 諸強, 王學民, 胡賓,等. 無線遠程醫療系統[J]. 北京生物醫學工程, 2004, 23(3):225-227.

[20] 張利江, 郭進利, 宋亞娟. 遠程醫療監護的現狀與發展[J]. 新農村:黑龍江, 2011(2):138-139.

[21] 范曉武. 基于嵌入式設備的家庭健康監護系統的設計與實現[J]. 浙江工業大學學報, 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] 朱新建, 吳寶明, 卓豫,等. 多參數家庭健康監護實時檢測的方法[J]. 中國組織工程研究與臨床康復, 2007(1):121-123.

[25] 黃永健, 王偉, 謝廣明,等. 物聯網家庭健康監護系統[J]. 兵工自動化, 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);   //初始化液晶的類

  12. File myFile;     / /初始化SD卡的類

  13. extern uint8_t BigFont[];

  14. int data[5];

  15. char str[9];

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

  17. int y1=0;      //判斷是否為第一次畫線

  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);     //設置液晶屏上字的大小

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

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

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

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



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



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

  32.     return;

  33.   }

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

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

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

  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()){                //采用循環查詢方式檢測串口是否有數據

  43.     for(int i=0;i<5;i++){               //采用for循環連續讀取5個字節數據

  44.       data[i] = Serial1.read();           //讀一個字節數據

  45.       delay(1);

  46.     }

  47.   }

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

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

  50.    y1=data[1];

  51.     if(a==1){                    //若滿屏,則開始清理歷史數據,即消除部分波形

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

  53.         if(t1==1){

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

  55.           t1=0;

  56.         }               

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

  58.     }

  59.     if(x<210){                   //若沒有滿屏,則繼續繪制波形

  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);      //在液晶屏上顯示心率的數值

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

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

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

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

  78.        delay(20);

  79.        mySerial.print(data[3]);       //通過串口發送將心率的數值發送給藍牙

  80.        mySerial.print(",");

  81.        mySerial.print(data[4]);       //將血氧飽和度的數值發送給藍牙

  82.        mySerial.print(",");

  83.        mySerial.print(b);            //將體溫的數值發送給藍牙

  84.        mySerial.print(" ");

  85.        time=0;

  86.      }

  87. }

  88. 2.  紅外測溫讀取數據部分代碼:

  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); // 開始發送數據給設備

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

  96.     Wire.endTransmission(false); // 結束數據傳送

  97. Wire.requestFrom(_addr, (uint8_t)3);// 發送讀取的n字節數據

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

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

  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客戶端初始化代碼:

  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("沒有設備已經配對", 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.  發現藍牙模塊:

  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.               /* 開始搜索 */

  178.               mBtAdapter.startDiscovery();

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

  180.                             }                                                      

  181.               }

  182. };



  183. 4.  連接藍牙模塊

  184. // 開啟客戶端

  185. private class clientThread extends Thread {

  186. public void run() {

  187.               try {

  188.               // 創建一個Socket連接:只需要服務器在注冊時的UUID號

  189.               socket = device.createRfcommSocketToServiceRecord(UUID

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

  191.               // 連接

  192.               Message msg2 = new Message();

  193.               msg2.obj = "請稍候,正在連接服務器:" + Bluetooth.BlueToothAddress;

  194.               msg2.what = 0;

  195.               LinkDetectedHandler.sendMessage(msg2);



  196.               socket.connect();



  197.               Message msg = new Message();

  198.               msg.obj = "已經連接上服務端!可以發送信息。";

  199.               msg.what = 0;

  200.               LinkDetectedHandler.sendMessage(msg);

  201.               // 啟動接受數據

  202.               mreadThread = new readThread();

  203.               mreadThread.start();

  204.               } catch (IOException e) {

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

  206.               Message msg = new Message();

  207.               msg.obj = "連接服務端異常!斷開連接重新試一試。";

  208.               msg.what = 0;

  209.               LinkDetectedHandler.sendMessage(msg);

  210.                   }

  211.               }

  212. };



  213.      讀取數據:

  214. // 讀取數據

  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.  解析并顯示數據:

  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. }
復制代碼






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

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

參考文獻

[1] 劉翔, 朱士俊, 李信春. 我國遠程醫療發展現狀、難點和對策分析[J]. 中國信息界, 2006(4):60-63.

[2] 吳明, 張振忠. 中國農村合作醫療發展模式的制度分析[J]. 中國衛生資源, 2000(3):104-107.

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

[4] 劉坤, 趙紅波, 張憲棟. 51單片機C語言應用開發技術大全[M]. 人民郵電出版社, 2011.

[5] 陸垂偉, 毛雪濤, 戴翔宇,等. 遠程串行數據通信技術的實現方法及其應用[J]. 計算機應用研究, 2002, 19(3):23-24.

[6] 石東海. 單片機數據通信技術從入門到精通[M]. 西安電子科技大學出版社, 2002.

[7] 高潮. TFT液晶顯示驅動電路與電源優化設計方法[J]. 深圳信息職業技術學院學報, 2007, 5(2):14-18.

[8] 原羿, 蘇鴻根. 基于ZigBee技術的無線網絡應用研究[J]. 計算機應用與軟件, 2004, 21(6):89-91.

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

[10] 繆璐璐. 基于Arduino平臺開發交互式產品原型的研究[D]. 上海交通大學, 2013.

[11] 惠特. Arduino技術內幕[M]. 人民郵電出版社, 2013.

[12] 李莉, 劉剛. 基于藍牙技術的溫室環境監測系統設計[J]. 農業機械學報, 2006, 37(10):97-100.

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

[14] 何希才. 數字移動通信技術及應用[M]. 機械工業出版社, 2003.

[15] 鐘君, 蔡黎明, 于涌. 基于MLX90614的無線溫度采集系統設計[J]. 傳感器與微系統, 2015, 34(3):87-89.

[16] 封瑜, 葛萬成. 基于ZigBee技術的無線傳感器網絡構建與應用[J]. 電子工程師, 2007, 33(3):21-23.

[17] 許一萍. Zigbee技術在無線傳感器網絡中的應用研究[D]. 復旦大學, 2008.

[18] 張利江, 郭進利, 宋亞娟. 遠程醫療監護的現狀與發展[J]. 新農村:黑龍江, 2011(2):138-139.

[19] 諸強, 王學民, 胡賓,等. 無線遠程醫療系統[J]. 北京生物醫學工程, 2004, 23(3):225-227.

[20] 張利江, 郭進利, 宋亞娟. 遠程醫療監護的現狀與發展[J]. 新農村:黑龍江, 2011(2):138-139.


完整的Word格式文檔51黑下載地址:
智能化家庭健康監護系統前端設計與開發.docx (3.83 MB, 下載次數: 17)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 69电影网 | 亚洲激精日韩激精欧美精品 | 亚洲视频一区二区三区四区 | 欧美午夜精品久久久久免费视 | 黑色丝袜三级在线播放 | 伊人天堂网 | 久草影视在线 | 亚洲国产精品日韩av不卡在线 | 亚洲精品国产成人 | 伊人网一区 | 成人深夜福利网站 | 日本欧美国产在线观看 | 精品一区二区在线观看 | 欧美一级淫片免费视频黄 | 在线观看视频你懂得 | 国产精品美女www | 日韩视频在线播放 | 最新超碰 | 国产91九色 | 成人免费一区二区三区视频网站 | 欧美成人a | 日韩精品在线一区 | 亚洲激情在线视频 | 日本不卡高清视频 | 日本久久精品视频 | 精品国产鲁一鲁一区二区张丽 | 中文字幕精品一区 | 精品国产aⅴ | 国产精品久久毛片av大全日韩 | 国产精品成人品 | 天天操网 | av中文字幕在线播放 | 91久久久久久久久久久 | 午夜精品一区二区三区在线观看 | 日韩无| 99久久精品免费看国产高清 | 成人精品一区亚洲午夜久久久 | 狠狠爱免费视频 | 国户精品久久久久久久久久久不卡 | 亚洲精品视频免费观看 | 一区二区精品 |