非エンジニアが「M5StickC×LINE」を活用して生産現場の業務改善を行いました【ノーコード】

# はじめに
この記事は、とある地方自動車部品メーカーで働く非エンジニア（私）が、社内初のIoT化プロジェクトの一環で開発した「通知システム」を使って社内業務の改善を行った話です。

今回開発した「通知システム」は、センサーを活用して機械の稼働状況をリアルタイムで把握し、予期せぬ事態や意図したタイミングで機械が停止した場合にLINEへ通知されるシステムです。

ちなみに今回の通知システムは、UIFlowを使用して**『ノーコード』**で開発しております。

# なぜ作ろうと思ったのか？
私は日頃から作業現場より遠く離れた場所で無人運転をしている機械が正常に稼働しているかどうか、定期的に確認しに行くのは作業性が悪く「無駄」が発生していると感じていました。

また、同じ不満を抱えている社員も複数人いたので、その不満を解消するために今回の通知システムをIoT化プロジェクトの一環で作ろうと考えました。

# 使用技術・環境・機器
- M5StickC
- UIFlow（v1.7.2）
- LINE Notify
- IFTTT
- LIGHT UNIT(光センサー)
- Ambient（IoTデータ可視化クラウドサービス)

# 完成フロー図
![完成フロー図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/a8237ab7-02b4-4ba8-4801-d331279589f9.png)

