Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Raspberry Shake - 用 Raspberry Pi 與 Python 偵測地震和...

Raspberry Shake - 用 Raspberry Pi 與 Python 偵測地震和監控地球活動

這是我們在 PyCon Taiwan 2025 的分享,主要介紹 Raspberry Shake 地震盒子專案 。
https://tw.pycon.org/2025/zh-hant/conference/talk/331

Raspberry Shake 是一個開源的科學專案,一般使用者可以隨插即用,或是給學校與科學人士做二次開發。

本次分享會說明:
* 震動量測介紹
* 什麼是 Raspberry Shake?
* 測量地震所需硬體
* Raspberry Shake 快速入門
* rsudp(Raspberry Shake UDP) 和 Python
* 未來專案方向

歡迎大家一起成為 shaker~

Avatar for 台灣樹莓派

台灣樹莓派 PRO

May 21, 2026

Video

More Decks by 台灣樹莓派

Other Decks in Technology

Transcript

  1. 姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 —

    你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。
  2. • 地震的能量會透過地震波向外傳播出去 • 實體波分為 P 波和 S 波 • P

    波介質振動方向與震波傳播方向平行 ( 速度快 ) • S 波介質振動方向與震波傳播方向垂直 ( 傷害大 ) 什麼是地震波? https://www.ncree.org/safehome/ncr01/pc4_3.htm
  3. • Geophone( 地震儀 / 地震檢波器 ) 是一種將地面 運動轉換為電壓的感測器 • 每次的電壓變化量視為一個

    count, 數值和地面運 動量成比例 如何量測地震波 ? https://reurl.cc/rYkLzZ
  4. • 需要多個站台 , 個別計算 P 波和 S 波的時間差 如何定位震央 ?

    https://www.mtu.edu/geo/community/seismology/learn/earthquake-epicenter/
  5. • 初始震央位置為估計值 , 經過多次回合計算最佳解 • 實務上會由定位程式 ( 如 SeisComP) 和地球模型

    ( 如 IASP91) 完成 再利用三角測量估計震央 / 震源位置 https://www.mtu.edu/geo/community/seismology/learn/earthquake-epicenter/
  6. • 震度 (Intensity) 是地面上所感受到的振動程度 • 地震儀的 raw 數值經儀器響應後轉為物理量 ( 速度

    / 加速度 ) 如何計算地震震度 ( 級數 )? https://eew.earthquake.tw/?act=eew_detail&identifier=1140922
  7. • SM-24 地震檢波感測器 , 可量測垂直的振動變化 • 2ms/24-bit 取樣 , 適合頻率

    10Hz-240Hz 的應用 SM-24 Geophone https://core-electronics.com.au/guides/geophone-raspberry-pi/
  8. ShakePi 地震盒子 Geophone SM-24 PoE HAT Raspberry Pi 4 10

    通道 32 位高精密 ADC 特製防水盒
  9. • 偵測 10Hz 以上頻段的地震儀只能觀測局發地震 (Local earthquake) • 遠震 (Teleseism) 和

    P/S 波 , 表面波等通常會在 0.1Hz~10Hz 之間 • 專業測站需使用高精度的寬頻地震儀 SM-24 硬體限制
  10. • 2009 年在巴拿馬註冊 OSOP 公司 • 2016 年 Kickstarter 發起

    Personal Seismograph 專案 • 2020 年成立 Raspberry Shake 公司 Raspberry Shake 歷史 https://www.kickstarter.com/projects/angelrodriguez/raspberry-shake-your-personal-seismograph
  11. • 使用 Raspberry Pi 2 加 4.5 Hz Geophone 搭配

    24-bits Digitizer, 可量測 50 英里內 2 級以上地震 Raspberry Shake 個人地震儀 和 USD$5 萬的 Nanometric Trillium Compact 比較有 99.9% 相似度 Nanometric Trillium Compact Raspberry Shake
  12. • 即時監控 • 早期警報 • 教育 / 科普 • 整合

    IoT • 長時間紀錄地震活動 Raspberry Shake 用途
  13. • RS3D 使用三組 PS-4.5B(4.5Hz) Geophone • 可偵測三軸 N/E/Z 的 S

    波和其他地震運動 • 毫秒級精度 , 每秒 100 次取樣率 • 搭配 Raspberry Pi 3 • 室內型為壓克力殼 • 室外型為防水盒 RS3D | 垂直與橫向運動地震儀 https://shop.raspberryshake.org/product/turnkey-iot-home-earth-monitor-rs-3d/
  14. • Raspberrypi.org 基金會所設計開發 • 公開的 datasheet & 線路圖 & 原始碼

    • 以低價硬體 & 自由軟體刺激電腦科學教育 Raspberry Pi 是 ... https://community.element14.com/products/raspberry-pi/w/documents/27523
  15. • {'EHZ', 1580372810.003, 16235, 16274, 16295, 16262, 16228, 16211, 16300,

    16372, 16379, 16292, 16264, 16344, 16349, 16273, 16231, 16288, 16373, 16404, 16311, 16228, 16224, 16319, 16383, 16311, 16221} 讀取地震原始資料 ([email protected]) 感測器類型 / 方向 timestamp( 毫秒 ) ADC count
  16. • SeedLink • 德國 GFZ 開發的即時資料傳輸協定 , 以 TCP 埠號

    18000 傳送 miniSEED 格式波形資料 • 預設每 2 秒一筆 , 資料 512 Block, 適合即時監控 • FDSN • 全球性組織 , 定義以 HTTP 傳輸 miniSEED 格式 • 適合整段時間窗的資料下載 , 常用在事後比對 / 重播 和分析 常用地震資料傳輸方式
  17. • Raspberry Shake User Datagram Protocol • 監測和視覺化地震資料的開源軟體 • #

    需先安裝虛擬環境 • Miniconda3=32-bits/Miniforge3=64-bits • $ git clone https://github.com/raspishake/rsudp • $ cd rsudp • $ chmod +x unix-install-rsudp.sh • $ ./unix-install-rsudp.sh rsudp https://raspberryshake.org/rsudp-2-0-is-here/
  18. 48 修改 rsudp_settings.json 改變設定 { • "settings": { "port": 8888,

    "station": "RD070", }, "plot": { "enabled": true, "spectrogram": false, "channels": ["EHZ"], "filter_waveform": false, "filter_spectrogram": false, "deconvolve": false, } }
  19. • 修改 rsud/client.py • 403 # start additional modules here!

    • 404 ######################### • 405 print("# start additional modules here!") • 406 from rsudp.my_picker import MyPicker • 407 my_picker = MyPicker(q) • 408 my_picker.start() • 409 print("") • 410 ######################### • 在 rsudp 增加功能
  20. • class MyPicker(threading.Thread): • def _ensure_trace(self, item): • s =

    item.decode("ascii") • epoch_str = rest[:k].strip() • • def _process_trace(self, tr: Trace): • nsta = max(1, int(self.sta_sec * fs)) • nlta = max(nsta+1, int(self.lta_sec * fs)) • aic = moving_average(aic, max(1, int(0.1 * fs))) • • def run(self): • while True: • self._process_trace(tr) 建立 my_picker.py 計算 AIC
  21. • 淺層地震 (<40km) 可用 P/S 波到時差迭代定位 • 需要將 raw 轉為訊號特徵增加準確度

    • 多個站台需根據發震時間 / 經度 / 緯度 / 深度計算 如何定位震源 ?