You are on page 1of 58

利用 Google Maps 實作

台北市公車查詢系統

專題學生: 吳秉澤
彭金清
鍾學毅
指導教授:鄭福炯 教授

大同大學
資訊工程學系
專題報告

中 華 民 國 九 十 六 年 十二 月
II

摘要
由於遊戲科技的蓬勃發展,出現了以體感為操作方式的遊戲,開
啟了遊戲界新的革命,這種體感操作的方式,帶給我們另一種遊戲
的樂趣,以活動的方式享受遊戲的樂趣。
Zigbee 是當前火紅的無線傳輸技術,擁有低耗電、低功率、低成
本,很適合用於控制傳輸,G sensor 為三軸重力感測器,可以感測
出 三 度 空 間 中 移 動 的 方 向 及 狀 態 , 本 次 專 題 將 Zigbee 結 合 G
sensor 應用於遊戲操縱。首先我們會改寫結合 G sensor 的 Zigbee
開發板上的程式,使開發板具有遊戲控制器的特性,並分析 G
sensor 感測 ,接下來將用 JAVA 實作應用介面,將開發板動作結
合電腦的 IO,達成用 Zigbee 開發板控制遊戲的效果。
本專題最終目標,將取代電腦遊戲傳統的控制,更可能提供方法
套用於使用者自行開發的遊戲,達成體感操作的普遍性。
III

目錄
摘要...............................................................II
圖目錄.............................................................Ⅴ
表目錄.............................................................Ⅶ
第1 章 概述.........................................................1
1.1 題目........................................................1
1.2 動機........................................................1
1.3 目標........................................................2
1.4 所遇問題與解決方法..........................................2
1.4.1 所遇問題..............................................2
1.4.2 解決方法..............................................3
1.5 專題進度....................................................4
1.6 專題成果概述................................................5
第2章 相關研究.....................................................11
2.1 簡述Zigbee與 EST Network..................................11
2.1.1 什麼是Zigbee?.......................................11
2.1.2 Zigbee裝置...........................................11
2.1.3 Zigbee網路...........................................13
2.1.4 Zigbee網路堆疊.......................................14
2.1.5 什麼是EST Network?..................................16
2.1.6 EST Network裝置.....................................16
2.1.7 EST Network 網路....................................16
2.1.8 EST Network 網路堆疊...............................17
2.2. 什麼是G Sensor? ..........................................18
2.3 EEVK02C001-A00、EEVK02F001-B00裝置介紹....................19
2.3.1 開發板功能細部說明...................................21
第3章 系統架構與需求...............................................23
3.1系統架構 ...................................................23
3.2系統需求....................................................25
第4章 系統分析與設計...............................................27
4.1 系統分析...................................................27
4.1.1 Use Case Diagram.....................................27
4.1.2 Use Case Description.................................28
4.2系統設計....................................................29
4.2.1設定鍵盤執行遊戲......................................29
4.2.2執行一般滑鼠模擬......................................30
4.2.3設定遊戲滑鼠執行遊戲..................................31
IV

4.2.4 秀出觀測.............................................32
第5章 系統實作.....................................................34
5.1 Zigbee G-Sensor device的三軸方向...........................35
5.2 原始無線資料收送流程.......................................36
5.3 改寫收送流程及資料格式....................................37
5.4 UART 讀出流程.............................................38
5.5 XYZ三軸數 範圍...........................................41
5.6 觸發鍵盤與滑鼠事件........................................43
5.6.1 觸發鍵盤............................................43
5.6.2 滑鼠控制............................................46
5.6.3 觀測模式............................................47
第6章 結論與未來發展...............................................60
6.1 結論.......................................................60
6.2 未來發展...................................................61
第7章 參考文獻.....................................................62
V

圖目錄
圖 1 : ..............................................................5
圖 2 : ..............................................................5
圖 3 : ..............................................................6
圖 4 : ..............................................................6
圖 5 : ..............................................................7
圖 6 : ..............................................................7
圖 7 : ..............................................................8
圖 8 : ..............................................................9
圖 9 : ..............................................................9
圖 10 : ............................................................10
圖 11 : ............................................................10
圖 12 : ............................................................11
圖 13 : ............................................................13
圖 14 : ............................................................14
圖 15 : ............................................................17
圖 16 : ............................................................17
圖 17 : ............................................................19
圖 18 : ............................................................20
圖 19 : ............................................................20
圖 20 : ............................................................21
圖 21 : ............................................................22
圖 22 : ............................................................22
圖 23 : ............................................................23
圖 24 : ............................................................24
圖 25 : ............................................................24
圖 26 : ............................................................25
圖 27 : ............................................................27
圖 28 : ............................................................29
圖 29 : ............................................................30
圖 30 : ............................................................31
圖 31 : ............................................................32
圖 32 : ............................................................34
圖 33 : ............................................................35
圖 34 : ............................................................36
圖 35 : ............................................................36
圖 36 : ............................................................37
VI

