劉浩源,張慧穎
(吉林化工學(xué)院 信息與控制工程學(xué)院,吉林 吉林 132022)
人們越來越關(guān)注身體的健康程度。因此開發(fā)一款方便檢測人體健康數(shù)據(jù)的系統(tǒng)具有重要的意義。隨著物聯(lián)網(wǎng)(Internet of Things,IoT)技術(shù)的快速發(fā)展,使得家庭檢測身體健康數(shù)據(jù)有了全新的方法。本系統(tǒng)在基于物聯(lián)網(wǎng)的基礎(chǔ)上,利用心率血氧等傳感器將采集到的數(shù)據(jù)上傳至EMQ Cloud物聯(lián)網(wǎng)開放平臺,使用MQTT通信協(xié)議實現(xiàn)數(shù)據(jù)的訂閱與發(fā)布,并利用Visual studio code平臺進(jìn)行小程序的開發(fā)與設(shè)計,通過無線通信接收數(shù)據(jù),對數(shù)據(jù)進(jìn)行解析、處理、顯示[1],實現(xiàn)數(shù)據(jù)傳輸?shù)目梢暬?從而使用戶清楚地查看自己的身體數(shù)據(jù)。也可以在本機(jī)上查看傳感器測量出的數(shù)據(jù),并且數(shù)據(jù)的實時性和可視性,方便了用戶操作,便捷地實現(xiàn)了用戶對自身健康數(shù)據(jù)的檢測。系統(tǒng)的設(shè)計和開發(fā)便于用戶健康管理和緊急救助,具有較好的社會效益與經(jīng)濟(jì)效益[2]。
人體健康數(shù)據(jù)檢測系統(tǒng)由四部分組成。這四個部分分別是傳感器采集數(shù)據(jù)部分、算法數(shù)據(jù)處理部分、云端數(shù)據(jù)傳輸部分、云端數(shù)據(jù)接收部分。系統(tǒng)由傳感器電路收集外部信息,將信息回傳給單片機(jī),并由單片機(jī)進(jìn)行數(shù)據(jù)處理。將數(shù)據(jù)傳輸至云端,最后從云端接收數(shù)據(jù)至開發(fā)的上位機(jī)軟件。人體健康數(shù)據(jù)檢測系統(tǒng)框圖如圖1所示。
圖1 人體健康數(shù)據(jù)檢測系統(tǒng)框圖
傳感器采集數(shù)據(jù)部分是由心率血氧傳感器(MAX30102),整合型6軸運動處理組件傳感器(MPU6050)和聲音檢測模塊(LM386)三部分組成,這三部分分別可以實現(xiàn)實時測量人體心率血氧數(shù)據(jù),人體運動數(shù)據(jù)和周圍環(huán)境噪聲情況,并將數(shù)據(jù)發(fā)送至下一模塊。算法處理部分是通過在單片機(jī)內(nèi)部寫出算法將上個模塊收集到的數(shù)據(jù)加以處理,得到最終所需要的數(shù)據(jù)。云端數(shù)據(jù)傳輸通過Wi-Fi模塊(ESP8266)連接互聯(lián)網(wǎng),將上一部分算法處理得到的數(shù)據(jù)上傳至EMQ云服務(wù)器,并利用MQTT通信協(xié)議實現(xiàn)數(shù)據(jù)的訂閱與發(fā)布,實現(xiàn)無線通信。云端數(shù)據(jù)接收利用MQTT協(xié)議發(fā)布和訂閱的主題,使用Visual studio code平臺編寫微信小程序來進(jìn)行接收訂閱的主題,在微信小程序上可以直觀地看到測量后處理的數(shù)據(jù),來實現(xiàn)數(shù)據(jù)的可視化與數(shù)據(jù)的云傳輸。除此之外,在傳感器檢測到數(shù)據(jù)后,可手動使用紅外遙控器來操控外置在單片機(jī)上的OLED屏幕,達(dá)到翻閱菜單的目的。在菜單中有相應(yīng)的選項供用戶選擇,每一項所對應(yīng)的數(shù)據(jù)都為測量后處理過的數(shù)據(jù),并且用戶可設(shè)置健康數(shù)據(jù),比如步數(shù)、消耗能量、健康心率、健康血氧等。
本系統(tǒng)主要由心率血氧檢測電路,運動姿態(tài)檢測電路,睡眠檢測電路,三大部分組成。此外,系統(tǒng)還包括串口電路,OLED顯示電路,網(wǎng)絡(luò)連接電路。OLED電路可以清晰地將系統(tǒng)測量得到數(shù)據(jù)顯示出來,網(wǎng)絡(luò)連接電路可以將系統(tǒng)連接網(wǎng)絡(luò)以達(dá)到數(shù)據(jù)傳輸?shù)哪康?。系統(tǒng)同時配備了紅外接收頭,紅外接收頭可以接收紅外遙控器發(fā)出的紅外線,方便用戶利用紅外遙控器來實體機(jī)的使用。用戶可以利用紅外遙控器翻閱菜單設(shè)置每天運動數(shù)值和警醒的身體健康數(shù)據(jù),當(dāng)測量的數(shù)據(jù)不符合健康標(biāo)準(zhǔn)的時候,系統(tǒng)就會發(fā)出警報,用來警示人們注意自己的身體健康。連接系統(tǒng)實物圖如圖2所示。
圖2 心率血氧傳感器模塊電路
本系統(tǒng)的心率血氧檢測電路使用的是MAX30102。利用標(biāo)準(zhǔn)I2C兼容接口進(jìn)行通信,此模塊集成了一個紅光。LED(可發(fā)射紅光和紅外光)、一個光電檢測器以及為抑制環(huán)境光而設(shè)計的低噪聲線路,可佩戴于耳垂或手指,用于可穿戴設(shè)備心率血氧的檢測[3]。MAX30102的硬件接口電路圖如圖2所示,VCC引腳為供電引腳,接3.3 V;SCL引腳連接時鐘線,連接在單片機(jī)上獲取時鐘信號;SDL引腳連接數(shù)據(jù)信號線,負(fù)責(zé)由單片機(jī)發(fā)送和接收數(shù)據(jù);GND引腳接電源負(fù)極。
MAX30102傳感器上具有紅光(660nm)和紅外光(880nm)兩個LED,人體氧合血氧蛋白和非氧合血氧蛋白對這兩個不同波長的光吸收率的差異較為明顯??梢該?jù)此得出血氧飽和度。
其中血氧的計算公式為
SPO2=aR2+bR+c,
(1)
(2)
MAX30102傳感器在測量的過程中會收到AC signal和DC signal兩種信號,即直流信號和交流信號,通過計算AC signal兩個波峰的時間即為要測量的心率[4]。在測量的同時接收到的兩種信號,可以求得R的值,故心率血氧的求解完成。
姿態(tài)傳感器可準(zhǔn)確追蹤快速與慢速動作,通過MPU-6050收集到的各方位加速度數(shù)據(jù),可以根據(jù)DMP姿態(tài)解算進(jìn)行姿態(tài)分析。使用IIC為通信協(xié)議,VCC引腳為供電引腳,接3.3 V;SCL引腳連接時鐘線,連接在單片機(jī)上獲取時鐘信號;SDL引腳連接數(shù)據(jù)信號線,負(fù)責(zé)由單片機(jī)發(fā)送和接收數(shù)據(jù);AD0是從IIC接口的地址控制引腳,該引腳控制IIC地址的最低位;GND引腳接電源負(fù)極。其原理圖如圖3所示。
圖3 運動姿態(tài)檢測電路
運動姿態(tài)檢測電路中包含了3軸陀螺儀和3軸加速度計。3軸陀螺儀可以測量繞x,y,z軸轉(zhuǎn)動的角速度,對角速度積分可以得到角度。3軸加速度計測量的是x,y,z方向的加速度。在靜止時,測量到的是重力加速度,因此當(dāng)物體傾斜時,根據(jù)重力的分力可以粗略地計算角度。在運動時,除了重力加速度,還疊加了由于運動產(chǎn)生的加速度。
但求解的是姿態(tài)數(shù)據(jù),只有加速度、角速度等數(shù)據(jù)是不夠的,所以還需要利用模塊求出歐拉角。其中InvenSense提供了一個MPU6050的嵌入式運動驅(qū)動庫,利用這一工具再結(jié)合MPU6050自帶的數(shù)據(jù)運動處理器(DMP),可以將原始加速度、角速度數(shù)據(jù)轉(zhuǎn)換成四元數(shù)輸出,其中四元數(shù)必須為q30格式的。也就是浮點數(shù)放大了2的30次方倍,最終加以運算即可得到歐拉角。
q30格式數(shù)據(jù)計算公式為
q0=quat[0] / q30 ;
(3)
q1=quat[1] / q30 ;
(4)
q2=quat[2] / q30 ;
(5)
q3=quat[3] / q30 。
(6)
歐拉角計算公式為
pitch=asin(-2*q1*q3+2*q0*q2)*57.3 ;
(7)
roll=atan2(2 * q2 * q3 + 2 * q0 * q1,-2 * q1 * q1 -2 * q2* q2 + 1)* 57.3 ;
(8)
yaw=atan2[2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3] * 57.3 。
(9)
在人們生活環(huán)境中不宜出現(xiàn)噪音,噪音過大會影響睡眠,最適合人類睡眠的環(huán)境環(huán)境分貝大約在30~40 dB,環(huán)境分貝一旦超出了50 dB,那么將會影響人們的休息。而LM386聲音放大電路可以將聲音放大200倍從而輕松測出聲音的數(shù)據(jù)值,而這個數(shù)據(jù)值并不是所需要的分貝值,需要將其從AD轉(zhuǎn)換得到電壓值,再將電壓換算成分貝。LM386聲音檢測模塊電路圖如圖4所示。
圖4 LM386聲音檢測電路
ADC采樣和量化后,就是波形數(shù)據(jù)。波形數(shù)據(jù)反映聲音強(qiáng)度在時域上的變化。對聲音的采樣率為11.025 kHz,16bit量化。即每秒采樣11 025次,每次采樣值量化為65 536階,量化值用0~65 535表示。將得到的時域離散信號經(jīng)過FFT變換。
將采樣率與FFT做除運算得到點數(shù),然后根據(jù)倍頻聲壓級公式:
(10)
采用1/3倍頻,然后進(jìn)行a率曲線加權(quán),故根據(jù)全部頻率范圍內(nèi)的dBA疊加公式即可求得分貝值。
全部頻率dBA疊加公式為
(11)
本次系統(tǒng)設(shè)計包括單片機(jī)的程序設(shè)計與上位機(jī)軟件設(shè)計,單片機(jī)能否成功地實現(xiàn)預(yù)期功能與程序設(shè)計有著密不可分的聯(lián)系。
系統(tǒng)模塊的數(shù)據(jù)通信采用消息隊列遙測傳輸協(xié)議(Message Queuing Telemetry Transport,MQTT),此協(xié)議是一種基于發(fā)布/訂閱模式的“輕量級”通信協(xié)議,構(gòu)建于TCP/IP協(xié)議上[5-7]。
系統(tǒng)將通過傳感器獲取到的數(shù)據(jù),上傳至云端,利用MQTT協(xié)議訂閱發(fā)布主題,使用小程序訂閱接收主題,可以在設(shè)計的微信小程序上看到各種參數(shù)的數(shù)據(jù)。在系統(tǒng)運行時,首先要進(jìn)行初始化,在初始化時首先設(shè)置連接網(wǎng)絡(luò)或個人熱點,進(jìn)行物聯(lián)網(wǎng)操作,這里在程序中設(shè)置了判斷是否連接網(wǎng)絡(luò)的程序。物聯(lián)網(wǎng)重要的即為連接網(wǎng)絡(luò),故要進(jìn)行判斷。其次在測量人體健康數(shù)據(jù)中,心率血氧是很重要的,一定要保證這兩個數(shù)據(jù)的正確性,故程序中設(shè)定了取15次再取中間值,其確保有準(zhǔn)確數(shù)據(jù)后才會將所有傳感器測量到的數(shù)據(jù)上傳至EMQ提供的云服務(wù)器。系統(tǒng)程序框圖如圖5所示。
圖5 系統(tǒng)程序框圖
開發(fā)上位機(jī)軟件針對測試有界面友好、操作方便和穩(wěn)定性強(qiáng)的優(yōu)點。上位機(jī)可以將系統(tǒng)測試的數(shù)據(jù)可視化,使用戶方便查看自身的健康數(shù)據(jù),選擇在Visual studio code平臺上設(shè)計一款微信小程序,微信小程序可以與個人手機(jī)相結(jié)合,具備價格低廉、學(xué)習(xí)成本低和可靠性高的特點[8]。用戶在微信上使用小程序即可查看自己的健康數(shù)據(jù)。本系統(tǒng)的上位機(jī)軟件設(shè)計思路如下:健康測試系統(tǒng)具有多項健康指標(biāo)的檢測,需建立多項數(shù)據(jù)區(qū),用來訂閱單片機(jī)通過MQTT協(xié)議發(fā)送的主題。
同時,一個面向大眾用戶的健康數(shù)據(jù)檢測小程序,也應(yīng)該具備查看天氣、建議是否出行等功能。在頂部加入了天氣、地理位置等數(shù)據(jù)的頁面供用戶查看。本次設(shè)計的上位機(jī)軟件使用的天氣數(shù)據(jù)來自和風(fēng)天氣所提供的數(shù)據(jù),保證了數(shù)據(jù)的正確性。在進(jìn)入小程序界面時,小程序會自動連接網(wǎng)絡(luò),同時會在用戶提示頁面上顯示“連接服務(wù)器中”,連接成功后會延時1 s來進(jìn)行訂閱的主題。并將接收到的數(shù)據(jù)回傳到數(shù)據(jù)區(qū)來顯示檢測到的數(shù)據(jù)。
為了保障用戶的隱私數(shù)據(jù)不被泄露,本系統(tǒng)設(shè)計了用戶登錄界面。在用戶沒進(jìn)行注冊的情況下,無法進(jìn)入二級界面,一定程度上保證了用戶的隱私。在登錄過后,延遲500 ms后顯示“登陸成功”即可進(jìn)入二級界面,用戶即可查看檢測數(shù)據(jù),微信小程序如圖6所示。
圖6 微信小程序圖
基于Wi-Fi的人體健康數(shù)據(jù)檢測系統(tǒng),如圖7所示,下面將進(jìn)行系統(tǒng)檢測性能測試實驗。
圖7 人體健康數(shù)據(jù)檢測系統(tǒng)
首先將檢測設(shè)備固定于人體上進(jìn)行100米運動測試,記錄運動過程中血氧飽和度參數(shù)值的變化,采用ESP8266將采集數(shù)據(jù)通過服務(wù)器傳輸至小程序,并與實際監(jiān)測數(shù)據(jù)進(jìn)行比對。由測試結(jié)果可知:靜止時,血氧飽和度為97%;運動中,血氧飽和度為95%;運動結(jié)束時的血氧飽和度為96%;恢復(fù)靜止時的血氧飽和度為98%,設(shè)備測量準(zhǔn)確度可達(dá)95%,檢測效果較好。
將檢測系統(tǒng)固定于人體上,采用跳繩方式測量不同運動狀態(tài)時心率參數(shù)值的變化,并與實際監(jiān)測數(shù)據(jù)進(jìn)行比對。測試結(jié)果如表1所示。
表1 心率測試結(jié)果
在經(jīng)過不定量跳躍運動后,測得心率檢測準(zhǔn)確率為80%,符合運動變化規(guī)律。將設(shè)備固定于人體上并進(jìn)行運動步數(shù)測試,記錄步數(shù)的變化過程。測試結(jié)果如表2所示。
表2 步數(shù)測試結(jié)果
由測試結(jié)果可知,該系統(tǒng)可以較準(zhǔn)確地測量出實際運動步數(shù),誤差較小,滿足系統(tǒng)要求。將測試結(jié)果傳輸至服務(wù)器,再由服務(wù)器下發(fā)至小程序,系統(tǒng)上位機(jī)監(jiān)測界面如圖8所示。
圖8 上位機(jī)界面
由圖8看出:上位機(jī)界面可簡潔、清晰地顯示系統(tǒng)的監(jiān)測結(jié)果。為研究系統(tǒng)的準(zhǔn)確性,測試在靜止?fàn)顟B(tài)、輕微運動狀態(tài)、開始進(jìn)行有氧運動狀態(tài)和運動結(jié)束幾個狀態(tài)下人體各項指標(biāo)情況。測量結(jié)果如表3所示。
表3 運動中的測量結(jié)果
從測試結(jié)果可以看出,心率相對誤差均值為2.79%,血氧飽和度相對誤差均值為1.28%,證明該系統(tǒng)具有誤差小、檢測準(zhǔn)確等特點。
人體健康數(shù)據(jù)檢測系統(tǒng)可以準(zhǔn)確、實時測量人體的健康數(shù)據(jù),具有準(zhǔn)確度高、功能強(qiáng)大、操作簡單且可實現(xiàn)遠(yuǎn)程監(jiān)控等優(yōu)點。經(jīng)測試本系統(tǒng)滿足生活實際需求,具有廣泛應(yīng)用價值。