1.はじめに
製造現場では、モータ、ポンプ、ファンなど多くの回転機械が使用されています。これらの設備では、アンバランス、軸受の劣化、取付け部の緩みなどによって振動状態が変化することがあります。振動を測定することで、目や耳だけでは分かりにくい設備の状態を数値として確認できます。
今回は、M5Stack Core2に加速度センサーを接続し、モータなどの振動を測定してみます。加速度の時間波形を画面に表示するとともに、振動の大きさを表す指標としてRMS(実効値)を求めます。
本記事では、本格的な設備診断装置を作ることを目的としていません。M5Stackと身近な加速度センサーを使って、「設備の振動を実際に測ってみる」 ことを目的とします。
2.今回行うこと
今回の実習では、加速度センサーで振動を測定し、M5Stack Core2で次の処理を行います。
モータなどの振動
↓
加速度センサーで測定
↓
加速度値を取得
↓
時間波形を表示
↓
RMSを計算
↓
振動の大きさを数値で確認
加速度の瞬間値を見るだけでなく、一定時間のデータからRMSを求めることで、振動の大きさを一つの数値として比較できるようにします。
3.使用する機器
| 機器 | 用途 |
|---|---|
| M5Stack Core2 | 加速度データの取得・表示・計算 |
| ADXL345 | 振動の測定 |
| GROVEケーブル等 | M5Stack Core2とセンサーの接続 |
| USB Type-Cケーブル | PCとの接続・電源供給 |
| パソコン | プログラムの作成・書き込み |
| 小型モータ等 | 振動測定の対象 |
ADXL345ではX、Y、Zの3方向の加速度を測定できます。振動を測定する場合は、センサーの向きと測定方向の関係を意識することが重要です。

図1 振動測定の構成例(センサーにはADXL345を搭載したACCELを使用)
4.使用するライブラリをインストールする
今回使用するADXL345加速度センサーをプログラムから扱うため、次のライブラリを追加します。
| ライブラリ | バージョン | 用途 |
|---|---|---|
| ADXL345_WE | 3.1.0 | ADXL345からX、Y、Z方向の加速度を取得するためのライブラリ |
Arduino IDEの**「ライブラリマネージャ」**を開き、検索欄に ADXL345_WE と入力します。
検索結果から バージョン3.1.0 を選択して「インストール」をクリックします。
第1回でインストールした M5UnitUnified 0.5.5 は、そのまま使用します。インストールが完了したら、Arduino IDEに次のプログラムを入力します。
#include <M5Unified.h>
#include <Wire.h>
#include <ADXL345_WE.h>
#include <math.h>
#define ADXL345_ADDR 0x53
ADXL345_WE adxl = ADXL345_WE(&Wire, ADXL345_ADDR);
// 1回に取得するサンプル数
const int N = 200;
// サンプリング周波数 [Hz]
const float FS = 400.0f;
float samples[N];
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setTextColor(WHITE, BLACK);
M5.Display.fillScreen(BLACK);
// Core2 PORT.A
// SDA = 32, SCL = 33
Wire.begin(32, 33, 400000);
// ADXL345初期化
if (!adxl.init()) {
M5.Display.println("ADXL345 error");
while (true) {
delay(1000);
}
}
// ADXL345の出力データレート
adxl.setDataRate(ADXL345_DATA_RATE_400);
// 測定レンジ ±4g
adxl.setRange(ADXL345_RANGE_4G);
}
void loop() {
const uint32_t periodUs =
(uint32_t)(1000000.0f / FS);
uint32_t next = micros();
float mean = 0.0f;
// -----------------------------
// 加速度データ取得
// -----------------------------
for (int i = 0; i < N; i++) {
while ((int32_t)(micros() - next) < 0) {
}
next += periodUs;
xyzFloat g;
if (!adxl.getGValues(&g)) {
continue;
}
// g → m/s^2 に変換
samples[i] = g.z * 9.80665f;
mean += samples[i];
}
mean /= N;
// -----------------------------
// RMS計算
// -----------------------------
float sumsq = 0.0f;
for (int i = 0; i < N; i++) {
// 平均値(重力成分など)を除去
float ac = samples[i] - mean;
sumsq += ac * ac;
}
float rms = sqrt(sumsq / N);
// -----------------------------
// RMS表示
// -----------------------------
M5.Display.fillScreen(BLACK);
M5.Display.setTextSize(2);
M5.Display.setCursor(5, 5);
M5.Display.printf(
"Z-axis RMS: %.3f m/s^2",
rms
);
// -----------------------------
// 波形表示
// -----------------------------
int y0 = 130;
// 表示倍率
float scale = 12.0f;
for (int x = 1; x < 320; x++) {
int i0 = (x - 1) * N / 320;
int i1 = x * N / 320;
float a0 = samples[i0] - mean;
float a1 = samples[i1] - mean;
int yA = y0 - (int)(a0 * scale);
int yB = y0 - (int)(a1 * scale);
M5.Display.drawLine(
x - 1, yA,
x, yB,
WHITE
);
}
// ゼロライン
M5.Display.drawLine(
0, y0,
319, y0,
DARKGREY
);
delay(300);
}
5.加速度センサーの取り付け
振動測定では、センサーの取り付け方が測定結果に大きく影響します。
センサーが設備に対して動いてしまうと、設備そのものの振動を正しく測定できません。そのため、センサーはできるだけしっかり固定します。簡易測定では、マグネットなどを利用して設備表面に固定する方法も考えられます。また、回転軸やファンなどの可動部にはセンサーやケーブルを近づけないようにします。