圖 37 : ............................................................38
圖 38 : ............................................................38
圖 39 : ............................................................39
圖 40 : ............................................................40
圖 41 : ............................................................41
圖 42 : ............................................................41
圖 43 : ............................................................42
圖 44 : ............................................................44
圖 45 : ............................................................45
圖 46 : ............................................................46
圖 47 : ............................................................47
圖 48 : ............................................................48
圖 49 : ............................................................48
圖 50 : ............................................................49
圖 51 : ............................................................50
圖 52 : ............................................................51
圖 53 : ............................................................52
圖 54 : ............................................................53
圖 55 : ............................................................54
圖 56 : ............................................................55
圖 57 : ............................................................56
圖 58 : ............................................................57
圖 59 : ............................................................58
圖 60 : ............................................................59
VII

表目錄
表 1 :..............................................................4
1

第 1章

概述

1.1 題目

利用 Google Maps 實作台北市公車查詢系統

1.2 動機

想像一群外地人或是外國人來到台北自助旅行,卻因為一大堆公車

站牌,複雜的路線圖而花了很多時間在交通上,觀光時間大大水而

影響到旅遊的樂趣。台北市的大眾運輸非常完善,由其是公車系統,

幾乎是遍布了整個大台北地區,想到哪都沒有問題。可是正因為系統

龐大,路線的分布也變得複雜,不要說是外地人了,就連台北人也

是,除了通勤通學其他的大部份都較漠生,很難把路線全摸清楚來

好好利用。且公車資訊都只有各站牌名,沒有實際標示在台北市地圖

上,如果不是台北人或不是很熟析台北市的人的話,可能會造成不

知道選搭哪個公車或不知道哪個公車較快的情況。如果現在有一個工

具可以自動將兩地點之間可以利用的公車一一列出供使用者查看,

不僅可以防止迷路,更可以省下很多找資料的時間!除此之外,還

能夠讓為數眾多的網路用戶們可以自行編修公車路徑(假如原先的

公車路徑資料有誤或是路徑有改的話)。我們的目標就是利用 Google

Maps 來實作出這樣的一個工具!
2

1.3 目標

1.3.1 近程目標

可以讓使用者能 在 網 站上 查詢 公車 路線 ,以 線段 方式 程現 在
Google Maps 上;並且能夠知道兩個地點之間有往返的公車;還有最
重的要的,使用者能夠幫忙修改不正確的公車站牌或路線資料,使
得路線查詢系統更完整,更正確。

1.3.2 遠程目標

加強網站的美工,加入更多其他附屬的功能,例如

1.4 所遇問題與解決方法

1.4.1 所遇問題:

(1) 取得的公車路線和站牌資料零散
(2) 取得的公車站牌位置的格式是 TM2,與 Google Maps 所使用
WGS84 經緯度位置不同
(3) 在設計網頁時,IE 瀏覽器和 Firefox 瀏覽器所支援的語法有相當
程度的差異,導致專頁容易發生”IE Only”的問題
(4) 因為是數年前的資料,有一部分公車站牌資料不齊全或現在的公
車路線已經有變動過了

1.4.2 解決方法

(1) 撰寫 Java 程式來執行取得的檔案的資料整理,因為原始資料檔


案的格式不盡相同,所以必需寫數個不同的 Java 程式來處理各
個原始檔案。
(2) TM2 (二度分帶座標)和 WGS84(大地座標系)之間有公式可以轉換,
不過因為公式複雜且參數和精準度問題無法解決,最後採用網路
3

上其他人寫的 XML 網頁程式來轉換。


(3) 先針對其中一個下手,我們選的是先對 Firefox 瀏覽器寫出適合
的網頁語法,讓它能在 Firefox 瀏覽器下正常運作。
(4) 我們的網站上提供了使用者一個方法可以修改伺服器端的資料,
也就是使用者如果發現某個公車站牌的資料有誤時可以有效率地
將其修正。
1.5 專題進度

本專題從四月前開始著手,從研 Zigbee 資 ,到程式撰寫,表 1 為


本專題的專題進 。
表 1 :專題進度
工作 月份 4 5 6 7 8 9 10 11 12
研讀 zigbee 資料 4 月前開始研讀
Trace zigbee 程式

分析程式碼
改寫開發板程式
撰寫 UART 接收程式
學習 OOAD
撰寫 JAVA 應用介面
報告準備

1.6 專題成果概述

圖 1,用 Firefox 瀏覽器觀看 Google Maps 台北市公車查詢系統的


主頁面
4

圖 1:用 Firefox 瀏覽本站


下圖 2,查詢公車路線的結果,圖中藍線即為公車的行駛路線

圖 2:查詢公車路線的結果
下圖 3,顯示公車路線及站牌,圖中倒水滴形的點即為站牌分
佈狀況
5

圖 3:查詢公車路線及站牌的結果

圖四,在地圖上的站牌點或是右邊站牌清單中點站牌,可以顯示
相關的資訊

