▶ X:−0.12g   Y:+0.00g   Z:+0.63g   TOTAL:0.64g ⚠ TRIGGER DETECTED — TOTAL ACC = 1.00g 超過警報閾值 ▶ X:+0.10g   Y:+0.24g   Z:+1.00g   VECTOR LOCKED 📡 MPU-6050 I²C OK   採樣率 100 Hz   GPIO 警報就緒 ▶ X:−0.12g   Y:+0.00g   Z:+0.63g   TOTAL:0.64g ⚠ TRIGGER DETECTED — TOTAL ACC = 1.00g 超過警報閾值 ▶ X:+0.10g   Y:+0.24g   Z:+1.00g   VECTOR LOCKED 📡 MPU-6050 I²C OK   採樣率 100 Hz   GPIO 警報就緒
地震學期末報告 · 2026

樹莓派
自製地震儀
完整實作報告

Raspberry Pi DIY Seismometer — Full Implementation Guide

從 UART 終端機接線、Windows 驅動排錯、Wi-Fi 設定,到 MPU-6050 三軸加速度計程式撰寫, 完整記錄樹莓派地震儀的建置歷程,並展示期末實驗的量測成果。

Raspberry Pi 3/4/5 MPU-6050 I²C Python / matplotlib MobaXterm UART 即時警報系統 三軸加速度分析
SCROLL
6
章節步驟
完整教學
3
量測軸向
X · Y · Z
1.0g
觸發閾值
總合力
10s
事件緩衝
歷史視窗

Step-by-Step Tutorial

硬體設定與系統配置

依照老師教學網站整理的六大步驟,從接線到 MPU6050 實作一步到位,
適用 Raspberry Pi 3 / 4 / 5。

01
USB-to-TTL 6色線硬體接線
UART HARDWARE  ·  GPIO 接線定義

標準的 6 芯 FTDI / PL2303 線路中,每根杜邦線顏色對應固定訊號。 與樹莓派通訊時,僅需接 3 條線即可運作。

顏色訊號樹莓派腳位備註
黑色GNDPin 6 (GND)必接
白色RXDPin 8 (TXD / GPIO 14)必接(交叉)
綠色TXDPin 10 (RXD / GPIO 15)必接(交叉)
黃色RTS懸空不接
藍色CTS懸空不接
紅色5 VPin 2 (5V)⚠ 通常懸空;僅無外接電源時才接
⚠ 注意
TX 接 RX、RX 接 TX,需交叉連接,切勿同名對接。
02
解決 Windows 驅動程式錯誤
PL2303 / FTDI  ·  裝置無法啟動 代碼 10

若系統顯示「USB-Serial Controller D 驅動程式錯誤」或「裝置無法啟動(代碼 10)」,依序嘗試以下方法:

方法 A:下載正確驅動程式
  • 前往 Prolific 官網下載 PL23XX-M_LogoDriver 壓縮檔(切勿只下載 SDK 包)
  • 必須先完整解壓縮為普通資料夾,再以系統管理員身份執行 .exe
✕ 常見錯誤
直接在 .zip 內執行 .exe 會出現「系統找不到指定的檔案 (0x2)」,務必先解壓縮。
方法 B:手動降版(適合舊版晶片)
  • 開啟「裝置管理員」→ 問題裝置上按右鍵「更新驅動程式」
  • 選「瀏覽我的電腦以尋找驅動程式」→「讓我從可用清單挑選」
  • 選擇 2014 年或更早的版本,即可解決代碼 10 錯誤
03
MobaXterm 序列埠設定
115200 bps  ·  Serial Session

驅動正常載入後,系統會分配一個通訊埠(如 COM4)。在 MobaXterm 的 Session → Serial 選單中設定:

設定項目
Serial port對應的 COM(例:COM4)
Speed (bps)115200
Flow ControlNone

成功連線後終端機顯示:

terminal output
Debian GNU/Linux 13 raspberry1 ttyS0
raspberry1 login: sysop
Password: ********
💡 提示
若 COM 埠未出現,請確認驅動已正確安裝,並重新插拔 USB-TTL 線。
04
排除掉壓警告 (Undervoltage)
hwmon1: Undervoltage detected!  ·  電源管理

當輸入電壓跌破 4.63 V 安全底線時,系統會持續提示此警告,可能造成降頻、死機或記憶卡毀損。

常見原因
  • 不小心將 UART 紅線 (5V) 接上,嘗試透過電腦 USB 供電
  • Type-C 電源線內阻過大或線身太長導致壓降
  • 變壓器額定功率不足(未達 5V/3A 或 5V/5A)
解決方法
  • 拔掉 UART 上的紅線,僅保留 GND、RX、TX
  • 使用樹莓派官方推薦的專用變壓器進行主體供電
  • 改用高品質、粗銅導體的短接 Type-C 充電線
05
終端機 Wi-Fi 管理設定
nmtui  ·  raspi-config  ·  nmcli

在沒有顯示器時,透過以下三種方式快速連上 Wi-Fi:

① nmtui(推薦,視覺化文字選單)
bash
sudo nmtui

最適合新版系統(Bookworm+),具備視覺化文字選單,不易打錯密碼。

② raspi-config(傳統選單)
bash
sudo raspi-config

可設定國家代碼(如 TW),避免 5 GHz 連線問題。

