生産現場IoTへの挑戦 #03　~試験用振動測定システム完成編~

# 1.はじめに
前回までにM5StickCのIMUの使い方をなんとかマスターしたので、現場に持ち込めるよう作りこみをしました。
こんなことができる様になります。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">M5stickC単体で現場の振動測定→持ち帰ってBT通信でRPiにアップ→グラフ可視化、解析、保存。<br>予知保全向けの便利ツール出来た！<br><br>一方でM5Stackで実用ツール作ったら負けた感もある。 <a href="https://t.co/cdRFeYD9Fb">pic.twitter.com/cdRFeYD9Fb</a></p>&mdash; AIRPOCKET＠rastaman vibration (@AirpocketRobot) <a href="https://twitter.com/AirpocketRobot/status/1356802979370659841?ref_src=twsrc%5Etfw">February 3, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 2.ハードウェア構成
ハードウェアには特に工作も必要なく、測定用のM5StickCと、データ収集・解析用のRaspberry Pi 4Bです。

## 2-1.M5StickC
M5Stack社製の開発ボードです。6軸ジャイロセンサーのMPU6886を搭載しているため、これを加速度センサーとして利用します。
小さな筐体のなかに、高性能なマイコン、Wi-Fi、Bluetooth、6軸ジャイロ、Lcd、物理スイッチ2個、RTC、バッテリー、マイク、GPIOが詰め込まれているので幅広い用途に使えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/c55b61d1-1ae9-b8d7-6e38-82dc53f4c76a.png)

## 2-2.Raspberry Pi 4B(以後ラズパイ or RPi）
もともとは安価な教育用コンピュータとして開発されたシリーズですが、4代目となり性能も大幅にアップ。今回の用途ではオーバースペック気味ですが、早いことはいいことなので採用。消費電力が大きいので、電源容量に制限があるなら3Bとかzeroの方が適しています。GPIOのついたPCですので、サーバーやデータベース、データ解析に利用できるほか、センサーやアクチュエータを直接接続して制御もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/19b74577-9a13-edef-a007-7d3141218641.png)

# 3.機能と使い方
このシステムはM5StickCを現場に持って行って振動を測定、持って帰ってきてRPiにデータ送信してRPi上でデータ解析します。これは、WiFi環境の無い現場でも手軽に測定を行うための仕様です。
もちろんRPiを現場にもって行っても良いですし、現場にWiFi環境がある場合はM5StickCの測定データをWiFiでサーバへ送ることも（プログラムを修正すれば）可能です。最終的には現場にWiFi環境を整備して、随時データ採取を行うことを視野に入れています。

## 3-1.ペアリング
RPiとM5StickCをペアリングします。

###ペアリングの方法
まず、M5StickCに次のコードを書き込んでシリアルモニタを開き、Mac addressを確認します。

```cpp
#include <M5StickC.h>
void setup(void) {
  Serial.begin(115200);
  Serial.println();
  uint8_t mac5[6];
  esp_read_mac(mac5, ESP_MAC_BT);
  Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac5[0], mac5[1], mac5[2], mac5[3], mac5[4], mac5[5]);
}
 
void loop() {
 
}

```
このアドレスをメモしておき、RPiのターミナルを開いてbluetoothコントローラーを立ち上げます。

```sh
$bluetoothctl
```

プロンプトが[bluetooth]# に変わったことを確認し、次のコマンドを入力します。

```
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# discoverable on
[bluetooth]# pair [mac address]
```
mac addressには、先ほど調べたM5StickCのmac addressを入力します。
これでペアリングができました。

## 3-2.M5StickCの機能と使い方
ソースコードは[GitHubにあげてます。](https://github.com/Factory-IoT/m5stickc_accelerometer)センサー制御の勘どころは[前回の記事](https://qiita.com/airpocket/items/190aa528fe420649e405)で説明しています。測定条件を変更したい際の参考にして下さい。
Arduino IDEでM5StickCに書き込んで実行してください。
### 機能
Ver 1.0.0では1回の測定でx,y,z方向の加速度を、1024個ずつ記録します。サンプリングレートは約3kHzです。最大5回分のデータを保持し、電源を切るとデータは消去されます。
###使い方
M5StickCの電源を入れると、メインメニューが表示されます。
![_20210212_102207.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/33e6d4f9-fa6f-b368-bea9-786c7a04e4ea.jpeg)

・Number of mesurments : 測定済みのデータ数（回数）を示しています。最大5回分のデータを保存できます。5以上になるとそれ以上測定できません。一度電源を切ると、測定データが消去されます。
・ボタンAを押すと3秒後に測定が開始されます。測定は0.33秒で終了し、もう一度ボタンAを押すとメニューに戻ります。
・RPi側のプログラムを受信モードにして、BTの到達範囲内でボタンBを押すとデータを送信します。
・データ送信後もデータは保持しています。不要な場合は電源を一度切るとデータがクリアされます。

## 3-3.RPi側の機能と使い方
RPiは、M5SitckCから測定データを受け取り、FFT及びグラフ描画を行います。ソースコードは[GitHubに公開している](https://github.com/Factory-IoT/IoT_data_hub) Vanalisys.py を使用して下さい。

###機能と使い方
使える機能はプログラムを立ち上げてメニューにある通りです。
ここではThonnyで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/41296730-871f-e42f-c2d5-1333d3569a9e.png)

・= data status ================には次の状態を表示しています。
　number of data：何回分のデータを読み込んでいるか。
　data size：読み込んだデータの測定頻度（1回のデータ個数。標準は1024個） 
　FFT analisys：FFTを実行したか

・実装されている機能はcommand listにあります。コマンド番号を入力すると実行できます。

###1:data receive mode
M5stickCからのデータ送信を待ちます。このモードを選択してからM5StickC側で送信を開始すると通信ン開始、受信が完了し次第メインメニューに戻ります。

###2:view raw data
読み込んだraw dataを表示します。あまり使いません。

###3:view raw data graph
読み込んだデータをグラフ化します。2を入力したあと、軸を訊かれるためx,y,zのいずれかを入力します。あまり使いません。

###4:FFT analisys
読み込んだデータをFFT解析しグラフ表示します。4を入力したあと、グラフ表示するデータ番号を聞かれます。データ番号は0から始まります。グラフは指定したデータ番号の解析結果のみ表示しますが、FFT解析自体はすべてのデータに対して実行します。FFT analisysが完了していれば、6:save FFT dataが使えます。


###5:save raw data
読み込んだデータをCSVファイルに保存します。保存先はpython実行ファイルと同じフォルダ、ファイル名はaccel_data0.csvから連番となります。古いデータがあっても問答無用で上書きしますので注意してください。

###6:save FFT data
FFT解析の結果をCSVファイルに保存します。保存先はpython実行ファイルと同じフォルダ、ファイル名はFFT_data0.csvから連番となります。こちらも古いデータがあっても(以下略。。。

###7:load raw data
保存済みの加速度データを読み込みます。読み込むファイルはpython実行ファイルと同じフォルダにaccel_data0.csvから連番で保存しておく必要があります。

###q:quit
プログラムを終了します。

# 4.まとめ
M5StackCを用いた振動測定及び解析が可能となるツールが完成しました。
このツールで振動データを集めれば、データをどのように利用できるかの検討が始められます。1万円足らずで準備ができますので、振動データによる予知保全に興味のある方はまず試してみてはいかがでしょうか。