圖 4:站牌訊息
下圖是在地圖上查詢一個地點附近的公車站牌,同樣的也是在
地圖上顯示的公車站牌點上,或是右邊站牌清單點選站牌即可顯示
該站牌的資訊。在右上背景色為紫色的區塊為一些選項,可以指定要
顯示”直線距離”多少公尺內的站牌,圖 5 是顯示在地圖上指定地點
6

的半徑 300 公尺內的公車站牌。

圖 5:查詢某地點附近的公車站牌結果
下圖顯示的是導航功能,可將地圖上任意地方設定成為起點,
並再設定一個終點,就可以開始查詢兩點之間有無來往的公車,結
果會顯示找到的符合條件的公車路線、上下車站牌、起終點和上下車
站牌的直線距離,同樣點選上下車站牌時會顯示站牌位置,如圖 7。
並且在查詢的時候可以選擇起終點離上下車站牌的直線距離不要超
過某個最大值。
7

圖 6:查詢的結果

圖 7:顯示站牌的位置
有的時候可能會找不到一段票可達的公車,此種情況可再試試
加入轉一次車的查詢,例如下圖,起點是大同大學,終點是世貿時
會找不到直達公車,但若加入兩段票的查詢就可找到一些路線,
8

圖 7:兩段票的查詢
在很多時候,使用者有可能跟本不知道他想去的地方在哪裡,
也就是說,他的終點可能會不知道地點在哪裡,所以我們提供一個
方法,如下圖,讓網友可自行新增地標清單。在地標清單上點一個地
標,就可以把該地標的位置標示在地圖上,並且可以進而設成起點
或終點。如果地標太多,清單太長的話,就可以用搜尋的功能。
9

圖 8:地標
對於原始資料有些地方不齊或是不正確的部分,可以提供使用者介
面,讓使用者去新增/修改站牌資料,來達到資料的完整性。而我們
也期待以此功能,將地圖資料增加到更加詳盡,讓查詢結果更加完
善。
10

第 2章

相關研究

2.1 簡述 Google Map 與 其 API

2.1.1 什麼是 Google Map?

Google Map 是 Google 所研發出的一種地圖,其地圖畫面較為細緻,


而且有提供一些基本的 API 供其他開發者使用,且地圖本身不用收
費,所以開發者不必付費即可使用。

2.1.2 Google Map API

Google Map 有提供一些基礎的 API,可供開發者使用,不必再去


做基礎部份的撰寫,方便撰寫者用基礎功能做出較複雜的動作。

2.2. 什麼是 AJAX?

A synchronous JavaScript And XML(AJAX)是一種撰寫程式的方


法,他能夠讓程式彼此間進行非同步的運算,使程式不必去等待要
求而能去執行其他事;當要求完成,則程式才把所要處理之資訊處
理完成。

2.3 什麼是 Apache Tomcat?

Apache Tomcat是一款用來管理伺服器的軟體,提供使用者來管
理伺服器運作。
11

第 3章

系統設計與架構

3.1 系統架構
本專題要建立一台 Server,用來儲存資料以及進行網頁要求的運算。
而使用者部份,則必須使用 Molliza Firefox 來連接到網頁,來使用公
車查詢系統。系統架構如下:

Internet

User

Web Page Firefox


Server

Data files
Memory

Java
Program

3.2 系統設計
本專題的目的是提供使用者一個方便的查詢系統,讓使用者可以藉
由此系統達到所想要的查詢動作。而在設計的部份,就分成2部分來
考量,以下就以此2部分來作為設計之考量。
3.2.1 以效能為考量之設計
要提供查詢,我們必須將網頁及 Server 架構起來,讓使用者可以透
過網頁做動作,來跟 Server 做資料的傳輸。對使用者而言,網頁提供
了一些功能來做搜尋,而使用者則使用這些功能來做想要的搜尋。做
搜尋的同時,網頁就會傳訊息給 Server,要求 Server 做出適當的運
算,產生結果。運算完後,Server 則將這些資料傳回網頁,網頁再將
所收到的資料轉換成適當的訊息顯示在網頁上,供使用者觀看。
12

Action User
Request Action

Server Web Page User

Send Show
Result Result
Back

  至於 Server,因為大部分運算皆在 Server 上,所以要盡量避免


大量運算,才能提高效率。所以,針對資料存取的部份,就期望能夠
將所有資料先行讀到 Memory 中,之後存取直接透過 Memory 來執行。
如此一來,省下了每次對資料檔案做讀取的動作,省下了 Server 運
算的時間,可讓 Server 效率較快。

Memory

Read from files

Stop Bus Stop


Stop ID Cell
position name name

24:系統架構圖(二)
  而為了使用 Memory 中的資料,以及網頁的要求,所以我們要
在 Server 上撰寫程式來做這些運算,並且在運算之後將結果以適當
的形式傳回給網頁。
13

Send request

Java Program Server Web Page

Send result back


Search Send
data data

Memory

