專案簡介

這是一個飛行船地面站即時監控系統的 DEMO,用來監控飛行船的各種飛行參數與環境資料。

核心功能:

  • 飛行船上的 Microchip 嵌入式系統透過 GPRS 傳輸即時飛行資料
  • 地面站使用 Flash/ActionScript 開發即時監控介面
  • 顯示 39 個飛行參數:GPS 位置、姿態、環境感測、馬達輸出等
  • 自動重連機制,確保連線穩定性

技術棧: Microchip(C語言)+ GPRS 通訊 + Flash/ActionScript 3.0 + Socket 通訊


🎯 系統架構

整體架構圖

┌─────────────────────────────────────────────────────────────┐
│  飛行船 (Microchip 嵌入式系統)                                    │
│  ├─ GPS 模組                                                   │
│  ├─ 氣壓計 / 溫度感測器                                          │
│  ├─ 三軸加速度計                                                │
│  ├─ 姿態感測器 (Heading, Pitching, Rolling)                    │
│  ├─ 自動導航演算法                                              │
│  └─ GPRS 模組                                                  │
│           ↓ GPRS 無線傳輸                                       │
└─────────────────────────────────────────────────────────────┘
                       ↓
┌─────────────────────────────────────────────────────────────┐
│  伺服器 (www.wtech.com.tw:19999)                               │
│  ├─ 接收飛行船 GPRS 資料                                        │
│  └─ 轉發給地面站                                               │
└─────────────────────────────────────────────────────────────┘
                       ↓ TCP Socket
┌─────────────────────────────────────────────────────────────┐
│  地面站 (Flash/ActionScript)                                   │
│  ├─ Socket 連線監控                                            │
│  ├─ 即時資料解析與顯示                                          │
│  ├─ 儀表板介面                                                 │
│  └─ 飛行計時功能                                               │
└─────────────────────────────────────────────────────────────┘

💡 技術實作

1. 通訊機制

通訊協定:TCP Socket

地面站每 500ms 發送請求 # 給伺服器,伺服器回傳飛行船的即時資料:

請求格式:#
回應格式:*資料1,資料2,資料3,...,資料39!

資料格式:

  • 開頭:*
  • 分隔符號:, (逗號)
  • 結尾:!
  • 39 個欄位的飛行資料

自動重連機制:

  • 使用 Flash Timer 每 500ms 檢查連線狀態
  • 如果斷線,自動嘗試重新連線
  • 確保地面站與飛行船保持持續通訊

2. 飛行資料監控(39個欄位)

系統監控的資料分為 七大類

A. 控制模式 (3個欄位)

  • 搖控/自動模式:飛行船是由遙控器控制還是自動導航
  • 地控/自動模式:地面站控制或自動
  • 目標點編號:目前飛向第幾個導航點

B. GPS 位置資訊 (8+8=16個欄位)

現在位置:

  • 經度:度 (D) / 分 (M) / 秒 (S) / 東經或西經 (E/W)
  • 緯度:度 (D) / 分 (M) / 秒 (S) / 北緯或南緯 (N/S)

目標位置:

  • 目標經度 / 目標緯度(格式同上)
  • 目標高度

C. 姿態資訊 (3個欄位)

  • Heading(航向):飛行船指向的方位角(0-360度)
  • Pitching(俯仰角):機頭上仰或下俯的角度
  • Rolling(翻滾角):機身左右傾斜的角度

D. 環境感測 (4個欄位)

  • 氣壓值:單位百帕 (hPa),用於計算高度
  • 溫度:單位度 (°C)
  • 三軸加速度:X / Y / Z 軸加速度 (AccX, AccY, AccZ)

E. 導航判斷 (6個欄位)

飛行船自動導航演算法的判斷結果:

  • 左右轉角度 (TURN_L_R_D)
  • 升降角度 (TURN_U_D_D)
  • 左或右轉 (TURN_LEFT_OR_RIGHT):-1=左轉, +1=右轉
  • 升或降 (TURN_UP_OR_DOWN):-1=下降, +1=上升
  • 高度差值 (HEIGHT_D):目標高度與現在高度的差距
  • 平面距離 (DISTANCE_2D):飛行船與目標點的 2D 平面距離

F. 馬達輸出 (4個欄位)

飛行船的控制面與動力輸出:

  • 升降舵角度 (SERVO_UP_DOWN)
  • 方向舵角度 (SERVO_LEFT_RIGHT)
  • 馬達推力 (MOTOR_PUSH_POWER)
  • 後方水平翼 (SERVO_BACK)

G. 高度與氣壓 (1個欄位)

  • 現在高度 (ALT):由氣壓值計算得出

3. Flash 地面站介面

多區域儀表板設計:

地面站介面分為多個顯示區域 (TL, TC, TR, TL_2, TC_2, TR_2, CL, CC, RMAP):