③ nmcli(底層指令調試)
bash
sudo nmcli device wifi
⚠ 連接公開網路(無密碼)
連接如「CWA-FREE」的 Open 網路時,不要在 nmcli 指令中帶入 password 參數,否則會報錯 key-mgmt: property is missing
06
MPU6050 加速度計實作
I²C  ·  mpu6050-raspberrypi  ·  Python
必要前置步驟
① 開啟 I²C 介面
sudo raspi-config
# → Interface Options → I2C → Enable
② 確認 MPU6050 位址(應顯示 0x68)
sudo i2cdetect -y 1
③ 安裝 Python 套件
pip install mpu6050-raspberrypi
讀取三軸加速度 · 陀螺儀 · 溫度
python — sensor_read.py
import time
from mpu6050 import mpu6050

# 初始化 MPU6050,預設 I2C 位址 0x68
try:
    sensor = mpu6050(0x68)
    print("成功初始化 MPU6050!")
except Exception as e:
    print(f"無法初始化:{e}")
    exit()

print("開始讀取資料,按 Ctrl+C 結束...\n")
try:
    while True:
        accel = sensor.get_accel_data()   # 三軸加速度 (m/s²)
        gyro  = sensor.get_gyro_data()    # 三軸角速度 (deg/s)
        temp  = sensor.get_temp()         # 晶片溫度 (°C)

        print("=" * 50)
        print(f"加速度 → X:{accel['x']:.2f}  Y:{accel['y']:.2f}  Z:{accel['z']:.2f} m/s²")
        print(f"角速度 → X:{gyro['x']:.2f}   Y:{gyro['y']:.2f}   Z:{gyro['z']:.2f} deg/s")
        print(f"溫度   → {temp:.1f} °C")
        time.sleep(0.5)   # 每秒採樣 2 次
except KeyboardInterrupt:
    print("\n程式已停止。")
💡 單位換算
MPU6050 預設量程 ±2g,raw 值需除以 16384 得到以 g 為單位的加速度。

System Architecture

系統運作流程

從感測到警報,全自動化執行,無需人工介入。

🔩
硬體感測
MPU-6050 100 Hz 三軸加速度
📡
I²C 傳輸
原始數據送至 RPi GPIO
🐍
Python 處理
合力計算、滾動緩衝、閾值判斷
⚠️
警報觸發
LED 閃爍 + 蜂鳴器鳴叫
📊
資料儲存
事件前後 10 s 寫入 CSV
📈
視覺化
matplotlib 時序圖 + 3D 向量

Hardware

實體成果:硬體組裝

以麵包板快速搭建原型,無焊接即完成感測電路,Raspberry Pi 透過 GPIO I²C 直接驅動 MPU-6050。

麵包板:MPU-6050 加速度計、LED 指示燈、蜂鳴器接線
感測器模組
麵包板電路配置
MPU-6050 藍色模組插入麵包板中央,四色杜邦線(VCC / GND / SCL / SDA)接至 Raspberry Pi GPIO。 左側配備 LED 指示燈(超閾值閃爍)與蜂鳴器(同步鳴叫),構成聲光雙重警報機制。
Raspberry Pi 4 主板:紅色 PWR LED 亮起,GPIO 已接線
主控單元
Raspberry Pi 4 主板
右下角紅色 PWR 燈亮起表示系統正常上電。GPIO 排針已連接至麵包板, 開機後自動執行 Python 監控程式,以 I²C 匯流排持續讀取 MPU-6050 數據。

Experimental Results

實驗成果:量測數據分析

當合力加速度 ≥ 1.0 g 時觸發警報,系統自動記錄前後 10 秒歷程並輸出時序圖與 3D 力向量圖。

10 秒加速度歷程圖
時間序列分析
10 秒加速度歷程圖
以觸發時刻(T = 0)為基準,向前追溯約 5 秒。Z 軸(鉛直)維持 ~0.6 g, X 軸在 T ≈ −2.5 s 出現最大振幅 ±0.7 g 的衝擊峰值, 合力(紅線)在 T = 0 突破 1.0 g 警報閾值(紅色虛線),系統成功觸發。
觸發瞬間 3D 力向量圖
三維向量分析
觸發瞬間 3D 力向量
觸發瞬間三軸分量:X:+0.10gY:+0.24gZ:+1.00g。 合力向量幾乎垂直指向 Z 軸(重力方向),水平分量甚小, 顯示此次觸發事件為垂直方向近場振動所引起。

專案總結與展望

本專案依照老師教學步驟,成功完成 UART 接線、驅動排錯、Wi-Fi 設定與 MPU-6050 實作, 並在此基礎上開發即時地震監測程式,實現聲光警報、滾動緩衝記錄與自動化數據視覺化功能。 量測結果顯示系統能正確辨識垂直方向近場振動,驗證了硬體電路與軟體演算法的正確性。

UART 終端機成功連線
PL2303 驅動問題排除
Wi-Fi 無頭模式設定
MPU-6050 I²C 讀取
三軸即時加速度量測
可調閾值觸發警報
10 秒滾動緩衝記錄
GPIO 聲光雙重警報
matplotlib 時序圖輸出
3D 力向量視覺化

未來方向:換用高靈敏度 MEMS 地震計、接入 TSMIP 即時資料流進行比對, 或部署至戶外固定點進行長時間環境背景噪聲研究。