2019年4月26日 星期五

DIY Seismograph


總之這次就是作地震儀。
其實以前高中曾經碰過的一款簡單地震儀是這個:http://qcn.stanford.edu/
QCN當初是為了廣佈地震儀作地震預警用,台灣有教育單位合作可以申請免費的QCN Sensor架設地震測站。我當初從學校拿了一個回家裝,配上一台退役的eeePC 701跑QCN的軟體這樣。QCN的設計和很多現在所謂DIY地震儀類似,其實就是拿MEMS加速度計作Sensor,但是因為MEMS的靈敏度不高而且雜訊也多,QCN另外還有作一些演算法(統計)去評估地震發生的有無。架設完之後也曾經發生過幾次地震,可惜的是訊號跟雜訊比起來真的低,所以我一直沒有想要去作MEMS的地震儀。

另外一種Sensor就是我現在在用的Geophone,這種Sensor其實也沒有那麼靈敏,只是比MEMS好上不少,通常是拿來作人工地震探測那種比較高頻率的地震測量,但是對於台灣這種地震常常發生在附近的國家來說,其實也很可以了。

By the way,地震有分P,S以外,還有表面波跟各種pspspspspspspspsp這種轉來轉去的波
因為地球不是均質的球,震波透過去的時候會產生各種反射和折射而且這一折一反還會生出P or S波出來,後面的那種折來折去的基本上就是訊號超小所以先忽略掉,不過表面坡就很有趣了,表面波顧名思義是地震發生後,由於波速越往下越快,波會因為折射回來淺層,所以能量會集中回表面然後傳遞的一種波,特色就是可以傳遞到很遠的地方。以美國的地質局為例,美國的地震網路之所以可以測量各地的地震以及規模是因為他抓的是表面波。表面波另外一個特色是由於不同頻率有不同的波速,表面波(A.K.A很雜的波)會出現頻散的現象,但是越遠只會剩下波長長的波,所以地震儀拚的其中一項就是能收到多低頻。不過好在Geophone也是可以到數個Hz這種程度,所以附近的地震都還行。

好,所以基本上就是我最近看到有人在賣便宜的Geophone就買來試試,Geophone的本質就是線圈配上非常重的磁鐵,所以晃動的時候會有AC產生,簡單了然。
我當初是想做一片電路板專門來接Geophone,只是因為要出國念書了實在沒時間搞,所以就朝向拿現成的東西拼接的方向,另外因為我希望管理和程式以及聯網方便一點,所以我挑的是RaspberryPi以及一個24bit ADC的Hat,組裝完長得像下圖:

一共有三個Geophone對應東西方向,南北方向,上下的軸,然後直接接上板子的ADS1256。
最後透過束線帶固定在雷切的壓克力板,底下貼腳墊濾掉高頻的波。
我用的Raspberry Pi Hat是waveshare出的WaveShare High-Percision  AD/DA : https://www.waveshare.com/wiki/High-Precision_AD/DA_Board
還行,我也沒啥好選的就這樣吧。

這個板子有附上滿多example Code的,要Python要C要bcm2835 lib還是wiring Pi都任君挑選,
由於效能的關係我就從bcm2835的example下手了,由於我沒有裝OPA去放大訊號,我就把ADS1256內建的開到64倍的放大,然後拉高Sampling Rate這樣,順便開成differential mode。
比較有趣的是因為ADS1256開到7500ps,其實CPU資源吃很兇,如果同一個thread還要寫資料和切換檔案的話中間耗掉的時間會導致資料消失,所以我就開了兩個thread,一個專門讀然後透過pipe傳回主要的thread去寫檔案和切換檔案這樣,這件事情也是我轉向Raspberry Pi 3的理由之一,原本其實是想用Raspberry Pi Zero去作這個Project的,可是因為單核心真的撐不住,所以就上RPI 3然後搭配多核心多個thread這樣使用。

檔案寫完當然還沒結束,首先要解決的是把檔案存哪裡的問題,這樣程式寫起來sampling rate在三個differential channel大致上有750ps,檔案每五分鐘就生出快要14Mb的大小,一天下來兩三個Giga跑不掉,所以最快的方式就是.......拿出學生版的無上限Google Drive!!!!
而且如果有管理員來問的話這個根本超級學術用的一定Safe。(我懶得用binary,因為塞免錢的網路硬碟)

上傳Google Drive有很多種方式,懶得人比如我就是用rclone去作,rclone基本上把各種網路硬碟的操作變成rsync這樣的cmd,還挺方便的,可能之後來寫一篇記錄一下這個。

好,總之檔案都放無上限的Google Drive,接下來要處理的就是畫圖了,我當初是用Matlab畫了幾次的圖(等下個案的圖),可是到後面因為要做到自動化,所以改用obspy這個python的地震資料專用軟體來畫daily plot,然後去撈中央氣象局的地震時間把事件點在圖上(by the way,中央氣象局的地震API超爛,根本只會回最近的那一筆而已,我只能直接爬網頁爬下來時間和規模的資料 = =)。大概就長下面那樣,Dailyplot是把一整天的地震儀的資料畫上去配上氣象局的地震事件的資料上去,搭配VPS自動處裡每天的地震儀資料就差不多了。
我放在公司所以人為的影響滿大的

接下來就是拿個Case來講了,我當初弄玩Code剛好過了幾天就發生一次非常大的地震
個人有記憶以來(我對921和331都沒啥印象)最大的一次

我當時人正在十樓,然後這個地震儀正在測試穩定性,發生過後除了上FB發地震文之外就是先去把資料撈回來看XD
地震發生的時候因為正在測試中,所以我還沒有把XY軸擺出來,三個軸都是放成Z軸,所以資料也只有Z軸的資料,但是可以看到非常的符合中央氣象局的Data(包含頻散的特徵),這也是第一次這個地震儀抓到的一筆資料。


後面還有個Case是比較小的M3.9
Again,not bad,而且台北市震度也只有1而已。

所以目前這個系統就是放在我家某個角落默默地上傳到免費無上限的Google Drive,然後有個VPS每天定時去撈去畫daily plot這樣了。

Code預計放Github,可能再修美觀一點這樣吧。

Code:https://github.com/will127534/RaspberryPi-seismograph



UPDATE: 8/8號的M6.0地震
很大,炸掉我的DailyPlot的程度的大 








3 則留言:

  1. 你好 我也有在使用這塊板子 請問可以請教你幾個問題嗎
    我使用這塊板子接收電壓波型,可是我接收的速度非常慢,想請問是因為我同時寫如跟顯示才這樣嗎
    還有想請問你是如何調整7500sps
    不知道有沒有機會能跟你討論
    謝謝您

    回覆刪除
    回覆
    1. https://github.com/will127534/RaspberryPi-seismograph/blob/master/Software/RaspberryCode/obj/ADS1256.c#L221

      刪除
  2. 你好 請問你的編譯器是用GEANY嗎

    回覆刪除