左側 (TL, CL):

  • 三軸加速度:AccX, AccY, AccZ
  • 目前高度:從氣壓計算
  • 氣壓值:百帕 (hPa)

中央 (TC, CC, RMAP):

  • 航向 (Heading):顯示飛行船朝向
  • 溫度:環境溫度
  • 地圖顯示
    • 航向指示
    • 轉向角度
    • 目標點編號
    • 目標高度
    • 控制模式(搖控/自動)
    • 平面距離

右側 (TR, TR_2):

  • 俯仰角 (Pitching)
  • 翻滾角 (Rolling)
  • 當前時間:HH:MM:SS
  • 飛行時間:累計飛行時間
  • 伺服馬達輸出
    • 升降舵角度
    • 方向舵角度
    • 馬達推力
    • 後方水平翼角度

下方 (TL_2, TC_2):

  • GPS 座標
    • 現在經度 / 緯度
    • 目標經度 / 緯度
  • 導航指示
    • 轉向指示(L/R + 角度)
    • 升降指示(U/D + 角度)
    • 高度差
    • 平面距離

4. 飛行計時功能

Start / Reset 按鈕:

  • Start 按鈕:開始計時,記錄起飛時間
  • Reset 按鈕:重置計時,結束本次飛行記錄
  • 飛行時間顯示:HH:MM:SS 格式,每 500ms 更新

計時邏輯:

  • 按下 Start 後,記錄當前時間為起飛時間
  • 持續計算 (現在時間 - 起飛時間) 並顯示
  • 按下 Reset 後停止計時,飛行時間歸零

5. 資料解析流程

從 Socket 接收到顯示的完整流程:

1. Socket 接收資料:
   "*0,1,2,1200,23,45,1234,N,121,30,5678,E,1020,23,45,1234,N,121,30,5678,E,1500,90,5,-3,45,10,1,1,300,120,150,180,25,120,15,20,80,25!"

2. 解析資料:
   - 移除前綴 "*" 和後綴 "!"
   - 用逗號 "," 分割成陣列
   - 得到 39 個欄位的數值

3. 資料轉換:
   - 加速度除以 100 (因為傳輸時放大了 100 倍)
   - 氣壓除以 100 (轉換為百帕單位)
   - 溫度除以 10 (轉換為度)

4. 更新介面:
   - 呼叫各區域的 update_text() 函式
   - 傳入對應的資料欄位
   - 即時刷新顯示

5. 記錄時間:
   - 更新「最後更新時間」欄位
   - 確認資料是否即時

6. ActionScript 技術重點

事件驅動架構:

// 自定義事件類別
StationEvent.STATION_CONNECT    // 伺服器連線完成
StationEvent.STATION_DISCONNECT // 伺服器斷線
StationEvent.STATION_DATA       // 接收到資料

Socket 通訊:

  • 繼承 Flash Socket 類別
  • 實作 Timer 機制每 500ms 發送請求
  • 監聽 ProgressEvent.SOCKET_DATA 事件接收資料
  • 處理 IOErrorSecurityError 例外

資料流程:

  1. Timer 觸發 → 發送 “#” 請求
  2. Socket 接收資料 → socketDataHandler()
  3. 解析資料格式 → updateInfomation()
  4. 更新各區域 UI → update_text()

🎬 技術亮點

1. 即時通訊系統

挑戰:

  • 飛行船在空中,GPRS 訊號不穩定
  • 需要確保地面站持續接收資料
  • 斷線時要能自動恢復

解決方案:

  • 自動重連機制:每 500ms 檢查連線狀態,斷線立即重連
  • 逾時設定:Socket timeout 設為 1000ms,快速偵測斷線
  • 資料驗證:檢查回應格式 (* 開頭),確保資料正確

2. 多層次資料轉換

資料傳輸優化:

為了減少 GPRS 傳輸量,飛行船端會將資料放大整數倍再傳輸:

  • 加速度 × 100:例如 1.23 m/s² → 傳輸 123
  • 氣壓 × 100:例如 10.20 hPa → 傳輸 1020
  • 溫度 × 10:例如 25.3°C → 傳輸 253

地面站接收後再除回原始精度,節省傳輸頻寬。


3. GPS 座標格式轉換

GPS 資料格式:度分秒 (DMS)

GPS 模組輸出的格式為:

  • 經度:121°30’56.78”E
  • 緯度:23°45’12.34”N

傳輸時拆成 4 個欄位:

  1. 度 (D)
  2. 分 (M)
  3. 秒的萬分之一 (S×10000)
  4. 方向 (N/S 或 E/W)

地面站重組顯示:

var now_lon:String = dataArray[NOW_LON_D] + "°" +
                     dataArray[NOW_LON_M] + "." +
                     dataArray[NOW_LON_S] + "'";

顯示結果:121°30.5678'


4. 儀表板 UI 設計

