24ビットADコンバータADS1220で地震計を作ってみる。ADS1220はADS1247と比べて測定精度は同等で、機能はやや少ない。「I2C インターフェイス付」と説明があるが実際にはSPIしか付いていない。デジタル電源とアナログ電源が分かれているのでSPI入出力を5Vにしてアナログ入力を3.3Vにする事も可能。
ソースはC18でコンパイルする。
main.c
HardwareProfile.h
pc側のソフトのソースは地震計10にある。
24ビットADコンバータADS1220で地震計を作ってみる。ADS1220はADS1247と比べて測定精度は同等で、機能はやや少ない。「I2C インターフェイス付」と説明があるが実際にはSPIしか付いていない。デジタル電源とアナログ電源が分かれているのでSPI入出力を5Vにしてアナログ入力を3.3Vにする事も可能。
ソースはC18でコンパイルする。
main.c
HardwareProfile.h
pc側のソフトのソースは地震計10にある。
完成した。
ADR423はノイズが多いのでリファレンスには使えなかった。温度補償が必要な温度計向きかも知れない。
ADuM5401は有っても無くても測定値に影響は無かった。高ノイズ環境なら差が現れるかも知れない。
デジタル・アイソレータはパソコンなどのノイズ源からセンサーやADコンバータを絶縁して駆動するためのインターフェースらしい。以下に具体例が載っている。
Circuit Note CN-0066(Analog Devices)
Application Report SLOA123(Texas Instruments)
A-Dコンバータ活用 成功のかぎ(CQ出版)
そこでADuM5401を使って絶縁地震計を作ってみる。
秋月で最近発売された3軸加速度センサモジュール KXSC7を試す。
KXR94に近いがKXSC7の方が安く、ノイズが少し多く、ピン配置は異なる。1gal以下を測定する必要が無ければKXSC7で十分かも知れない。
Intel Galileoで地震計を作りたい。
Arduinoで地震計を作ろうと思い調べたところ、Arduinoは加速度センサの値をPCに送る用途には使えそうだけどメモリ容量が不足していて震度を計算するのは困難に思えた。一方intel galileoはArduino互換でパワフルらしいので地震計を作れると思う。
intel galileoはUSBホストの機能があるようだが、周辺機器はUSBで接続するよりI2CやSPIで接続する方がArduinoっぽいような気がする。ADコンバータAD7298も載ってるのだけど、用途が違う感じ。ADS1115はI2C接続でArduino用のスケッチもあるのでこれを使いたい。
intel galileoの配線図を見てレギュレーターの様子を観察してみる。3.3V端子はDC/DCコンバータTPS652510の出力が来ていて他のデバイスと共用でノイズが凄そう。5V端子はACアダプタ直通だけどADP150を通して3.3Vをセンサーに供給すれば良いと思う。
ADS1115のI2Cが接続できれば加速度のサンプリングは問題ないだろう。震度計算は手頃なfftライブラリが見つからないけど移植してなんとかしよう。
結果の出力は液晶表示が無難かも。前回の巨大7セグ表示が思ったほどインパクトが無かったので何か刺激が欲しい。どうしよう。
完成した。前回のFFTライブラリは重かったのでPHP_Fourier 0.03に変更したところ5倍ほど速くなった。これならRaspberryPiでも1秒1回くらいは計測震度が計算できそうだ。
WiringPi-PHPをインストールしてGPIOを接続した。
ピン数を抑えるために7セグ用デコーダSN74LS47Nを使った。
強弱の表示は平面板LEDにSTiKA SV-8で切り出したカッティングシートを貼った。
センサー部分は地震計9を流用。
ソース
phpで計測震度を計算するのにfftライブラリが必要になったのでテスト。試しにFast Fourier Transform 0.1を使ってみる。
平成12年(2000年)鳥取県西部地震の米子市のデータを気象庁が公開しているので同じデータをサンプルデータとして使う。ファイル名はAA06EA01.csv。
結果
完全に一致。
ただしちょっと重い。Corei5 2.3GHzのpcでテストしたが1秒に3回計算するのがやっと。RaspberryPiでは厳しいかも?5秒に1回くらいでも実用かも?元々c++だしc++で書く方が楽かも?
ソース
(2016/04/21 気象庁のurlを修正)
RaspberryPiで地震計を作りたい。
想像図
加速度センサ→ADコンバータ→PIC→USB→RaspberryPi→phpで計測震度計算→WiringPi→GPIO→7セグで震度表示
手元のRaspberryPiのOSはRaspbianが入っていて、PICをUSB接続するだけでOS側から認識できた。
$ dmesg | grep tty
[ 122.1046771] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
$ ls /dev/ttyACM0
/dev/ttyACM0
標準入出力を使えば読み書きが出来る。
$ echo hoge > /dev/ttyACM0
$ cat /dev/ttyACM0
計測震度の計算はphpで行う。fftのライブラリを使えばできると思う。
GPIOを制御するライブラリ WiringPi-PHPを入れる。
7セグはRaspberryPiの筐体に合う大きめの物を使いたい。GPIOの電流は16mAまで設定できるらしいので直接点灯できそう。数値は高々1桁なのでダイナミックにする必要はないだろう。
「強弱」の表示は作る必要がありそう。
秋葉原で手に入るアナログ加速度センサーを同じADコンバーター(地震計11を流用)で測定しノイズを比較した。
結果
メーカー | メーカー品番 | ノイズ μg/√Hz |
g範囲 | 出力 インピー ダンス kΩ |
実測 標準偏差 gal |
STMicroelectronics | LIS344ALH | 50 | ±2g | 110 | 0.160 |
Kionix Inc | KXR94-2050 | 45 | ±2g | 32 | 0.182 |
Analog Devices Inc | ADXL335 | XY:150 Z:300 | ±3.6g | 32 | 0.519 |
Freescale Semiconductor | MMA7361LC | 350 | ±1.5g | 32 | 1.238 |
LIS344ALHモジュールはマルツや千石で売っているAM-3AXIS-PV03。これだけ出力インピーダンスが110kΩなのでローパスフィルタのコンデンサは0.33μFを使用している(他は1μF)。
KXR94-2050は秋月で売っている。高性能の割に安い。
ADXL335はマルツで売っている。ノイズが多く、地震計には使用できないと思う。
MMA7361は秋月や千石で売っている。ノイズが多く、地震計には使用できないと思う。