Upload
wesley-lin
View
76
Download
0
Embed Size (px)
Citation preview
智慧型居家看護系統
專題研究報告
指導教授:蘇宗安學 生:李維澤
林政元 王永貴
Outline
專題內容說明 工時分配 Crossbow 軟、硬體介紹 系統設計與實作
架構與流程 資料接收處理 系統功能 網站與資料庫
實際 DEMO
情境描述
本專題實做的是針對安養院的體溫監控管理系統。
系統必須在使用者體溫過於正常 時,通知看護前往值處理。
採用作法
讓使用者佩戴傳送端的 sensor
在系統安裝 base 端的 sensor
Base 端的 sensor 持續監控傳送端的 sensor 所傳回的,若使用者體溫超出條件 ,便發出警示訊息通知值 值
看護
工作分配功 能 姓 名
李維澤 林政元 王永貴
系統需求與分析 V V V
實驗平台 V V V
MYSQL V V
資料庫系統 V
網站架設 V
系統整合 V V
解碼 V
專題文件製作 V
時程規劃 V V V
視窗介面 V
體溫偵測子系統 V V
體溫通知子系統 V
審核監督 V V
軟硬體整合測試 V V
環境架設 V
Crossbow硬體介紹
MTS300
- 電壓 - 溫度 - 光照度 - 聲音
Crossbow硬體介紹
IRIS
- 超低耗功- 電池壽命長- 多跳自動組網設計- 信號穩定- 可隨意修改與編程
Crossbow硬體介紹
MIB520
Crossbow軟體介紹 -MoteVeiw
Crossbow軟體介紹 -MoteConfig
程式架構說明
系統運作流程圖
開發環境
作業系統: MS-XP SP2
使用語言: JAVA 、 PHP
JAVA 環境設定: jdk1.6_15 、 jre6 、 rxtx-2.1 、 jdbc
開發軟體: Eclipse-JEE
使用硬體: Crossbow Sensor
資料庫與工具: MySQL+PHPMyAdmin
簡訊系統提供: EVERY8D 企業簡訊
E-mail 提供: Google Gmail
連結 Sensor
比對及開啟 COMPORT
defaultPort 存放使用者所選 PORT
開 所選的啟 PORT
if (portId.getName().equals(defaultPort)) {System.out.println("Found port: "+defaultPort);
}
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
建立 listener
在使用者所選的 PORT 增加一個 listener
serialPort.addEventListener(this);
資料傳入即接收
Listener 一發現有資料傳入,就會 動此啟 function ,並把 event type 傳入。
public void serialEvent(SerialPortEvent event){switch ( event.getEventType() ){
case SerialPortEvent.DATA_AVAILABLE:
…}
}
數據資料轉換
原始資料處理
原始資料: 03 F0 01 00 00 00 00 00 00 00 00 F5 81 7E 5D 1B 00 00 03 00 00
00 33 83 81 00 00 32 02 16 02 19
03 00 id 00 00 parent 32 02 battery 16 02 temperature 19 03 light F0 01 mic
00 03 00 00 02 32 02 16 03 19 01 F0
轉換資料 (16進位轉 10進位 )
for(int i=0;i<4;i++)battery += (uint16(conver[i]) * pow16(3-i));
public static int uint16(char x)switch(x){
case '1':uint10 = 1;break;
public static int pow16(int a){int ans=1;for(int i=0;i<a;i++)
ans *= 16;return ans;
}
資料傳入公式
將 10 進位 傳入公式涵式,計算出值 ID 、 BATTERY等
困難點 :計算出的 唯一只有溫度有出入,多次驗算後還是一值樣。例 : 如果實際溫度為 29℃ ,原始資料經過公式轉換出來的溫度卻為 20.96 ℃ ,如果實際溫度為 30 ℃ ,那經過轉換卻為 19.96 ℃ 。
解決辦法 :自訂一常數 k=24.98temp = k - TEMPERATURE; TEMPERATURE = k + temp;
k=24.98
實際溫度 29℃
測得溫度 20.96 ℃
差距都為4.02 ℃
數據資料接收速度改善
困難點: 因為接收到的原始資料雖然長度以陣列大小來限制,但是資料內容順序卻會不一樣。在原本的資料接收設計為選擇固定的資料排列順序,如果不一樣則不接收此筆傳入的資料,但是這樣做會使資料的更新速度變慢,尤其是 sensor 數量越多時,資料被丟棄的比例越高。
解決辦法: 雖然接收到的資料排列順序不一樣,但是間格位置是固定的,所以利用計算有效資料的開頭位置,來計算所需要資料的位置,減少資料被丟棄比例,加快資料更新速度。
數據資料接收速度改善
例 :03 F0 01 00 00 00 00 00 00 00 00 F5 81 7E 5D
1B 00 00 03 00 00 00 33 83 81 00 00 32 02 16 02 19
有效資料開頭位置(為第 14 bytes)
此為 ID位置(一定會在開頭的後面第五個 bytes)
parent battery
若資料排列超過陣列限制長度時,會從第一個 bytes開始排
light
light
視窗介面
利用UIManager.setLookAndFeel 來建立 景主題,套件為佈SubstanceNebulaBrickWallLookAndFeel()
使用 Jtable 來監控每顆 Sensor所回傳的訊息
執行視窗後直接使用 JDBC 與MySQL 做連結
溫度條件達成會跳出警訊視窗並閃燈警示
參數設定
困難點: 利用 JFileChooser 所存
下的 案路徑不被程式所接受,檔並且會造成程式的當機。
解決辦法: 問題癥結點在於斜
線”/” 為 JAVA 語言內部所使用,所以必須改為兩條反斜線”\\” , replaceall 是用 re 做search ,“ \” 在 re 裡也是跳脫字,所以必須再多處理一次 ,必須寫為 replaceAll("\\\\", "/");
客戶設定
使用 JTabbedPane 製作客戶資料與監護人資料標籤
傳進“ SELECT * FROM client/guardian” 來取得client/guardian table 的資料並存進 Object[Row][7] 供 Jtable 使用
在客戶 / 監護人點兩下會切換標籤指向該客戶資料
底下計算 Jtable 目前資料筆數
提供新增、刪除、修改、 看事件查功能
新增、修改資料
新增與修改為同一視窗但會傳出各自的 function
傳進“ INSERT INTO client(id,name,sex,birthday,age,guardian) VALUES (?,?,?,?,?,?)” 來新增使用者資料
傳進“ UPDATE client ” +“SET name=”+“‘”+ob[1]+“’”+“,”+“sex=”+“‘”+ob[2]+“’”+“,”+“birthday=”+“‘”+ob[3]+“’”+“,”+“age=”+“‘”+ob[4]+“’”+“,”+“guardian=”+“‘”+ob[5]+“’”+“,”+“event=”+“‘”+ob[6]+“’”+“WHERE id =”+“‘”+ob[0]+“’” 來修改使用者資料
所有事件
擷取所選的 Jtable 的事件上的內容顯示在 JTextArea 上並未使用到資料庫的資料
使用 CanlendarPanel package 來顯示日曆功能
日期與姓名選擇好後按查詢後在底下會顯示 詢的查資料為幾筆
過濾的方式使用移除不是為關鍵字的 Jtable
按下重新整理將會重新讀取資料庫裡的資料再存回JTable
紀錄資料 詢查
使用 javax.mail 與 google 所提供的 API 來實作
使用 google 的 smtp伺服器來送信
smtpServer="smtp.gmail.com";
若使用者亂填收件人的 寄出值後便會丟出例外顯示收件人格式錯誤
收件人使用逗點隔開不需做判斷即可寄出
簡訊 使用 EVERY8D簡訊系統
連上他們的 Web Client Service 取得類別與方法
利用 SecuritySoapProxy類別方法來登入他們公司的伺服器,伺服器會回傳 xml 再填入值 MessageSoapProxy類別方法來傳送簡訊
若伺服器回傳 為正的即表成功負為失敗值
收件人必須做檢 ,若傳送格式對了幾乎都可以發送查
傳送格式:<REPS> <IP/> <CARD_NO/> <USER NAME="Eric" MOBILE="+8869x8xxx562" EMAIL="" SENDTIME="" PARAM=""/> <USER NAME="May" MOBILE="+8869x1xxx931" EMAIL="" SENDTIME="" PARAM=""/> </REPS>
收件人
利用資料庫來取得收件人 Jtable
按著 Ctrl 點選可以選擇多個收件人
若使用者選擇為 E-mail 在點收件人按下確定後則會出現收件人的 E-mail ,若選擇為簡訊,則會出現手機號碼,並都以分號隔開
警告視窗若 Sensor 溫度 超過設定的條件值時,主程式將會跳出視窗並顯示訊息並發出設定的音效
困難: 由於是從 DataReceive這個類別做判斷,每次超過標準就要往返主程式呼叫警告視窗,判斷可能是在線程上出了問題,造成程式無法繼續使用。
解決: 使用 SwingUtilities 內的
invokeLater 方法來實作一個介面Runnable 來解決線程的問題。
Com Port 設定功能
使用 RXTX 套件來實做 JAVA I/O ,將列舉出來的 port 存進陣列裡,再放進 Jcombobox 裡
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) { portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL) { comport[count]=portId.getName(); count++; }}
官方網站
讓監護人隨時能 掌握情況夠
網站架構圖
投票系統流程圖
資料表設計
欄位 型態 校對
id int(2)
name varchar(10) utf8_unicode_ci
sex varchar(2) utf8_unicode_ci
birthday date
age int(3)
guardian varchar(10) utf8_unicode_ci
event text utf8_unicode_ci
資料表: client
欄位 型態 校對
name varchar(10) utf8_unicode_ci
phone1 varchar(20) utf8_unicode_ci
phone2 varchar(20) utf8_unicode_ci
mail varchar(100) utf8_unicode_c
address varchar(50) utf8_unicode_ci
資料表: guardian
欄位 型態 校對
datatime varchar(20) utf8_unicode_ci
id int(2)
name varchar(10) utf8_unicode_ci
event text utf8_unicode_ci
資料表: event
欄位 型態 校對
news_id int(11)
news_type varchar(20) big5_chinese
news_date determine big5_chinese
news_subject varchar(100)
news_content Text big5_chinese
news_editor Varchar(100) big5_chinese
資料表: newscenter
資料庫 ER 圖
實際 DEMO
系統演練
THE END感謝觀賞 敬請指教