視覺化設計考量:

  • 分區顯示:將 39 個資料分類到不同區域,避免資訊過載
  • 關鍵資訊放大:航向、高度、GPS 位置使用大字體
  • 顏色編碼:正常/警告/危險使用不同顏色
  • 動畫效果:數值變化時有平滑過渡

5. Flash/ActionScript 3.0 技術

為什麼選擇 Flash?(2015年時期)

  • 跨平台:Windows / macOS / Linux 都能執行
  • 豐富的視覺效果:適合製作儀表板介面
  • Socket 支援:原生支援 TCP Socket 通訊
  • 即時更新:Timer 機制可以精準控制更新頻率
  • 開發快速:視覺化編輯器 + ActionScript 程式碼

技術特點:

  • 使用 ActionScript 3.0 (AS3),物件導向語言
  • 事件驅動架構:清晰的事件流程
  • Flash IDE 製作 UI,程式控制行為

📹 影片展示

地面站即時監控示範

記錄地面站介面即時接收飛行資料的過程:

地面站監控系統展示影片


🎯 專案定位

專案背景

這是一個飛行船地面站監控系統的 DEMO 專案,用來即時監控飛行船的飛行狀態與環境資料。

專案目標:

  • 即時監控飛行船的溫度、濕度、氣壓等環境資料
  • 顯示飛行船的飛行姿態(航向、俯仰角、翻滾角)
  • 監控 GPS 位置與導航狀態
  • 提供清晰的儀表板介面

專案範圍:

  1. 飛行船端(Microchip 嵌入式系統)
    • 溫度、濕度、氣壓感測
    • GPS 定位
    • 姿態感測(三軸加速度計、陀螺儀)
    • GPRS 資料傳輸
  2. 地面站端(Flash/ActionScript)
    • 即時資料接收與顯示
    • 儀表板介面設計
    • 飛行計時與記錄

系統整合挑戰

1. 嵌入式系統資源限制

  • Microchip 微控制器記憶體有限
  • 需要精簡資料格式
  • 優化傳輸頻率

2. GPRS 通訊不穩定

  • 飛行船在空中,訊號會變動
  • 需要處理斷線與重連
  • 資料可能延遲或遺失

3. 即時性要求

  • 地面站需要即時顯示飛行狀態
  • 延遲不能超過 1 秒
  • 更新頻率 500ms

4. 多種感測器整合

  • GPS、氣壓計、加速度計、姿態感測器
  • 資料格式不一致
  • 需要統一封裝

🏆 專案成果

技術成果

  • 完整的地面站系統:39 個飛行參數即時監控
  • 穩定的通訊機制:自動重連,確保資料持續傳輸
  • 清晰的儀表板介面:分區顯示,資訊易於閱讀
  • 飛行計時功能:記錄每次飛行的時間

經驗收穫

嵌入式系統開發:

  • 學會在資源受限的環境下設計系統
  • 理解感測器資料融合的概念
  • 掌握 GPRS 通訊協定

即時系統設計:

  • Socket 通訊的實作與除錯
  • 處理網路不穩定的策略
  • 資料解析與容錯機制

跨領域整合:

  • 嵌入式(Microchip C)+ 網路通訊(GPRS)+ 前端介面(Flash)
  • 從硬體到軟體的完整開發流程
  • 系統整合與測試的經驗

💡 專案總結

「無人飛行船地面站即時監控系統」是我的學士畢業論文專案,讓我學到:

技術層面

  • Microchip 嵌入式開發:GPS、感測器整合、自動導航演算法
  • GPRS 無線通訊:資料封包設計、容錯機制
  • Flash/ActionScript:Socket 通訊、儀表板 UI 設計
  • 即時系統:多執行緒、Timer 控制、資料解析

專案管理

  • 系統整合:硬體 + 軟體 + 通訊的完整流程
  • 測試與除錯:處理 GPRS 不穩定、資料錯誤等問題
  • 介面設計:清晰易讀的儀表板布局

經驗收穫

這個專案讓我體會到:即時監控系統的關鍵在於可靠性。再完美的功能,如果通訊不穩定、資料會遺失,系統就失去意義。因此在設計時就要考慮:

  • 斷線怎麼辦?(自動重連)
  • 資料錯誤怎麼辦?(格式驗證)
  • 延遲太久怎麼辦?(逾時機制)
  • 使用者看不懂怎麼辦?(清晰的介面設計)

這些經驗也影響了我後續在工業自動化領域的開發,讓我更注重系統的穩定性與可靠性。


專案資訊

  • 專案名稱:無人飛行船地面站即時監控系統
  • 專案類型:飛行監控 DEMO
  • 技術棧:Microchip(嵌入式)+ GPRS + Flash/ActionScript 3.0
  • 開發時間:2015 年
  • 監控資料:39 個飛行參數(GPS、姿態、環境、控制)
  • 監控項目:溫度、濕度、氣壓、飛行姿態、GPS 位置

Happy Coding! 🚁