3.2. 2 以功能為考量之設計
為了實現公車路線及站牌查詢,兩點間公車站牌查詢,以及新增/
修改站牌資訊,我們就必須針對各自的特點去設計程式。
  首先,我們設計公車路線及站牌的查詢。當使用者在網頁上使用
路線或站牌查詢時,網頁會對 Server 作要求,而 Server 上的程式就
會把所查詢的路線(或站牌)利用搜尋的方法,從 Memory 中抓出,
再整理成適當格式,傳回網頁。而網頁,在將接收到的資料整理後顯
示在網頁上,供使用者觀看。
14

User

Find Show
bus287 information

Web Page

Find
Send request back
bus287

Java
program

Search bus stop which


Send result back
belongs to bus287

Memory

圖?? 公車路線及站牌查詢流程圖
  再來,我們設計兩點間的公車查詢。在這部份,我們必須要先找
到兩點所在區域附近的站牌,才能確定能不能直達;如果不能,則
就要再兩點中間再找一點(此點通常是較多數公車會經過的站牌),
然後再去比對,看能否找到公車路線。因此,我們要寫出一個演算法,
來確定上述動作可運作。
15

User

Set start point and Show


end point information

Web Page

Search bus which


Send request back
can fit them

Java
program

Search bus stop which Send result back


near start point and and starting the
end point algorithm

Memory

圖?? 兩點間公車查詢流程圖
  最後,為了資料的正確性,我們設計了新增/修改功能。使用者
可在網頁上新增/修改站牌資訊,而這些資訊會立即更新至 Server
上,讓其他使用者可使用。
16

User

Try to add or update Show


the bus stop information

Web Page

Add or update stop


Send request back
information

Java
program

Send message
Find place and update back
information

Memory

圖?? 新增/修改公車站牌流程圖

3. 3 系統需求
伺服器所需要的硬體軟體設備。

1.作業系統

需求: Microsoft® Windows® XP

2.硬體

需求: 733 MHz Pentium®III processor or AMD-K7® class


processor, 128 MB of RAM,具備上網能力

3.軟體

Apache Tomcat
17

JDK 1.5

Eclipse Java EE

客戶端(使用者)所需要的硬體軟體設備。

1.作業系統

需求: Microsoft® Windows® XP

2.硬體

需求: 733 MHz Pentium®III processor or AMD-K7® class


processor, 128 MB of RAM,具備上網能力

3.軟體

Mozilla Firefox

JDK 1.5
18

第 4章

系統實作

4.1 實做公車路線及站牌查詢
系統分析上,使用 Use Case Diagram 及 Use Case Description 做說明。
4.1.1 Use Case Diagram
使用在使用者系統介面中大致上分成兩個部分,為遊戲控制模擬及
觀測模式;Actor 為一個手持 Zigbee Device 的使用者,他對系統的互
動可分成三個 Use Case,為執行、設定、觀測

設定

鍵 遊戲滑鼠

執行

鍵 一般滑鼠 遊戲滑鼠

使用者
觀測
(Zigbee Controler)

角 XYZ 力 3D
度 值 道

圖 27:Use Case Diagram


4.1.2 Use Case Description
<設定>
設定鍵盤
User System
1.使用者按鍵盤模擬 2.顯示設定頁面
19

3.使用者選擇相對應鍵盤按鍵 4.顯示使用者選擇按鍵,並要求
執行

設定遊戲滑鼠
User System
1.使用者進入遊戲滑鼠模擬 2.顯示說明及方向控制
3.設定方向並確定 4.進入一般滑鼠狀態

<執行>
執行鍵盤
User System
1.當設定完成,使用者按確定鍵 2.進入鍵盤模擬
執行遊戲滑鼠(當設定遊戲滑鼠完成)
User System
1.使用者指出遊戲視窗範圍 2.進入遊戲滑鼠狀態
執行一般滑鼠
User System
1.使用者進入一般滑鼠模擬 2.顯示說明並進入一般滑鼠控制

<觀測>
User System
1.使用者進入觀測介面 2.列出角度、XYZ 值、力道、3D 服
3.使用者選擇其一觀測 務
4.顯示觀測結果

4.2 實做兩點間公車站牌查詢
利用 UML 的 Sequence diagram 來做說明
4.2.1 設定鍵盤執行遊戲
20

圖 28:設定鍵盤執行遊戲

此為設定鍵盤啟動遊戲圖,Actor 先進入遊戲模式後,GUI 會呈
現兩個按鈕,鍵盤和滑鼠模擬,選擇鍵盤模擬後,會進入一個設定
的頁面,將設定好的值傳給 Keyboard,之後 start()啟動遊戲,這邊有
一個迴圈,是負責讀取 3 軸的數值,啟動 runX(),將 X 數 作分析,
利用 Robot 的 keypree()去執行鍵盤相對應的動作,然後 Y 軸和 Z 軸
也是,最後離開,結束 UART,離開視窗 exitGUI。

4.2.2 執行一般滑鼠模擬
21

