盛念祖,趙 赫,王衛(wèi)東,張中賢,呂 波,李曉風(fēng)
1(中國科學(xué)院 合肥物質(zhì)科學(xué)研究院,合肥 230031)
2(中國科學(xué)技術(shù)大學(xué),合肥 230026)
隨著生活方式的轉(zhuǎn)變和城市戶外空氣環(huán)境的惡化,室內(nèi)健身運動逐漸成為人們首選的體育鍛煉活動.室內(nèi)健身車是一種室內(nèi)有氧健身器材,通過調(diào)節(jié)踏板阻力,使用戶以恒定功率保持運動.相較于跑步機等其他室內(nèi)健身設(shè)備,具有簡單實用,安全性高,對鍛煉者關(guān)節(jié)損傷較少等優(yōu)點.
課題組前期研發(fā)設(shè)計了智能化健身功率車[1,2](以下簡稱健身車),用于國民體質(zhì)健康評價的心肺功能評估測試環(huán)節(jié)[3],具有體檢、健身、娛樂等功能.因為上位機使用USB串口連接和Windows系統(tǒng)下的MFC設(shè)計,健身車必須配備上位機,導(dǎo)致成本較高,系統(tǒng)通用性較差,用戶體驗不佳.
基于上述考慮,本文設(shè)計實現(xiàn)了基于無線局域網(wǎng)通信的健身車Android客戶端.無線局域網(wǎng)內(nèi)通信一方面可以保證通信的準(zhǔn)確率和速度[4],另一方面可以增強健身車的通用性.Android系統(tǒng)因其開放性高,市場份額巨大[5],相較于Windows系統(tǒng),在手機等便捷操作系統(tǒng)上使用率更高.使用Android系統(tǒng)和無線局域網(wǎng)內(nèi)通信,降低了健身車成本,擴大了健身車的使用范圍,為用戶帶來更良好的健身車使用體驗.通過使用本客戶端,用戶可以有效降低運動風(fēng)險,提升運動效果,從而實現(xiàn)安全科學(xué)健身.
本文的組織結(jié)構(gòu)為:第1節(jié)介紹本文的技術(shù)基礎(chǔ),第2節(jié)介紹系統(tǒng)架構(gòu)和使用流程,第3節(jié)介紹客戶端的具體實現(xiàn),第4節(jié)總結(jié)本文.
本客戶端使用Android系統(tǒng),通過無線局域網(wǎng)內(nèi)TCP協(xié)議與健身車進(jìn)行長時通信.Android系統(tǒng)是Google公司開發(fā)的智能手機平臺,具有開放性,易開發(fā),易復(fù)用,方便快速等優(yōu)點[6].其擁有的巨大市場份額及通用性,可以有效提高健身車的使用范圍,做到方便,快捷地使用智能健身車設(shè)備[7],完成高適配性,高通用性,高兼容性的健身車移動客戶端.
常用的設(shè)備直連上位機通信的方式有三種:串口有線通信,藍(lán)牙通信和WiFi通信.串口通信具有傳輸速度快,通信穩(wěn)定等優(yōu)點,但是擴展性不佳,設(shè)備必須自行配有上位機,成本較高,對于健身房,體檢站適用性較好,但是對于個人用戶體驗不友好.藍(lán)牙通信具有低成本,低功耗,移植性強等優(yōu)點[8],由于目前大部分廠商普遍使用藍(lán)牙,部分藍(lán)牙協(xié)議棧(如Android藍(lán)牙協(xié)議棧)并發(fā)連接數(shù)較少,導(dǎo)致使用藍(lán)牙通信具有局限性.WiFi通信具有傳輸速度快,應(yīng)用范圍廣,對并發(fā)連接數(shù)限制不明顯等優(yōu)點,可以有效提高健身車的通用性,擴展健身車的使用范圍.本系統(tǒng)最終使用WiFi通信作為與健身車的主要通信方式,并使用藍(lán)牙連接適配藍(lán)牙心率手表等其他輔助性設(shè)備.
本系統(tǒng)使用課題組前期研發(fā)的智能化健身功率車[1],如圖1所示.該健身車通過擴展WiFi模塊,增加無線局域網(wǎng)通信協(xié)議,實現(xiàn)無線局域網(wǎng)通信;通過使用電阻應(yīng)變式稱重傳感器和電阻式拉繩位移傳感器,測量實時運動時的腳踏壓力和輪轉(zhuǎn)速度,計算用戶實時功率,并根據(jù)實時功率調(diào)節(jié)輸出負(fù)載和發(fā)電機勵磁電流,達(dá)到實時調(diào)整運動阻力,保持用戶恒功率運動[9,10];通過手握式心率測量儀器,測量用戶實時心率,經(jīng)由WiFi模塊,將實時的運動速度,運動功率和心率上傳至上位機,供上位機進(jìn)行數(shù)據(jù)分析.
圖1 健身車
本系統(tǒng)主要由健身車,移動客戶端和云服務(wù)器組成.如圖 2 所示.
健身車負(fù)責(zé)保持運動阻力恒定,采集和上傳用戶健身數(shù)據(jù)至移動客戶端;云服務(wù)器負(fù)責(zé)處理用戶登錄,保存用戶健身數(shù)據(jù),生成運動處方;移動客戶端分為通信模塊,運動模塊,測試模塊,歷史數(shù)據(jù)模塊和個人設(shè)置模塊,通信模塊主要負(fù)責(zé)健身車初始化,健身車連接,指令發(fā)送,數(shù)據(jù)接收和解析,并將數(shù)據(jù)提交至運動模塊;測試模塊為心肺耐力測試,運動模塊主要包括處方訓(xùn)練和自由訓(xùn)練,通過展示健身車數(shù)據(jù),形成實時圖像,為用戶提供數(shù)據(jù)分析功能,并在運動結(jié)束后,向云服務(wù)器提交運動數(shù)據(jù);歷史數(shù)據(jù)模塊負(fù)責(zé)展示歷史運動數(shù)據(jù);個人模塊主要包括用戶登錄,個人信息維護(hù)等功能.
具體使用流程如圖3所示.
用戶首先需要注冊賬號,提供靜息心率,體重,身高,年齡等數(shù)據(jù).在注冊并登錄進(jìn)入系統(tǒng)后,用戶需要輸入本地?zé)o線局域網(wǎng)密碼,初始化健身車,使健身車保持與自己在同一無線局域網(wǎng)內(nèi).初始化健身車后,用戶可以開始進(jìn)行心肺功能評估,獲取心肺功能報告.根據(jù)心肺功能情況和個人信息,云服務(wù)器會生成符合用戶身體狀況的處方訓(xùn)練計劃,用戶可以通過完成計劃,實現(xiàn)健身目標(biāo).
圖2 客戶端系統(tǒng)架構(gòu)
本客戶端使用局域網(wǎng)內(nèi)TCP連接與健身車進(jìn)行通信.為了與健身車保持在同一局域網(wǎng)下,客戶端首先需要對健身車進(jìn)行初始化.客戶端在用戶輸入本地WiFi網(wǎng)絡(luò)密碼后,連接健身車網(wǎng)卡模塊生成的無線網(wǎng)絡(luò),通過TCP通信發(fā)送本地WiFi網(wǎng)絡(luò)SSID和密碼至健身車.健身車獲取到密碼后,自動連接本地WiFi網(wǎng)絡(luò),完成初始化.
算法1.健身車初始化1)// 獲取本地 WiFi網(wǎng)絡(luò) SSID String SSID= getSSID();
2)// 如果未聯(lián)網(wǎng),提示用戶先進(jìn)行聯(lián)網(wǎng)if(SSID== null){Toast.makeText(s_context,"請連接本地 WiFi網(wǎng)絡(luò)",Toast.LENGTH_SHORT).show();return;}3)// 等待用戶輸入密碼和健身車唯一標(biāo)識,避免多輛健身車混淆String pwd= Listen(PwdEditText);String UUID= Listen(UUIDEditText);4)// 連接健身車默認(rèn)熱點LinkWiFi(CYCLE_WIFI);// 連接健身車默認(rèn)IP LinkTCP(CYCLE_DEFAULT_IP);5)// 發(fā)送本地WiFi網(wǎng)絡(luò)SSID和密碼,健身車通過其可以連接上本地局域網(wǎng)sendMsg(SSID,pwd);6)// 健身車接受 SSID 和密碼成功后,會返回 mac,客戶端根據(jù)返回的mac地址判斷是否已經(jīng)初始化成功String mac= readByTcp();
圖3 客戶端使用流程圖
當(dāng)已經(jīng)初始化完成后,客戶端會將健身車網(wǎng)卡mac地址和IP保存在數(shù)據(jù)庫,當(dāng)用戶第二次打開客戶端時,會自動向該IP發(fā)送連接請求.如果IP地址更換或第一次連接,客戶端會廣播一條UDP信息,查找健身車.健身車在收到該信息后,返回IP地址.
算法2.健身車通信連接1)// 獲取本地 WiFi網(wǎng)絡(luò) SSID String SSID= getSSID();2)// 如果不是初始化時所用WiFi網(wǎng)絡(luò),提示用戶先進(jìn)入該本地WiFi網(wǎng)絡(luò)if(!SSID.equals(USER_SSID)){Toast.makeText(s_context,"請連接初始化時WiFi網(wǎng)絡(luò)或重新初始化",Toast.LENGTH_SHORT).show();return;}3)// 從數(shù)據(jù)庫中讀取上次連接時IP String IP= getIPForDB(UUID);4)// 如果IP為空,表示是初始化后第一次連接,發(fā)送UDP廣播獲取IP if(IP== null){// 發(fā)送健身車唯一標(biāo)識的UDP廣播sendUDP(UUID);5)// 健身車接收到含有自身唯一標(biāo)識的UDP廣播后會回復(fù)自身IP地址IP= readByUDP();6)// 客戶端收到IP地址后,返回確認(rèn)收到碼sendUDP(GET_IP_STRING);7)// 保存IP地址到數(shù)據(jù)庫saveIPToDB(UUID);}8)// 連接該 IP,完成通信LinkTCP(IP);
當(dāng)客戶端需要與健身車進(jìn)行通信時,按照協(xié)議規(guī)定向健身車發(fā)送命令,健身車傳感器開始工作,定時測量用戶運動數(shù)據(jù),并發(fā)送給客戶端.當(dāng)運動結(jié)束后,客戶端需要發(fā)送一條結(jié)束命令,結(jié)束運動,健身車傳感器停止工作.協(xié)議如表1所示,$為開始結(jié)束符.
表1 部分健身車通信協(xié)議
為了保證用戶的運動負(fù)荷在用戶身體可承受范圍內(nèi),用戶與健身車完成連接后,需要進(jìn)行心肺功能評估測試,如圖 4所示.
健身車使用二級間歇式心肺耐力測試,在兩種功率強度下運動三分鐘,中間休息三分鐘.根據(jù)測試者平均心率情況,獲取最大功率和最大攝氧量,用以評估測試者心肺耐力情況[11,12],具體公式如公式(1),公式(2):
圖4 心肺耐力測試實現(xiàn)界面
Pmax為最大功率,VO2max為最大攝氧量,weight為用戶體重,HR1和HR2分別表示測試者每級測試30 s后平均心率值,P1和P2分別表示兩級負(fù)荷功率值.
為了保證測試的準(zhǔn)確性,降低用戶運動風(fēng)險,客戶端在測試中和測試完成后,會根據(jù)測試者運動情況判斷用戶此次的運動過程是否存在安全風(fēng)險,運動結(jié)果是否符合測試標(biāo)準(zhǔn),具體標(biāo)準(zhǔn)如表2.
表2 心肺耐力測試異常情況
當(dāng)用戶存在安全風(fēng)險時,立即提示用戶結(jié)束運動,并告知風(fēng)險.當(dāng)存在測試失敗等情況下,會提示用戶測試失敗,用戶可以重新開始測試.測試成功后,客戶端會根據(jù)用戶最大攝氧量,年齡,性別等信息,判斷用戶的基本心肺耐力情況,為用戶評分,并將運動結(jié)果上傳云服務(wù)器.云服務(wù)器根據(jù)測試結(jié)果,選擇適合用戶運動強度的處方計劃并下發(fā).用戶使用處方計劃進(jìn)行運動,可以在達(dá)到健身目的情況下,最大限度地減少運動風(fēng)險,實現(xiàn)安全健身.
運動模塊主要分為處方計劃運動和自由運動.
處方計劃運動是用戶在進(jìn)行完心肺耐力測試后,云服務(wù)器根據(jù)用戶心肺耐力評估情況下發(fā)的運動處方.該處方規(guī)定了用戶每周運動次數(shù)及每次運動時間,并根據(jù)用戶實時運動狀況調(diào)整運動強度,為用戶提供合理健康的運動計劃.使用該處方計劃,可以有效保證用戶的健身強度,提高用戶的身體素質(zhì),降低用戶運動風(fēng)險,實現(xiàn)科學(xué)健身.
自由運動用于用戶體驗使用.用戶可以自由選定功率大小和運動時間,進(jìn)行鍛煉.
為了降低用戶運動風(fēng)險,用戶在運動前需要注冊,提供年齡,體重,身高,靜態(tài)心率等信息.用戶可以使用健身車自帶的握式心率測量傳感器,也可使用藍(lán)牙心率手表等心率測量儀器,完成靜態(tài)心率測量.
用戶在登錄后,可以上傳個人健身數(shù)據(jù)至云服務(wù)器,并可以通過歷史模塊查看歷史運動狀況.客戶端其他界面如圖5所示.
圖5 客戶端其他實現(xiàn)界面
本文設(shè)計并實現(xiàn)了健身車移動客戶端,解決了現(xiàn)有智能健身車成本較高,通用性不佳的問題.該客戶端通過使用無線局域網(wǎng)通信,增強了健身車使用通用性;通過使用智能手機或平板電腦操控健身車,使得健身車不用單獨配備上位機,成本降低了約40%.隨著無線局域網(wǎng)和個人手機的普及,該方法的應(yīng)用方向?qū)⑷找鎻V泛.
未來工作中,將致力于完善并開放無線局域網(wǎng)通信協(xié)議,吸引更多類別的智能健身設(shè)備接入到該系統(tǒng).同時將該客戶端接入智能化健康促進(jìn)服務(wù)系統(tǒng),納入國民體質(zhì)監(jiān)測云平臺[13],作為科學(xué)訓(xùn)練處方的一部分.