生産設備の稼働データを外部から取ってみよう(ローカル編)

# 生産設備の稼働データを外部から取ってみよう
### 
京セラコミュニケーションシステムの大山です。

前回、[**生産設備の稼働データを外部から取ってみよう**](https://qiita.com/kccs_susumu-oyama/items/85cd1d3dd71c00fa4706)で紹介した中の”No1.積層信号灯から設備稼働状況見える化”を京セラIoTゲートウェイ[**KC4-C-100A**](https://www.kyocera.co.jp/prdct/telecom/office/iot/products/kc4-c-100a.html)(以降、**KC4**と称します)と[**GoogleCloudPlatform**](https://www.kyocera.co.jp/prdct/telecom/office/iot/products/kc4-c-100a.html)(以降、**GCP**と称します)を使用して稼働データを取ってみたいと思います。

## この記事の対象者
設備稼働データを取りたいけど設備の中から線を引き出すのはちょっといやだな・・・という方  
設備稼働データ取りたいけどPLCのプログラムはいじりたくないよ・・・という方  
メンテナンスの停止ができない生産設備をお持ちの方  
デジタル化担当になったが何から始めていいか分からない方  

## 積層信号灯から設備稼働データをとるまでの経路
今回から実際に積層信号灯から光センサーを使用して点灯/消灯/点滅のステータスをデジタルデータ化してみたいと思います。
まずは大まかなデータの流れについては以下となります。

![流れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/1d85eb68-d85f-5d3f-c558-876c82220ec3.png)


今回は上図の赤線で囲っているクラウドに送信する前の積層信号灯の点灯を光センサーでとらえてKC4に1(点灯)0(消灯)を認識させるまでを作ってみたいと思います。

## KC4に1(点灯)0(消灯)を認識させる
KC4には接点、CAN、RS-485、RS-232Cなどの有線やBluetoothなどの無線通信が備わっております。今回は接点を使用した有線通信で積層信号灯の点灯/消灯をKC4に認識させてみます。

## 接点入出力について
KC4の入出力ポートとして
10pin/11pinが汎用入出力ポート
13pinが汎用入力ポート
の3ポート利用可能で入力回路はKC4内部で3.3Vにプルアップされており接続先はオープンコレクター回路もしくはオープン接地のスイッチデバイスにしてくださいとありますのでGNDの電位にスイッチングさせることで3.3V(0)、0V(1)としてKC4に認識させる必要があります。

## 回路
今回はお試しとしてオープンコレクター出力のコンパレータとCdSセルの光センサーを使って3.3V(0)、0V(1)としてKC4に認識をさせてみます。
明るくなるとCdSセルの電圧が上がり、コンパレータの閾値より電圧が高くなるとコンパレータIC内部でコレクターからエミッタに繋がり、GNDに落とす感じで回路を考えてみました。

:::note info
・CdSセルとは照射する光量によって抵抗値が変化する素子で暗くなると自動で点灯する街路灯や車のオートライト等にも利用されています。カドミウムが含まれるためRoHS指令の規制によりEUへの輸出はできません。
・コンパレータICとは二つの入力電圧(又は電流)のどちらかが大きいか小さいかによって出力が切り替わるICで、正しい入力がされているか比較をしたりアナログ信号をデジタル信号に変換できたりします。
:::

![回路図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/6ad80a6c-62b9-a20e-4e53-0848a3d64497.png)

ライトを当てた状態と当てない状態のCdSセルで一番小さな変化の抵抗値が0Ω～80kΩでしたのでそれに合わせて抵抗分圧でコンパレータICに入力する電圧を作っております。
明るいとき：20k/(0+20k)×5V＝5V
暗いとき：20k/(80k+20k)×5V＝1V
閾値：20k/(10k+20k)×5V＝3.3V
今回は単純にブレッドボード上でペンライトの光を使用して抵抗値を見ており積層信号灯で見る際は抵抗値が変わってくると思いますので別途抵抗の調整は必要と思われます。
上記回路構成を赤黄青の3回路分ブレッドボードに搭載してみたのが以下となります。

![ブレッドボード接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/83506cb3-6638-ccea-d69c-3e36b655b90a.png)

※使用したコンパレータはμPC339Cの4回路入りの1個使用で、他は上記回路図3回路分接続しております。CdSセルの周囲の明るさに対する反応が良すぎたためチューブを切ってかぶせることで遮光しています。配線のごちゃごちゃはご容赦ください。

## KC4のブロックプログラム
KC4ではブロックプログラミングというローコードでパズルのように処理を組み合わせてのプログラム作成ができます。
今回光センサーからKC4にデータを送りKC4側で認識・表示するところまでをブロックプログラミングで作成してみます。
※ブロックプログラムはキッティングツールのレシピツール起動後ブラウザのレシピツール上で行います。詳細は[**ユーザーガイド**](https://www.kyocera.co.jp/prdct/telecom/office/iot/guide/kc4-c-100a_kc4-c-101a/guide02.html#sec1)のキッティングツールを参照ください。
また、ブロックプログラミングについては[**KC4-C-100Aブロックプログラムをはじめよう**](https://www.kyocera.co.jp/prdct/telecom/office/iot/development/download/start_programing.html)や[**レシピ一覧**](https://www.kyocera.co.jp/prdct/telecom/office/iot/recipe/)を参考に作っています。
処理フローとしては以下となります。

![LCD表示処理フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/fcb5ae89-40d6-a282-5ad7-7e19e76d99f7.png)


1秒間隔で光センサーの状態を監視しながら点灯消灯の変化点でKC4のLCD画面に2進数3桁表示させるプログラムです。
ブロックプログラムは以下となります。

![ブロックプログラム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/39bfd01e-02e3-4f65-70f5-de17e165278c.png)


上画像のブロックプログラムを作成後レシピ実行ファイルを作成してKC4に書き込みます。
※LCDの表示部分のプログラムはLCDブロックへ入力した文字を表示可能なので点灯ステータスに対応した000～111をifで分岐してLCD表示する様に作成してます。
書き込み完了しましたら光センサー基板と接続して壊れないよう祈りつつ電源を入れてみます。

![image1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2748038/c339cdce-09ac-aaae-62cb-ef8405174604.gif)

ライトの点灯/消灯で値の変化をKC4で受け取ることができました。

## まとめ
CdSセルセンサーの明るさに対する反応が良すぎたり物によって抵抗値が違っていたりするのでチューブをかぶせたりと調整が必要でしたがなんとか認識できるようになりました。チャタリングがあるのか(又はKC4のデータの取得タイミングなのか)認識が遅れる事もあったので正確性を上げるためにもノイズ除去の回路の追加をしてみるのもいいのかなと感じました。ここはまた勉強ですね。（オシロスコープで波形を見てみたい・・・）
ということで次回はKC4で受け取った赤・黄・青の3つの点灯/消灯の情報に変化した時間と色のステータスを加えた5項目をSORACOM経由でGCPに送ってみたいと思います。