黃寧,陳乙德
(中山大學(xué)新華學(xué)院信息科學(xué)學(xué)院,東莞 523133)
近年來(lái),消費(fèi)級(jí)的可穿戴設(shè)備逐漸走進(jìn)人們生活,有一部分諸如小米手環(huán)、華為手表之類(lèi)的可穿戴設(shè)備集成了心率監(jiān)測(cè)的功能。然而這些可穿戴設(shè)備普遍存在續(xù)航時(shí)間短、無(wú)法監(jiān)測(cè)體溫、功能冗雜、成本偏高等缺陷[1]。這是由于廠商在可穿戴設(shè)備上集成了過(guò)多的功能所導(dǎo)致的。換言之,市面上并不存在一款專(zhuān)注生命體征監(jiān)測(cè)的可穿戴設(shè)備。本文介紹了一種低成本、長(zhǎng)續(xù)航、高可靠性、專(zhuān)注于生命體征監(jiān)測(cè)的可穿戴設(shè)備[2]。
為了提升系統(tǒng)續(xù)航,降低充電頻率,故而硬件應(yīng)該在滿(mǎn)足基本需求的前提下盡可能簡(jiǎn)化,同時(shí)硬件也應(yīng)當(dāng)考慮到功耗控制。因此藍(lán)牙模塊選取了BT04 藍(lán)牙從機(jī)模塊。由于系統(tǒng)對(duì)精度要求不高,為降低實(shí)現(xiàn)難度,溫度傳感器選取了LM35 溫度傳感器模塊。系統(tǒng)控制器采用了集成有ATmega2560 芯片的Mega2560,Mega2560 具有同時(shí)具有54 路數(shù)字輸入/輸出口(其中15 路可作為PWM 輸出),15 路模擬輸入,4 路UART接口,預(yù)留了極大的升級(jí)余地。
圖1 系統(tǒng)硬件設(shè)計(jì)框圖
LM35 是由National Semiconductor 所生產(chǎn)的溫度感測(cè)器,其輸出電壓與攝氏溫標(biāo)呈線性關(guān)系,轉(zhuǎn)換公式如下,0°C 時(shí)輸出為0V,每升高1°C,輸出電壓增加10mV。
心率測(cè)量采用的是PulseSensor 模塊,這一模塊集成了光電變換器和光源兩部分,降低了系統(tǒng)的實(shí)現(xiàn)難度。這一模塊的原理是當(dāng)心臟跳動(dòng)時(shí)人體組織會(huì)周期性地出現(xiàn)透光率的改變,通過(guò)監(jiān)測(cè)透光率的變化就能測(cè)量心率,即光電容積法。
光電容積法的原理是監(jiān)測(cè)心臟周期性收縮舒張導(dǎo)致動(dòng)脈內(nèi)血液充盈程度變化從而進(jìn)行脈搏測(cè)量。進(jìn)而導(dǎo)致人體組織透光率發(fā)生改變。光電容積法的光源一般采用波長(zhǎng)為500nm-700nm 的發(fā)光二極管,這一波長(zhǎng)對(duì)動(dòng)脈血中氧和血紅蛋白有選擇性。
血管內(nèi)血液充盈程度變化將導(dǎo)致血液的透光能力發(fā)生改變,此時(shí)光電變換器通過(guò)接收反射從人體組織反射的特定波長(zhǎng)的光線,將光信號(hào)轉(zhuǎn)變?yōu)殡娦盘?hào)并通過(guò)硬件電路將電信號(hào)進(jìn)行處理后輸出。因?yàn)槊}搏和動(dòng)脈血管容積都會(huì)隨著心臟的搏動(dòng)而周期性變化,所以根據(jù)電信號(hào)變化周期就能得到脈搏率[3]。
圖2 脈搏數(shù)據(jù)讀取流程圖
數(shù)據(jù)傳輸考慮到穩(wěn)定性、功耗等多方面因素采用的是藍(lán)牙技術(shù)[4],由于無(wú)需充當(dāng)藍(lán)牙主機(jī),采用的是BT04-A 藍(lán)牙從機(jī)模塊,支持藍(lán)牙V3.0+EDR、藍(lán)牙Class 2、UART 接口,內(nèi)置PCB 射頻天線,使用3.3V 電源供電。
應(yīng)用運(yùn)行在Android API 大于等于22 的Android系統(tǒng)上,低于此API 有可能出現(xiàn)未知問(wèn)題。軟件主要由數(shù)據(jù)接收模塊、藍(lán)牙控制模塊以及數(shù)據(jù)顯示模塊構(gòu)成。
為保證長(zhǎng)時(shí)間穩(wěn)定接收來(lái)自硬件的消息,因而需要?jiǎng)?chuàng)建線程進(jìn)行專(zhuān)門(mén)的數(shù)據(jù)讀取,加上由于Android 特性,無(wú)法在主線程中執(zhí)行耗時(shí)操作[5],故而使用Service內(nèi)建線程的方法實(shí)現(xiàn)數(shù)據(jù)讀取。
數(shù)據(jù)接收模塊通過(guò)回調(diào)的方式實(shí)現(xiàn)與數(shù)據(jù)顯示模塊之間的通訊。
/***數(shù)據(jù)接收模塊內(nèi)代碼****/
private Callback callback=null;
public void setThisCallback(Callback mCallback){
this.callback=mCallback;
}
public static interface Callback{
void onDataChange(String data);//空方法
}
public Callback getThisCallback(){
return callback;
}
/***數(shù)據(jù)顯示模塊內(nèi)代碼****/
bleBinder=(BleListenService.BleBinder)service;
bleBinder.getService().setThisCallback(new BleListen-Service.Callback(){
@Override
public void onDataChange(String data){
//實(shí)現(xiàn)onDataChange 方法
Message msg=new Message();//新建消息對(duì)象
Bundle bundle=new Bundle();
bundle.putString("data",data);
msg.setData(bundle);
handler.sendMessage(msg);
//將數(shù)據(jù)發(fā)送至模塊內(nèi)的handler 做進(jìn)一步處理
}
});
圖3 數(shù)據(jù)讀取流程圖
藍(lán)牙控制模塊包含簡(jiǎn)化后的藍(lán)牙工具類(lèi)、藍(lán)牙廣播接收器,以及一個(gè)進(jìn)行數(shù)據(jù)測(cè)試的輸入框,同時(shí)創(chuàng)建了一個(gè)顯示界面以便用戶(hù)使用進(jìn)行操作。藍(lán)牙控制模塊負(fù)責(zé)實(shí)現(xiàn)藍(lán)牙連接、藍(lán)牙搜索、藍(lán)牙配對(duì)及藍(lán)牙相關(guān)權(quán)限的申請(qǐng)。
private final BroadcastReceiver mReceiver1;
mReceiver1=new BroadcastReceiver(){
@Override
public void onReceive(Context context,Intent intent){
String mAction1=intent.getAction();
BluetoothDevice mDevice1;
//與發(fā)現(xiàn)設(shè)備的廣播進(jìn)行比對(duì)
if (BluetoothDevice.ACTION_FOUND.equals(mAction1)){
//獲取設(shè)備的詳細(xì)信息
mDevice1=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String s1=mDevice.getBondState();
//判斷搜索到的設(shè)備是否配對(duì)
if(s1!=BluetoothDevice.BOND_BONDED){
s1=mDevice1.getBleName()+":"+mDevice1.get-BleAddress()
bluetoothDevices.add("未配對(duì)"+s1);
}
}
}
};
圖4 藍(lán)牙操作界面
圖5 藍(lán)牙設(shè)備搜索流程圖
數(shù)據(jù)顯示模塊內(nèi)實(shí)現(xiàn)了回調(diào)接口,在onRestart 函數(shù)調(diào)用時(shí)將現(xiàn)有服務(wù)進(jìn)行綁定,通過(guò)回調(diào)接口實(shí)現(xiàn)跨線程通訊,依賴(lài)handle 實(shí)例對(duì)數(shù)據(jù)進(jìn)行處理并將主界面顯示進(jìn)行更新。
圖6 數(shù)據(jù)顯示界面
系統(tǒng)測(cè)試存在于開(kāi)發(fā)的各階段,測(cè)試需要覆蓋每個(gè)模塊,一方面是為了保障模塊能夠正常運(yùn)行,另一方面是為了保障系統(tǒng)符合設(shè)計(jì)需求。
表1 測(cè)試環(huán)境搭建
在表1 所示的測(cè)試環(huán)境中,對(duì)設(shè)計(jì)功能進(jìn)行測(cè)試,得到如表2 的結(jié)果。
表2 系統(tǒng)功能測(cè)試
為更貼合實(shí)際情況,實(shí)驗(yàn)?zāi)M了用戶(hù)手持Android設(shè)備時(shí)的場(chǎng)景。測(cè)試通過(guò)統(tǒng)計(jì)來(lái)自從機(jī)的數(shù)據(jù)包編號(hào),Android 應(yīng)用接收到的數(shù)據(jù)包個(gè)數(shù),計(jì)算不同距離下傳輸中的丟包率。實(shí)驗(yàn)結(jié)果如表3 所示。
根據(jù)表3 可得到以下結(jié)論。Android 設(shè)備與硬件距離在150cm 以?xún)?nèi)可確保數(shù)據(jù)過(guò)程中的穩(wěn)定性,而150cm 的通信距離完全滿(mǎn)足本系統(tǒng)應(yīng)用要求,因此這一系統(tǒng)在正常使用中的穩(wěn)定性滿(mǎn)足要求。
表3 傳輸穩(wěn)定性測(cè)試
本文實(shí)現(xiàn)了采用可穿戴設(shè)備與手機(jī)應(yīng)用協(xié)同工作的構(gòu)想,其主要是結(jié)合可穿戴設(shè)備的浪潮,在Arduino與Android 平臺(tái)上進(jìn)行開(kāi)發(fā)的。通過(guò)Android Studio 與Arduino IDE 這兩個(gè)集成開(kāi)發(fā)環(huán)境,使用Java 與C 語(yǔ)言的一個(gè)子集進(jìn)行完成了系統(tǒng)的開(kāi)發(fā)。系統(tǒng)的穩(wěn)定性和和可靠性較好,基本可以實(shí)現(xiàn)“使用戶(hù)能夠便捷且實(shí)時(shí)的了解到自己的生命體征”這一設(shè)計(jì)目標(biāo)。