圖 29:執行一般滑鼠模擬
此為啟動一般滑鼠圖,Actor 先進入遊戲模式後,GUI 會呈現兩
個 按 鈕 , 鍵 盤 和 滑 鼠 模 擬, 選擇 滑鼠 模擬 後, 又分 為一 般滑 鼠
(mouse1)和遊戲滑鼠(mouse2)模擬,在此選擇了一般滑鼠模擬,之後
start()啟動,這邊的迴圈,是負責讀取 X 軸和 Y 軸的數 值 , 啟 動
runY(),將 X 數 作分析,利用 Robot 的 mousemove()去執行滑鼠相
對 應 的 移 動 , 然 後 Y 軸 , 最 後 離 開 , 結 束 UART , 離 開 視 窗
exitGUI。

4.2.3 設定遊戲滑鼠執行遊戲
22

圖 30:設定遊戲滑鼠執行遊戲
此為設定遊戲滑鼠啟動遊戲圖,Actor 先進入遊戲模式後,GUI
會呈現兩個按鈕,鍵盤和滑鼠模擬,選擇滑鼠模擬後,又分為一般
滑鼠(mouse1)和遊戲滑鼠(mouse2)模擬,在此選擇遊戲滑鼠模擬,之
後 start()啟動,先進入一般 windows 底下的滑鼠模擬情形,使用迴圈,
負責讀取 X 軸和 Y 軸的數值,啟動 runX(),將 X 數 作分析,利用
Robot 的 mousemove() 去 執 行 滑 鼠 移 動 , 然 後 Y 軸 , 啟 動
runY(),isPressSW()判斷 SW2 是否按下,然後將按下的點,傳回視
窗位置,setLocation(),隨後進入遊戲模式 mouse2,讀取 X 軸和 Y
軸 的 數 值 , 啟 動 runX() , 將 X 數 作 分 析 , 利 用 Robot 的
mousemove()去執行滑鼠在遊戲中的移動,然後 Y 軸,啟動 runY(),
最後離開,結束 UART,離開視窗 exitGUI。
4.3 實做新增/修改站牌資訊
23

圖 31:秀出觀測
此為觀測模式圖,Actor 先進入觀測模式後,GUI 會呈現四個按

鈕,分別是 XYZ Value、力道、角度、3D,選擇任一個進入後,start()

啟動,observe 也同步啟動 start()去畫出結果,利用 while 迴圈接收 3

軸數 , UART 利用 setX()給 observe,並利用 mathX()計算值,隨後

setx()傳值給 paint 去畫,另外兩軸也是如此,畫出並呈現觀測結果。


24

第 5章

系統實作

本專題製作流程如下圖所示:
Start

撰寫 JAVA 程式
分析開發板原
使讀出值 驅動
始程式碼
IO 事件

自定資料格式
改寫原始程式 建置使用者 IO
碼 設定介面

撰寫 JAVA 接收
UART 程式

Finish

讀出資料值
分析

建置各種使用
者觀測介面

圖 32:專題流程圖
25

5.1 Zigbee G-Sensor device 的三軸方向

圖 33:Zigbee G-Sensor device


一個 Zigbee G-Sensor device,分別有 X、Y、Z 三軸方向,如上。

5.2 原始無線資料收送流程
26

沒有
RX 模式 是
判斷是否 接收模式 判斷是否 分析封包
裝置初始 開啟
有按按鍵 接收封包 內容

有 TX 模式 傳送XYZ
否 值到SCI
讀取感測
器XYZ值

產生含XYZ
值的封包

傳送封包

圖34:原始無線資料收送流程圖
根據此流程圖,當板子按下 SW1 時,則為 TX 傳送模式,否則
預設為 RX 接收模式,負責讀取三軸變動的資料。
傳送的 G-Sensor device,負責讀取感測三軸變化,並產生封包,
然後傳送,而接收的 G-Sensor device,會偵測是否有封包,分析封
包的內容,並傳送資料到 SCI(serial communications interface)暫存器,
SCI 又稱做 universal asynchronous receiver/ transmitters(UARTs),用來
連接 RS232 序列埠,與 Zigbee device 做通訊,其順序如下:X 辨識
標記、X 、 Y 辨識標記、Y 、 Z 辨識標記、Z 。

圖 35:封包接收內容
0X78 X 0X79 Y 0X7A Z
圖 35 為一個封包所接收的內容,每一格大小為 Byte,共 6
Bytes。
5.3 改寫收送流程及資料格式
27

沒有
RX 模式 是
判斷是否 接收模式 判斷是否 分析封包
裝置初始 開啟
有按SW1 接收封包 內容

有 TX 模式 傳送XYZ
否 值到SCI
讀取感測
器XYZ值


判斷是否
有按鍵

是 產生含XYZ
值的封包 傳送封包