# 使用機器の詳細
こちらが今回使用したM5StickC(マイコンモジュール)と光センサーです。
![センサー類.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/608b8bbc-5bde-235b-1316-554c7dcc03cb.png)
[M5StickC](https://www.switch-science.com/catalog/5517/)はスイッチサイエンスで￥2,000、[光センサー](https://www.switch-science.com/catalog/4051/)は￥360ほどで購入できるので、初めて使用する場合も低コストで試すことができます。


# LINEに通知される様子
LINE Notifyを通知する専用のLINEグループを作成し、そこにLINE NotifyからLINEへ通知が送られてくるように設定しました。
<img width="45%" alt="スクリーンショット 2021-03-29 18.03.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/185721e2-61c1-3f85-904d-82fda5c27945.png">

もちろん、ホーム画面からでも通知の確認はできるので、切削油などの油類で汚れてしまった手でスマホを開かないといけないストレスも解消できます。
<img width="45%" alt="スクリーンショット 2021-03-29 18.05.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/99e12372-469b-b57e-e60f-0c48ff97ab5e.png">

メール通知だとこの辺りのストレスは解消できないので、画面を開けなくても確認できるLINEは、実際に使用してて便利だなと感じました。


# M5StickCのUI
必要最低限の情報しか取り入れていないので、
とてもシンプルな設計になっております。
![UI画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/46894a81-1352-2fea-7936-0da89f407981.png)

# センサー設置
機械の稼働状況を把握するために、機械に取り付けられているシグナルランプに光センサーを設置しました。
そこから環境光を検出して機械の稼働状況を判別しました。
![機械.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/c7bf2c03-1114-a89c-fa5d-4c53fc59495b.png)

#### シグナルランプにセンサーを取り付ける
稼働時に点灯するランプの場所にセンサーを取り付けて環境光の強度を数値で取得し、点灯時の数値と消灯時の数値を把握した上で、プログラム上で「点灯時は数値がいくつ以上」「消灯時は数値がいくつ以下」と条件分岐でパターンを分けて作ります。

こうすることで、現在機械が稼働しているか否かの稼働状況を把握することができます。
![sennsa-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/d28d9ca5-4289-918b-f22d-1c2ca959d7e3.png)

# 現場に明示
どんな役割を果たしてくれてるのかを他の方にも判るようにシステム詳細の明示を行い、IoTへの理解度アップに努めました。
![C77FCCA6-F862-4657-A56F-EE45366A01BC.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/d71e031a-dd5c-3839-5e3b-f690b6776720.jpeg)


# 通知プログラムの中身
プログラムはUIFlowを使用してノーコードで書いています。
今回はビジュアルプログラミング言語[Blockly](https://prod.kyohritsu.com/RASPYTHONCAR/tutorial_blockly/index.html)を使用してプログラミングしていきました。

## 初期設定
まず初めに、初期値を変数に代入、データ送信時に活用するタイマーを生成、Wi-Fiへの接続など主に初期設定を行います。
![初期設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/a6970943-0929-0dfa-2e34-5c414fd9ca55.png)

## Wi-fi接続確認
「Wifi-check」という関数を作って、Wi-Fiが正常に接続されているかのチェックも行っております。

もしWi-Fiに繋がっていなければ、0.5秒毎に「CheckCount」という変数へ1づつ値が代入されていき、初期設定で変数「CheckCount-Max」に代入しておいた値「600」を「CheckCount」の中身の値が超えると再起動されて、Wi-Fiへの再接続を試みるプログラミングをしております。
（3分間Wi-Fiに接続されなければ再起動される）
![Wifiチェック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/49352628-6816-6d30-454b-1381fb3f5d29.png)

## 光センサーから検出した環境光の活用
「ずっと」のブロック内に主に以下のプログラミングをしております。

- 光センサーから環境光を検出し数値化
- 数値化した値を変数「brightness」へ代入
- 稼働状況を判断するための基準値を変数「brightness-check」へ代入
- 検出した光の強度値が800以下なら機械が停止していると判断し、LINEへ「機械停止」の通知を送るプログラムが組み込まれている関数「LINE-Notify」を呼び出す
- 検出した光の強度値が800以上なら機械が稼働していると判断し、LINEへ「機械再稼働」の通知を送るプログラムが組み込まれている関数「LINE-Alerm-Release」を呼び出す

ちなみに機械稼働の有無は、光センサーで検出したのち変数「timer-count」で稼働状況の判別管理をしています。
![通知の条件分岐.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/1b711ca2-c81e-023a-c739-4fc2f663ebb7.png)

## IFTTT経由でLINE Notifyへ情報を送信
HTTPリクエストを活用してIFTTTを経由して、LINE Notifyへ情報を送信し、LINE NotifyからLINEへ通知が送られるように設定しております。

このあたりの実装はこちらの記事を参考に行いました。↓
[【初心者向け】M5StackのUIFlowからLINEに通知を送れるようにする方法【LINE Notify】](https://qiita.com/twtjudy1128/items/e4980be7ffd1b465144a)
![通知パターン設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/56bae78f-332d-cc01-d9b3-010390f3658f.png)

## IoTデータを可視化するためにAmbientへ送信
IoTデータの可視化を行ってくれるAmbientというIoT用のクラウドサービスへ、取得したIoTデータをM5StickCから送信するプログラムも組み込みました。

Ambientは無料で1台あたり最大1日3,000件のデータを蓄積してくれるので、30秒毎にIoTデータをAmbientへ送るように設定しました。
（3600秒÷30秒=120→120×24時間=2,880件）

IoTデータをAmbientへ送る方法は下記の記事を参考に行いました。↓
[UIFlow（Blockly）でAmbientにデータを送る](https://ambidata.io/samples/m5stack/uiflow/)
![ambinent設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/1f193a00-2cba-1c55-7e57-27c94f0666bd.png)

送られてきたIoTデータはAmbientで確認することができます。
Ambientでは様々なチャートを選択することができ、今回は折れ線グラフと稼働状況が可視化されるチャートを使用して、IoTデータの可視化を行いました。

- 折れ線グラフ
![稼働フラグ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/9bd82adb-89a3-fe05-dec5-2cc3b6da7a4a.png)

- 稼働状況確認チャート
![稼働チェックシート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/1e10dac9-9c34-94cb-df3e-5496f3f35ee5.png)

# 結果

M5StickCとLINEを活用した「通知システム」を開発して導入してみたところ、複数人の現場作業者から「通知システム導入後は無人運転している機械が正常に稼働しているかどうか定期的に確認しに行くことがなくなったよ！」という声や、「日頃から使い慣れたLINEへ通知されるのは使い勝手も良く便利ですね！」との声を頂けました。

実際に自分で使用してみても上記と同じユーザー体験を味わうことができ、無人運転中の機械を定期的に確認しにいくという「無駄」がなくなりました。

以上の結果から、今後は今回開発した「通知システム」を社内でさらに横展開させていき、生産現場のさらなる業務改善に努めていきたいと考えております。

# こんな副次効果も・・・
Ambientへ送られてきたIoTデータは、[AmbientからCSV形式でデータをダウンロードする事ができる](https://ambidata.io/blog/2016/11/30/download/)ため、取得したデータを分析したり、機械の稼働率などを数値として把握することができる様にもなります。

![スクリーンショット 2021-03-27 18.45.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/8c5dcecf-5b0b-d710-03e2-a3ff13f0b61d.png)

Ambientを上手く活用すれば、紙の実績表に手書きで書き込んで、そこからExcelへ手打ちで打ち込んで稼働率を算出するという非効率な作業をする必要も無くなります。

また、今回実際に「通知システム」を使ってみて、想定以上に光センサーから検出する感度が良く、正確かつ詳細に機械の稼働状況を把握することができたと感じました。

さらにIoTデータの送信もWi-Fiを通じて安定して行えたため、取得したIoTデータ情報の信頼性も高く、経営に関わる課題部分に関しても効果的なアプローチを行う事ができそうだなと感じました。

例えば、年単位で長期生産数が計画される自動車部品製造会社では、信頼性の高い稼働率データを活用することで、急な増産がかかった場合でも今ある設備での稼働状況で、今後増産されていく状況に対応できるかどうかの判断を、正確な基準で即座に判断する事ができる様になります。

そして正確な稼働状況が把握できれば、現場作業中の無駄が浮き彫りになり、今まで気づかなかった課題の発見にも繋がるので、より多角的な視点から利益向上につながるアプローチを行う事もできる様になります。

この様に「M5StickC」と「センサー」を組み合わせて取得したデータを、Ambientで可視化したりCSV形式でデータを取得して分析に活用することで、今までとは違った新しい方向から課題解決のアプローチを行うことができる様になると思います。

このことに気がついたのは、実際に今回の通知システムを開発して導入した後だったので、次回は副次効果で得た稼働データを稼働率に落とし込んで分析→改善を行い、会社の利益向上への貢献に繋げていこうと考えております。

# おわりに

今回の活動でIoT化を進めることは、間違いなく会社の利益向上に繋がると実感しました。
今後も引き続き社内IoT化活動に取り組んでいきたいと思います。

この記事を通して、私と同じ様に地方で社内IoT化に奮闘していらっしゃる非エンジニアの方々のお役に少しでも立てれれば幸いです。

最後までお読みいただきありがとうございました。

もし何かご不明点、ご指摘点などあれば、お気軽にコメント欄、もしくは私の[Twitter](https://twitter.com/kattyan150)へお声がけくださいませ。
↓
[Twitterページはこちら](https://twitter.com/kattyan150)