可攜式GPS軌跡記錄器
一、專案簡介
本專案旨在設計並製作一套可攜式GPS軌跡記錄器,利用Arduino主控板搭配NEO-6M GPS模組,將即時取得的經緯度與時間資料記錄於SD卡中,並以CSV格式儲存,方便後續資料分析與應用。整套系統以18650鋰電池供電,透過升壓模組確保運作穩定,達到無線與便攜的目標。
二、系統架構
1. 硬體組成
| 元件名稱 | 型號/規格 | 功能說明 |
|---|---|---|
| 主控板 | Arduino UNO/Nano | 控制與資料處理 |
| GPS模組 | NEO-6M | 取得定位與時間資料 |
| SD卡模組 | SPI介面 | 資料儲存 |
| 鋰電池 | 18650(3.7V, 2200mAh) | 提供電力 |
| 升壓模組 | 3.7V→5V(如MT3608) | 穩定供電至5V |
| 連接線 | 杜邦線 | 電路連接 |
2. 系統連接圖
[18650鋰電池]
↓
[升壓模組 (3.7V→5V)]
↓
[Arduino] ←→ [NEO-6M GPS模組]
↓
[SD卡模組]
三、電路接線說明
| 模組 | 連接到Arduino腳位 |
|---|---|
| NEO-6M VCC | 5V |
| NEO-6M GND | GND |
| NEO-6M TX | D4(軟體序列埠RX) |
| NEO-6M RX | D3(軟體序列埠TX) |
| SD卡 VCC | 5V |
| SD卡 GND | GND |
| SD卡 MOSI | D11 |
| SD卡 MISO | D12 |
| SD卡 SCK | D13 |
| SD卡 CS | D10 |
四、軟體設計
1. 使用函式庫
- TinyGPS++:解析GPS NMEA資料
- SD:SD卡操作
- SPI:SPI通訊
- SoftwareSerial:額外序列埠
2. 程式邏輯流程
- 初始化SD卡與GPS模組
- 建立CSV檔案並寫入標題行
- 持續讀取GPS模組資料
- 每當GPS位置資料更新時,解析經緯度與UTC時間
- 將資料以CSV格式寫入SD卡
- 重複步驟3~5,實現即時紀錄
3. 程式碼範例
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <SPI.h>
#include <SD.h>
SoftwareSerial gpsSerial(4, 3); // RX, TX
TinyGPSPlus gps;
const int chipSelect = 10; // SD卡CS腳位
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
if (!SD.begin(chipSelect)) {
Serial.println("SD卡初始化失敗");
while (1);
}
// 建立CSV檔案並寫入標題
File dataFile = SD.open("gpslog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("Date,Time,Latitude,Longitude");
dataFile.close();
}
}
void loop() {
while (gpsSerial.available() > 0) {
gps.encode(gpsSerial.read());
if (gps.location.isUpdated()) {
String dataString = "";
// 日期
dataString += String(gps.date.year()) + "-" + String(gps.date.month()) + "-" + String(gps.date.day()) + ",";
// 時間
char timeBuffer[9];
sprintf(timeBuffer, "%02d:%02d:%02d", gps.time.hour(), gps.time.minute(), gps.time.second());
dataString += String(timeBuffer) + ",";
// 經度與緯度
dataString += String(gps.location.lat(), 6) + "," + String(gps.location.lng(), 6);
// 寫入SD卡
File dataFile = SD.open("gpslog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
delay(1000); // 每秒記錄一次
}
}
}
五、成果展示
- 資料格式: 檔案名稱:gpslog.csv 內容範例:
Date,Time,Latitude,Longitude
2025-05-20,14:23:10,25.047800,121.531900
2025-05-20,14:23:11,25.047805,121.531905
...
- 可用工具:
- 直接用Excel、Google Sheets開啟分析
- 可將資料匯入Google地圖或其他地理資訊系統軟體,進行軌跡顯示
六、注意事項與建議
- 18650鋰電池需加保護板,確保安全
- 升壓模組應選用輸出電流足夠(建議1A以上)
- SD卡建議格式化為FAT32
- 若需更長續航可並聯多顆電池
- 可依需求擴充紀錄內容(如速度、海拔等)
七、未來展望
- 增加無線傳輸功能(如LoRa、藍牙、WiFi),實現即時上傳
- 加入OLED/LCD顯示即時資訊
- 結合移動偵測,節省儲存空間與電力
- 應用於戶外活動紀錄、車輛追蹤、科學實驗等多元場域
八、參考資料
- TinyGPS++ Library
- Arduino SD Library
- Instructables - Arduino GPS Data Logger
- Maker Portal - Arduino GPS Logger
結論: 本專案成功實現以Arduino為核心的無線GPS軌跡記錄器,具備低成本、易擴充、便攜等特點,能有效記錄移動路徑與時間資訊,並以標準CSV格式儲存,方便後續資料分析與應用。