圖36:改寫收送流程圖
在 TX 讀 XYZ 數 值 的同時我們針對 3 個按鈕事件提供了辨識數
值,其數值將取代 0X78(原始 X 辨識標記)。
我們設定:無按鍵為 0X01
按鍵二為 0X02
按鍵三為 0X04
按鍵四為 0X08
如按鍵二和按鍵三同時按下則為 0X06(0X02 OR 0X04 的結果)
Y 和 Z 辨識標記改為 0X03 以及 0X05,因為 0X79 和 0X7A 介於 XYZ
讀出值範圍內,怕產生衝突,參考下圖。

圖 37:改寫封包接收內容
按鍵 X 0X03 Y 0X05 Z

5.4 UART 讀出流程


28

開始

讀取一個
針對一個連接 Buffer
埠建立Input
找到
Buffer
找連接埠
Sleep
找不到

錯誤訊息

結束

圖 38:UART 讀 流程圖
此為一個 Java 接收程式分析資料的流程,先尋找連接埠,判斷
是否已經連接好,並針對連接埠開一個 InputBuffer Stream,並接收
資料。

讀出
下圖為程式持續讀 Buffer,每次讀取便印出 Buffer 大小以及 Buffer
內容。

圖 39:Buffer 讀取內容
29

分解讀出值
針對每次讀取的 Buffer,判斷是否有 X 標記或 Y 標記或 Z 標記,並
取得標記後面的各軸數值。
30

圖 40:Java 接收程式分析 XYZ

5.5 XYZ 三軸數 範圍


31

X方向移動

Z
43
X軸
105 X 43仰~105水平~170俯

170

圖 41:X 軸方向移動的範圍
圖 41 為一個 X 軸方向移動的變化,當 X 軸水平時,所偵測到的
數 為 105,X 軸上仰時,數 為 43,X 軸下俯時,偵測數 為 170

Y方向移動
Z
175 X

114 Y

Y軸
48 175仰~114水平~48俯

圖 42:Y 軸方向移動的範圍
圖 42 為一個 Y 軸方向移動的變化,當 Y 軸水平時,所偵測到的
數 為 114,Y 軸上仰時,數 為 175,Y 軸下俯時,偵測數 為 48
32

Z方向移動

X
203

141 Z Z軸
203仰~141水平~75俯

75

圖 43:Z 軸方向移動的範圍
圖 43 為一個 Z 軸方向移動的變化,當 Z 軸水平時,所偵測到的
數 為 141,Z 軸上仰時,數 為 203,Z 軸下俯時,偵測數 為 75

5.6 觸發鍵盤與滑鼠事件

5.6.1 觸發鍵盤
1. JAVA ROBOT
此類別用於為測試自動化、自運行演示程式和模擬滑鼠 和鍵盤控
制;本專題使用到的方法以及使用方法大略如下所示:

Try{
Robot robot =new Robot();
33

robot.KeyPress(int keycode); //按下給定的鍵


robot.KeyRelease(int keycode); //釋放給定的鍵

robot.MousePress(int buttons); //按下一個或多個滑鼠按鈕


robot.MouseRelease(int buttons); //釋放一個或多個滑鼠按鈕

robot.MouseMove(int x, int y); //將滑鼠指標移動到給定螢幕坐標


}Catch(AWTException awte){}

2. 鍵盤控制
使用者可針對遊戲所需用到的鍵盤進行設定,並使用開發板模擬
按鍵運作。
43
X 170 120 80 Z 205
KeyRelease
KeyPress
Y KeyPress KeyPress
105
175
155
KeyPress KeyRelease
140
130
KeyRelease
125
115
KeyPress
100
75
KeyPress

45

圖 44:鍵盤有效範圍
針對簡單的鍵盤控制,我們將三軸分為三個區塊,上圖,分別用
作不同的事件觸發,在這裡我們是將中間的區塊當作不作任何動作,
如果超越了中間區塊的範圍,就按某個按鍵。
34

圖 45
上圖,以 X 軸說明讀出值範圍介於 43~170,我們將 120 及 80 作
為觸發界線,當值大於 120,就按住鍵盤中某個按鍵(例如:上) ,當
小 於 80,就按住鍵盤中某個按鍵(例如:下),當 介於 120~80,
就放開鍵盤中某個按鍵(例如:上或下)

5.6.2 滑鼠控制
分為一般滑鼠及遊戲用滑鼠,一般滑鼠用來控制 Windows 介面,
遊戲滑鼠可針對任何視窗大小的遊戲作控制。
1. 一般滑鼠
35

游標持續往左移動
X 170 120 90
游標不動
Y
105
175

游標持續往上移動

130

游標不動 115

100

游標持續往下移動

45

圖 46:滑鼠移動有效範圍

上圖,以 XY 軸值定滑鼠指標移動的界線 ,當超過自訂的數 ,滑


鼠指標會往 X 或 Y 方向持續移動
2. 遊戲滑鼠

Y
36

175 0
65 400
110

65 400

45 800

圖 47:滑鼠範圍與視窗範圍轉換

3. MouseMove(640,400-(y-115)*400/65)
以 Y 軸為例:最高點為 175,最低點為 45,中心點為 110,中心
點距離最高點和最低點差 65,如果滑鼠要可以到達螢幕所有範圍,
將要把範圍放大 400/65,再加上中心點座標

