41
智慧型居家看護系統 專題研究報告 指導教授:蘇宗安 生:李維澤 林政元 王永貴

Crossbow Sensor Project

Embed Size (px)

Citation preview

Page 1: Crossbow Sensor Project

智慧型居家看護系統

專題研究報告

指導教授:蘇宗安學 生:李維澤

林政元 王永貴

Page 2: Crossbow Sensor Project

Outline

專題內容說明 工時分配 Crossbow 軟、硬體介紹 系統設計與實作

架構與流程 資料接收處理 系統功能 網站與資料庫

實際 DEMO

Page 3: Crossbow Sensor Project

情境描述

本專題實做的是針對安養院的體溫監控管理系統。

系統必須在使用者體溫過於正常 時,通知看護前往值處理。

Page 4: Crossbow Sensor Project

採用作法

讓使用者佩戴傳送端的 sensor

在系統安裝 base 端的 sensor

Base 端的 sensor 持續監控傳送端的 sensor 所傳回的,若使用者體溫超出條件 ,便發出警示訊息通知值 值

看護

Page 5: Crossbow Sensor Project

工作分配功 能 姓 名

李維澤 林政元 王永貴

系統需求與分析 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

Page 6: Crossbow Sensor Project

Crossbow硬體介紹

MTS300

- 電壓 - 溫度 - 光照度 - 聲音

Page 7: Crossbow Sensor Project

Crossbow硬體介紹

IRIS

- 超低耗功- 電池壽命長- 多跳自動組網設計- 信號穩定- 可隨意修改與編程

Page 8: Crossbow Sensor Project

Crossbow硬體介紹

MIB520

Page 9: Crossbow Sensor Project

Crossbow軟體介紹 -MoteVeiw

Page 10: Crossbow Sensor Project

Crossbow軟體介紹 -MoteConfig

Page 11: Crossbow Sensor Project

程式架構說明

Page 12: Crossbow Sensor Project

系統運作流程圖

Page 13: Crossbow Sensor Project

開發環境

作業系統: 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

Page 14: Crossbow Sensor Project

連結 Sensor

Page 15: Crossbow Sensor Project

比對及開啟 COMPORT

defaultPort 存放使用者所選 PORT

開 所選的啟 PORT

if (portId.getName().equals(defaultPort)) {System.out.println("Found port: "+defaultPort);

}

serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);

Page 16: Crossbow Sensor Project

建立 listener

在使用者所選的 PORT 增加一個 listener

serialPort.addEventListener(this);

Page 17: Crossbow Sensor Project

資料傳入即接收

Listener 一發現有資料傳入,就會 動此啟 function ,並把 event type 傳入。

public void serialEvent(SerialPortEvent event){switch ( event.getEventType() ){

case SerialPortEvent.DATA_AVAILABLE:

…}

}

Page 18: Crossbow Sensor Project

數據資料轉換

Page 19: Crossbow Sensor Project

原始資料處理

原始資料: 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

Page 20: Crossbow Sensor Project

轉換資料 (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;

}

Page 21: Crossbow Sensor Project

資料傳入公式

將 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 ℃

Page 22: Crossbow Sensor Project

數據資料接收速度改善

困難點: 因為接收到的原始資料雖然長度以陣列大小來限制,但是資料內容順序卻會不一樣。在原本的資料接收設計為選擇固定的資料排列順序,如果不一樣則不接收此筆傳入的資料,但是這樣做會使資料的更新速度變慢,尤其是 sensor 數量越多時,資料被丟棄的比例越高。

解決辦法: 雖然接收到的資料排列順序不一樣,但是間格位置是固定的,所以利用計算有效資料的開頭位置,來計算所需要資料的位置,減少資料被丟棄比例,加快資料更新速度。

Page 23: Crossbow Sensor Project

數據資料接收速度改善

例 :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

Page 24: Crossbow Sensor Project

視窗介面

利用UIManager.setLookAndFeel 來建立 景主題,套件為佈SubstanceNebulaBrickWallLookAndFeel()

使用 Jtable 來監控每顆 Sensor所回傳的訊息

執行視窗後直接使用 JDBC 與MySQL 做連結

溫度條件達成會跳出警訊視窗並閃燈警示

Page 25: Crossbow Sensor Project

參數設定

困難點: 利用 JFileChooser 所存

下的 案路徑不被程式所接受,檔並且會造成程式的當機。

解決辦法: 問題癥結點在於斜

線”/” 為 JAVA 語言內部所使用,所以必須改為兩條反斜線”\\” , replaceall 是用 re 做search ,“ \” 在 re 裡也是跳脫字,所以必須再多處理一次 ,必須寫為 replaceAll("\\\\", "/");

Page 26: Crossbow Sensor Project

客戶設定

使用 JTabbedPane 製作客戶資料與監護人資料標籤

傳進“ SELECT * FROM client/guardian” 來取得client/guardian table 的資料並存進 Object[Row][7] 供 Jtable 使用

在客戶 / 監護人點兩下會切換標籤指向該客戶資料

底下計算 Jtable 目前資料筆數

提供新增、刪除、修改、 看事件查功能

Page 27: Crossbow Sensor Project

新增、修改資料

新增與修改為同一視窗但會傳出各自的 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]+“’” 來修改使用者資料

Page 28: Crossbow Sensor Project

所有事件

擷取所選的 Jtable 的事件上的內容顯示在 JTextArea 上並未使用到資料庫的資料

Page 29: Crossbow Sensor Project

使用 CanlendarPanel package 來顯示日曆功能

日期與姓名選擇好後按查詢後在底下會顯示 詢的查資料為幾筆

過濾的方式使用移除不是為關鍵字的 Jtable

按下重新整理將會重新讀取資料庫裡的資料再存回JTable

紀錄資料 詢查

Page 30: Crossbow Sensor Project

E-mail

使用 javax.mail 與 google 所提供的 API 來實作

使用 google 的 smtp伺服器來送信

smtpServer="smtp.gmail.com";

若使用者亂填收件人的 寄出值後便會丟出例外顯示收件人格式錯誤

收件人使用逗點隔開不需做判斷即可寄出

Page 31: Crossbow Sensor Project

簡訊 使用 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>

Page 32: Crossbow Sensor Project

收件人

利用資料庫來取得收件人 Jtable

按著 Ctrl 點選可以選擇多個收件人

若使用者選擇為 E-mail 在點收件人按下確定後則會出現收件人的 E-mail ,若選擇為簡訊,則會出現手機號碼,並都以分號隔開

Page 33: Crossbow Sensor Project

警告視窗若 Sensor 溫度 超過設定的條件值時,主程式將會跳出視窗並顯示訊息並發出設定的音效

困難: 由於是從 DataReceive這個類別做判斷,每次超過標準就要往返主程式呼叫警告視窗,判斷可能是在線程上出了問題,造成程式無法繼續使用。

解決: 使用 SwingUtilities 內的

invokeLater 方法來實作一個介面Runnable 來解決線程的問題。

Page 34: Crossbow Sensor Project

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++; }}

Page 35: Crossbow Sensor Project

官方網站

讓監護人隨時能 掌握情況夠

Page 36: Crossbow Sensor Project

網站架構圖

Page 37: Crossbow Sensor Project

投票系統流程圖

Page 38: Crossbow Sensor Project

資料表設計

欄位 型態 校對

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

Page 39: Crossbow Sensor Project

資料庫 ER 圖

Page 40: Crossbow Sensor Project

實際 DEMO

系統演練

Page 41: Crossbow Sensor Project

THE END感謝觀賞 敬請指教