專案簡介
這是一個飛行船地面站即時監控系統的 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事件接收資料 - 處理
IOError與SecurityError例外
資料流程:
- Timer 觸發 → 發送 “#” 請求
- Socket 接收資料 →
socketDataHandler() - 解析資料格式 →
updateInfomation() - 更新各區域 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 個欄位:
- 度 (D)
- 分 (M)
- 秒的萬分之一 (S×10000)
- 方向 (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 位置與導航狀態
- 提供清晰的儀表板介面
專案範圍:
- 飛行船端(Microchip 嵌入式系統)
- 溫度、濕度、氣壓感測
- GPS 定位
- 姿態感測(三軸加速度計、陀螺儀)
- GPRS 資料傳輸
- 地面站端(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! 🚁