LoginSignup
3
4

More than 5 years have passed since last update.

ESP8266と3軸加速度センサーADXL345で振動を測定する

Last updated at Posted at 2017-06-20

ESP8266と3軸加速度センサーADXL345を使って振動を測定し、IoTデーター可視化サービスAmbientで可視化します。

Ambientで振動測定

3軸加速度センサーADXL345

ADXL345は次のような仕様の3軸加速度センサーです。

  • 設定により±2Gから±16Gまで測定可能
  • 分解能は1ビット当たり3.9mG(設定による)
  • SPIとI2Cでアクセス可能

この他にもタップ、ダブルタップの検出、動きの有無の検出など豊富な機能を持っています。

ADXL345の制御にはESP8266を使います。ESP8266とADXL345はSPIで接続しました。

ESP8266 ADXL345
3V3 VDD
GND GND
IO14 SCL
IO12 SDO
IO13 SDA
IO5 CS

プログラム

振動と言っても様々な振動がありますが、今回は建物の振動を測ることにします。振動の周波数は建物によりますが、50Hzぐらいまでを測定することにして、10m秒間隔で加速度センサーの値をサンプリングすることにしました。

センサーのx軸、y軸を水平方向、z軸を鉛直方向になるように設置すると、x軸、y軸はほぼ0G、z軸は重力の約1Gの加速度がかかった状態になります。そこで最初に10m秒間隔で100回、x軸、y軸、z軸の加速度を測定して平均値を求め、これを基準値にします。振動の測定値はセンサーから読んだ値と基準値の差分にします。ADXL345の分解能は1ビット3.9mGなので3.9倍すると加速度が得られます。

プログラムでハマったのはSPIのモード設定でした。ADXL345のデーターシートには、次のように書いてあります。

SCLK はシリアル・ポート・クロックであり、非伝送時にCSがハイレベルの場合、SCLK はハイレベルにしてください。データは、SCLK の立上がりエッジでサンプリングしてください。

この説明はSPI Mode3です。ところが

SPI.setDataMode(SPI_MODE3);

とすると正しそうな値が取得できません。「ESP8266 ( ESP-WROOM-02 ) SPI 通信高速化、その2」というブログに「ESP8266 のSPI ライブラリでは、SPI.setDataMode(SPI_MODE2); は Mode 3 です!!」と書いてあるのを見つけ、

SPI.setDataMode(SPI_MODE2);

としたところ、正しい値を取得することができました。

プログラムはGithubに公開しました。

プログラムをビルドするにはAmbientのArduinoライブラリーが必要です。インストール方法は「Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する」をご覧ください。

データー測定

プログラムをビルドして動かしてみました。Wi-Fiに接続し、基準となるx、y、z軸の加速度を測定して表示した後、10秒間、振動を測定します。試しにセンサーを置いた机をx軸方向、y軸方向、z軸(鉛直)方向に、それぞれ3回ずつ軽く叩いて見た時の様子が最初に載せたグラフです。

x軸、y軸、z軸それぞれの方向に叩いた時に対応する方向の振動が検出されているのが分かります。y軸方向に叩いた時はy軸だけでなくx軸にも振動が検出されていますが、これは机がx軸方向に揺れやすかったのかも知れません。

z軸方向のグラフを拡大してみたのが下の図です。

z軸拡大

10m秒のサンプリングで振動は測定できているように思います。

測定結果は以下のアドレスで公開しています。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4