5.6.3 觀測模式
1. 角度觀測
以 Y 軸來說:中心點到最高點和最低點差距 65,以角度換算,放大
90/65,所以運算式為 (Y-110)*90/65

Y 原始數值範圍 175 Y 角度 90

110 0

45 -90

圖 48:Y 軸數 轉換角度

2. XYZ 讀出
讀出 會持續往左移動
37

圖 49:Y 軸讀出 動態圖

繪圖原理
以單軸、5 個畫素為例:
下圖為存放 Y 軸數值的畫素陣列

Y_pixel[5]

圖 50:存放 Y 軸 陣列
Y 軸 持續讀入 50 70 100 130 170 150 120 90 60
我們以 0 為標準點,繪出相對位置,因此 Y 軸存入數值調整為 (Y 軸
數 -中心數 )
Y 軸存入數 為 -60 -40 -10 20 60 40 10 -20 -50
下圖顯示存入順序
由最右邊往左存入,到底在從最右邊開始
38

Y_pixel[5]

Step 1 0 0 0 0 -60

Step 2 0 0 0 -40 -60

Step 3 0 0 -10 -40 -60

Step 4 0 20 -10 -40 -60

Step 5 60 20 -10 -40 -60

Step 6 60 20 -10 -40 40

Step 7 60 20 -10 10 40

Step 8 60 20 -20 10 40

Step 9 60 -50 -20 10 40

圖 51:Y 軸讀出值存放順序
繪圖順序如下圖
39

Y_pixel[5] 繪圖順序

Step 1 0 0 0 0 -60 4 3 2 1 5

Step 2 0 0 0 -40 -60 3 2 1 5 4

Step 3 0 0 -10 -40 -60 2 1 5 4 3

Step 4 0 20 -10 -40 -60 1 5 4 3 2

Step 5 60 20 -10 -40 -60 5 4 3 2 1

Step 6 60 20 -10 -40 40 4 3 2 1 5

Step 7 60 20 -10 10 40 3 2 1 5 4

Step 8 60 20 -20 10 40 2 1 5 4 3

Step 9 60 -50 -20 10 40 1 5 4 3 2

圖 52:Y 軸繪圖順序
如下圖依照繪圖順序由左往右畫,因次可達到圖形由左移動的效果
40

Pixel 1 2 3 4 5

Step 1
0 0 0 0 -60

Step 2
0 0 0 -60 -40

Step 3
0 0 -60 -40 -10

Step 4
0 -60 -40 -10 20

Step 5
-60 -40 -10 20 60

Step 6
-40 -10 20 60 40

Step 7
-10 20 60 40 10

Step 8
20 60 40 10 -20

Step 9
60 40 10 -20 50

圖 53:繪出 Y 軸
此方法不用移動到陣列的值,只需改變每個 Pixel 對應到的數 ,較
有效率

3. 力道觀測
41

圖 54:Y 軸力道值動態圖
以 Y 軸為例:我們將前後兩筆 Y 的值相減並乘以一個自訂的常
數,可用來放大或縮小力道的敏感度。其繪圖方式如同 XYZ 觀測。
3D 觀測(JGL)
依 照 使 用 者 定 義 開 發 板 各 種 不 同 的 行 為 , 可 利 用 JGL(JAVA
OPENGL),繪出其 3D 中動作表現
舉一個我們定義的 Y 軸在空間中 3D 動作方式,其動作類似 Wii
Sport 裡 面 的 棒 球 遊 戲 , 打 者 可 以 再 揮 棒 之 前 任 一 旋 轉 球 棒 。

前方 X

前方

XZ 平面
42

前方 X

前方

XZ 平面

圖 55:Y 軸旋轉示意圖
以 Y 大於 0 來說(XZ 平面的上半部),如下圖測得數值:
43

圖 56:Y 軸旋轉示讀出
分析後結果,X 軸往上測得數值低,往下測得數值高,Z 軸往上
測得數值高,往下測得數值低,所以數值與行為對照,如下圖:
44

前方

X 軸大 Z 軸不變

X 軸不變 Z 軸大
X 軸不變 Z 軸小

X 軸小 Z 軸不變

圖 57:Y 軸旋轉 X 軸 Z 軸數值變化


俯瞰如下圖

X 軸小 Z 軸不變

X 軸不變 Z 軸大

X 軸不變 Z 軸小

X 軸大 Z 軸不變
45

X 軸小 Z 軸不變

X 軸不變 Z 軸大

X 軸不變 Z 軸小

X 軸大 Z 軸不變

圖 58:Y 軸旋轉 X 軸 Z 軸數值變化


因此將 X 讀出 轉為角度 x=-(x-105)*90/65 // 加負號 是為了統一往
上為正角度,往下為負角度
將 Z 讀出 轉為角度 z=(z-140)*90/65,之後再將角度對應到 JGL 旋
轉的度數
46