図2 加速度センサーの取り付け例(センサーにはADXL345を使用)
6.加速度を測る
Arduino IDEで今回使用するスケッチを開き、M5Stack Core2に書き込みます。
プログラムを起動すると、ADXL345からX、Y、Z方向の加速度を取得します。
例えば、静止した状態では重力の影響を受けるため、センサーの向きによっていずれかの軸に約1gの値が現れます。センサーの向きを変えると、各軸の値が変化することを確認できます。この確認により、センサーが正常に動作していることと、X、Y、Z方向の関係を把握できます。
7.振動の時間波形の表示
モータを運転すると、加速度値が時間とともに変化します。
この変化を横軸に時間、縦軸に加速度として表したものが時間波形 です。

図3 加速度の時間波形の例(ガソリン自動車のアイドリング時のエンジンカバーを測定)
時間波形を見ると
- 振動が大きいか小さいか
- 周期的な振動があるか
- 衝撃的な振動が発生しているか
などを視覚的に確認できます。
今回は、一定数の加速度データを連続して取得し、そのデータを使って波形を表示します。
8.振動の大きさをRMSで表す
時間波形を見ると振動の様子は分かりますが、複数の測定結果を比較する場合には、一つの数値で振動の大きさを表せると便利です。
そこで利用するのが**RMS(Root Mean Square:二乗平均平方根、実効値)**です。RMSは、一定時間に測定した加速度データから、次の手順で求めます。
- 各加速度値を二乗する
- 二乗した値の平均を求める
- その平方根を求める
RMSを求めることで、時間とともに変化する振動の大きさを、1つの数値として表すことができます。例えば、同じ位置・同じ条件で測定して
- 正常時:RMSが小さい
- 条件変更後:RMSが大きい
という結果になれば、振動の大きさが増加したことを数値として確認できます。
重力成分について
加速度センサーには振動だけでなく重力加速度も含まれます。設備振動の大きさを評価するときは、平均値を差し引くなどして直流成分を除き、振動成分についてRMSを求める方法があります。今回の記事では、 「振動成分の大きさをRMSという一つの数値で表せる」 ことを重視します。
9.測定条件を変えて比較してみる
振動測定では、絶対値だけを見るよりも、同じ測定条件で結果を比較することが重要です。
例えば
- モータ停止時と運転時
- 回転速度が低い場合と高い場合
- センサー取付け位置を変えた場合
- 正常状態と意図的に振動を変化させた状態
などを比較してみます。
| 測定条件 | RMS |
|---|---|
| モータ停止 | ○○ |
| モータ運転 | ○○ |
| 条件変更後 | ○○ |
実際に測定すると、設備の状態や測定位置によって値が変化することが分かります。
10.サンプリング周波数
振動測定では、1秒間に何回データを取得するかが重要です。これをサンプリング周波数 といいます。例えば400 Hzで測定する場合、1秒間に約400回の加速度データを取得します。次回行うFFT解析では、このサンプリング周波数によって解析できる周波数範囲が決まります。
今回は、振動波形を取得する際に、できるだけ一定の時間間隔でデータを取得することが重要であることを押さえておきます。
11.工場における活用方法
今回の簡易振動測定は、例えば次のような用途を考えるきっかけになります。
- モータの振動状態の確認
- ファンやポンプの振動比較
- 運転条件変更前後の振動比較
- センサー取付け位置による振動の違いの確認
- 設備の通常状態を記録するための予備測定
設備診断では、一度測定した値だけで良否を判断するのではなく、同じ位置・同じ条件で継続的に測定し、変化を見る という考え方が重要です。
12.今回のまとめ
今回は、M5Stack Core2とADXL345を使って、加速度測定 → 時間波形表示 → RMS計算 → 振動の大きさの比較 を行いました。温度や距離と異なり、振動は短い時間の中で値が繰り返し変化します。そのため、振動測定では「どのくらいの速さでデータを取るか」「取得した多数のデータをどう評価するか」が重要になります。RMSを使うと振動の大きさを数値として比較できますが、時間波形だけでは「どの周波数の振動が大きいのか」は分かりにくい場合があります。
そこで次回は、今回取得した振動データをFFT(高速フーリエ変換) によって解析し、振動に含まれる周波数成分を調べます。
注意事項
今回製作する装置は、M5Stackと市販の加速度センサーを利用した学習・簡易検証用の装置です。測定値は、センサーの仕様、取付け方法、取付け位置、サンプリング条件などの影響を受けます。設備診断、品質保証、安全監視など、測定値の信頼性が要求される用途では、用途に適した校正済みの振動計測機器を使用してください。
また、回転機械を測定する場合は、回転部・可動部にセンサー、ケーブル、身体などを近づけないよう、安全を十分に確保してください。