X 軸 90 度 0度 -90 度

對應到 JGL 90 度 0度 270 度

Z 軸 90 度 90 度

0度 0度

-90 度 270 度

圖 59:X 軸 Z 軸角度對應 JGL 旋轉角度


if (x >= 0) { //X 度數大於等於 0
mainCanvas.spinx = x;
} else { //X 度數小於 0
mainCanvas.spinx = 360 + x;
}
if zz >= 0) { //Z 度數大於等於 0
mainCanvas.spinz = zz;
} else { //Z 度數小於 0
mainCanvas.spinz = 360 + z;
}

在 JGL 裡我們對初始化為朝上的 Y 軸加以對 X 軸及 Z 軸旋轉

myGL.glRotatef(spinz, 0.0f, 0.0f, 1.0f);//對 Z 軸旋轉


myGL.glRotatef(spinx, 1.0f, 0.0f, 0.0f);//對 X 軸旋轉
47

//畫出方向朝上的 Y 軸
myGL.glBegin (GL.GL_LINES);
myGL.glVertex3f (0, 0, 0);
myGL.glVertex3f (0, 2, 0);
myGL.glEnd ();

此為開發板 Y 軸
前方

對 X 軸旋轉

JGL 座標系統 X 軸

對 Z 軸旋轉

JGL 座標系統 Z 軸

圖 60:JGL Y 軸對 X 軸 Z 軸旋轉方式
48

第 6章

結論與未來發展

6.1 結論
本專題利用到 Zigbee 與 G Sensor 的結合來呈現遊戲控制的應用,
從 Wii 遊戲機中模仿並觀察其缺點,並發展更多不同的互動式遊戲
控 制 應 用 ; 傳 統 的 遊 戲控制只是利用鍵盤來操作,而 Zigbee G-
sensor Device 經由我們開發的介面可以取代原有的鍵盤與滑鼠,利
用動態感測功能,使 G-Sensor 感測各軸角加速度,讓玩家可以透過
各種操作裝置的方式,更直覺的享受到遊戲的臨場感。
Zigbee 無 線 通 訊 逐 漸的 被大 家需 求, 結合 Zigbee 的 G Sensor
Device 更可應用於多種產品,像是計步器,傳統機械式計步器因精
確度不高,容易造成誤判;而 G-Sensor 利用動態感測功能,以測量
人體上下運動來計算走路或跑步的步數以計算出路程,並可藉由此
步數換算出消耗的卡路里,另外,打擊樂器節奏及音量控制,利用
G-Sensor 的動態感測功能,藉由揮動手持設備來控制對樂器的節奏
快慢及音量大小做控制,甚至是當作指揮棒的教學,也是很好的發
揮;Zigbee G-Sensor 甚至還可以發展到其他的不同地方上,像是土
石流感測、居家老人照顧、橋樑損壞防護、病患活動量減測…等。
科技的進步,帶給我們很多的方便,和生活品質的提升,我們專
題研究的想法,是為了要改善人們享樂的品質,帶給大家不同於以
往的舒壓方式,也希望這次專題的研究有助於普及化體感遊戲操作
以及人類文明的推進。

6.2 未來發展
1. 目前能玩的遊戲有限,像大型遊戲還無法與 Zigbee G-Sensor 開發
板完整結合,若加以改善,渴望能適應於各種遊戲中。
2. G-Sensor 的敏感度若能更好,能夠提高遊戲的精確性。
3. 結合紅外線定位,讓開發板能 有更多的動作。
4. 能 自己開發專屬的遊戲。
5. 開發互動式教學遊戲,例如:打鼓教學、指揮教學。
6. 改善開發板外觀,讓使用者能方便使用,操作於手上。
49

第 7章

參考文獻

[1] EEVK013 Document, 2007/03/22

[2] EST_EVB_README02 Document, 2007/04/09

[3] EST Wireless Network Module, Product Specification Document,


Feb. 16, 2007

[4] Freescale Semiconductor, Accelerometer Demonstration With the


Sensor Applications Reference Design (SARD)

[5] Freescale Semiconductor, MC13192 Accelerometer Demostration


Program Quick Start Guide

[6] Sensor Applications Reference Design (SARD) User’s Manual,


10/2004

[7] Freescale Semiconductor, Demonstration Operation Running the


Packet Error Rate, Wireless UART, Accelerometer, Range, and Lighting
Demonstration Applications, 09/2004

[8] Freescale Semiconductor, Application Note, Document Number:


AN3231, 10/2006

[9] Simple Media Access Controller (SMAC) User’s Guide, Document


Number: SMACRM Rev. 1.4, 10/2006

[10] ZigBee Alliance, ZigBee Specification. Version 1.0 ZigBee


Document 053474r06, December 14th, 2004.

[11] Z-Stack User’s Guide for the Freescale MC13193 Evaluation Kit

[12] ZigBee Technology and Device Design, Department of


Microelectronics Brno University of Technology
50

You might also like