• conect+

積層信号灯の発光状態をRaspberryPiで検出してconect+で可視化しよう

最終更新: 2月1日

 積層信号灯は工場のラインの稼働状況や、装置状況などの可視化で多用されています。今回は、簡易的な工場IoTを実現する一つの手段として、すでに設置されている積層信号灯の発光状態をRaspberryPiにつないだ光センサーで検出し、conect+にデータを送信しシグナルウィジェットで可視化してみます。


※本記事では簡易的な後付による稼働状況可視化の例としてご紹介します。確実にデータ取得し管理するには生産ライン全体の設計を含めたご検討を実施ください。



1.概要

 以下の図に示すように、積層信号等の発光状態を光センサ(CdSセンサ)により検出し、RaspberryPiとGroveHatを用いてAD変換後、conect+StudioへWebAPIを経由して送信する構成をとります。

 以下に主要部品を一覧化しています。今回のRaspberryPiには3modelBを用いて構成しまます。積層信号灯にはパトライトのLR4シグナル・タワー(LR4-302WJNW-RYG)を使います。こちらには24V電源を仕様にあわせて投入することで、各色のON・OFFが可能になります。(ここでは点灯の詳細回路については説明は割愛します)

 アナログな手段となりますが、積層信号灯のON/OFFを検出するのには外付けで光センサをつける構成をとります。光センサには照度により抵抗値が変化するCdSセルを用いて実装します。照度の抵抗値はアナログ値となりますので、RaspberryPiでアナログ値を取得するためにAD変換用拡張ボードとしてGROVEのベースHAT for RaspberryPiを利用します。


2.RaspberryPiとGROVEベースHatをセットアップする

 まずRaspberryPi3のセットアップを行います。RaspberryPiのセットアップ方法は複数ありますが、以下のURLのRaspberryPi公式の「Raspberry Pi Imager」を使うのが便利です。

https://www.raspberrypi.org/software/



 フォーマットしたSDカードを準備し、Raspberry Pi OS(32-bit)をインストールしましょう。最初の起動後、各種インストールソフトウェアのアップデートが促されますので少し時間がかかりますが実施しておきましょう。


 次にRaspberryPiでAD変換を実施するためのGROVEベースHATを接続し、必要なライブラリの準備を行います。RaspberryPiにはHATと呼ばれる拡張モジュールが様々な企業により発売されていますが、こちらのSeeed社のHATはGROVE対応の様々な種類のセンサなどのモジュールを簡単にRaspberryPiで扱えるようにしてくれる拡張ボードです。

GROVE - ベースHAT for Raspberry Pi


RaspberryPiのセットアップを完了後、Seeed社の公式ページの手順に従ってセットアップをしてください。

https://wiki.seeedstudio.com/Grove_Base_Hat_for_Raspberry_Pi/


準備されている「Online one-click installation」で簡単に各種ライブラリのセットアップが可能です。以下コマンドをRaspberryPi上で実行ください。

curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/install.sh | sudo bash -s -

最終的に以下のように表示されればインストール成功です。

Successfully installed grove.py-0.5
#######################################################
Lastest Grove.py from github install complete   !!!!!
#######################################################

また、RaspberryPiの設定画面から「I2C」「SPI」を有効に設定しておいてください。

※この拡張ボードとRaspberryPiが通信をできるようにするためです。


3.光センサで信号灯の照度を計測する

 これから光センサから照度の情報を取得する方法について説明します。今回は照度によって抵抗が変化するCdSセンサ(GL5528)を用います。以下図に示すように抵抗を途中に入れて分圧させることにより、ADpinの部分の電圧が変化します。ここをRaspberryPi側のAD変換ポートで定期的に電圧を計測し、積層信号灯のON・OFFを検出します。

       CdS光センサ(GL5528)      照度検出の分圧回路


今回は以下の写真のようにCdSセンサと抵抗を接続した配線を必要分だけ作成し、各ライトごとにCdSセンサを貼り付けます。

以下写真の基板上の4つのコネクタはA0~A7がアナログ入力に対応したポートになっており、RaspberryPi側から電圧値を計測が可能になります。こちらに接続できるようにGroveコネクタを経由して、それぞれGND、VCC、対応するA0~7のポートに接続します。

※Groveコネクタ対応ケーブルも市販されているので、それを切って今回のセンサに接続し直すのが手軽に作る方法の一つです。上記の抵抗などを含めて接続の際は短絡しないように注意し、絶縁テープ等の絶縁処理を忘れないよう実施してください。


以下、Pythonコードを実行してA0ポートでAD変換が実施できるか以下サンプルを実行し、試してみてください。先程インストールしたgroveライブラリによりadcをインスタンス化し、read_voltage(ポート番号)によりAD変換値を取得することができます。

※後半のexceptはキーボードで中止、IOエラーなどが発生した場合のエラー処理です。

【cplus_adc.py】

from grove.adc import ADC
import time

while True:
    try:
        # adc update
        adc = ADC()
        adc_value = adc.read_voltage(0)                
        print("ADC value", "\t", adc_value)
        time.sleep(1)

    except (IOError, TypeError) as e:
        print(str(e))

    except KeyboardInterrupt as e:
        print(str(e))

上記コードをRaspberryPi標準のPythonIDEのThonnyで実行した結果です。

Shell窓でAD変換値を1秒ごとに更新できることが確認できれば成功です。

実際のAD変換値を確認しながら、それぞれの積層信号灯につけた赤・黄・緑のセンサの値の変化を確認します。周囲の証明状況などにも影響されるので、適切な範囲でONかOFFかの閾値をここで設計してください。


4.conect+Studioにデータを送る設定をする

 前章ではセンサデータを取得できることを試しかめましたので、これからそのデータをconect+Studioにデータを送信する準備を始めます。まず、conect+Stduioの「データアダプター」画面から「データアダプターを追加」「WebAPI」を選択します。

データアダプター名を入力してください。こちらの項目は今後様々なデータを管理する上で、わかりやすい名前にしておくことをお勧めます。

新たに生成されたデータアダプターの右に並ぶアイコンから「デバイス」を選択します。

「デバイス」管理画面に遷移しますので「デバイスを追加」を選択し、センサーを追加します。今回はデバイスIDを「RasPi01」、名称を「積層信号灯可視化」、発光色の情報を一つ送るので「発光色」センサIDを「signal-color」を追加し、「作成」を押下します。

再び「データアダプター」から"?マーク"のリファレンスを押下すると、GET/POSTに必要な情報がまとめられています。今回つくったデータアダプタより、URL情報をコピーしておきましょう。


5.積層信号灯の色情報をconect+に送信する

 この章では、積層信号灯の状態を検出した後、RaspberryPiからPythonコードでconect+に準備したデータアダプタに対して信号灯の発光色データを送信します。

以下にサンプルプログラムを示します。内容としては、5秒ごとにADC値をそれぞれADポートの0、2、4の値をアップデートし、その値に応じて事前に決めておいた閾値と判定を実施。赤なら1、黄色なら2、緑なら3を送信し、それ以外なら0を送るプログラムです。post_data関数のurlには必要なWebAPIリファレンスからコピーして対応ください。


※pytzを使用するため、以下を事前にインストールして実行してください。

sudo pip3 install pytz

【cplus_signalsample.py】

import pprint
import json
import requests
import time
from pytz import timezone
from datetime import datetime
from grove.adc import ADC

# Web API define
DEVICE_ID = 'RasPi01'
SENSOR_LIGHT_COLOR = 'signal-color'

# ADC pin define
ADC_RED = 0
ADC_YELLOW = 2
ADC_GREEN = 4

# light detect threshold
TH_RED = 2300
TH_YELLOW = 2300
TH_GREEN = 1500

# post method
def post_data(device_id, sensor_id, sensing_at, value):
    url = 'https://api.studio.conect.plus/sensingData/XXXX/XXXXX/' + device_id + '/' + sensor_id + '/'
    print(url)
    response = requests.post(
        url,
        json.dumps({
            'sensingAt':sensing_at,
            'value01':value}),
        headers={'Content-Type': 'application/json'})
    pprint.pprint(response)


def now_utc_str():
    return datetime.now(timezone('UTC')).strftime("%Y-%m-%d %H:%M:%S")

while True:
    try:
        # adc update
        adc = ADC()
        adc_red = adc.read_voltage(ADC_RED)
        adc_yellow = adc.read_voltage(ADC_YELLOW)
        adc_green = adc.read_voltage(ADC_GREEN)
        
        # red:1
        if   adc_red > TH_RED:
             flag_color = 1
        # yellow:2
        elif adc_yellow > TH_YELLOW:
             flag_color  = 2
        # green:3
        elif adc_green > TH_GREEN:
             flag_color  = 3
        #else:0
        else:
             flag_color = 0
        
        print("LightColor", "\t", flag_color)
        
        # post data
        now = now_utc_str()
        post_data(DEVICE_ID, SENSOR_LIGHT_COLOR, now, flag_color)
        time.sleep(5)

    except (IOError, TypeError) as e:
        print(str(e))

    except KeyboardInterrupt as e:
        print(str(e))

 Thonnyで実行した結果が以下図です。正しくデータを送信できていればレスポンスとして200が帰ってきます。

 conect+Studioの「データ」から今回作成したデータアダプタとデータを選択し「検索」を押下してください。正しくデータが送信されている場合は計測日時等が管理画面で確認することができます。


6.conect+Studioで情報を可視化する

 最後にダッシュボードにデータを並べて可視化しましょう。「ダッシュボード」を選択し「新しいページを追加」します。ページ名を自由に指定し、今回はグリッドレイアウトを選択して「保存」を押下します。

 今回は積層信号灯の状態表示に便利な「シグナルウィジェット」と「アラームグラフ」を選択し、ダッシュボードに追加します。

 追加したシグナルウィジェットに値が1なら赤色点灯、2なら黄色点灯、3なら緑色点灯の設定を行います。まずON時とOFF時それぞれのカラーを設定し、そのカラーとなる条件を指定する流れとなります。以下に赤色の設定の例を示します。同様に他の2色を対応ください。

 次にアラームグラフの設定をします。アラームグラフもシグナルウィジェットと同様に、ステータスごとの色の設定と、その条件での値を指定していきます。以下に緑色の設定を示します。同様に、赤や黄色の条件も設定してください。

 これらの設定を完了させると、以下のようにシグナルウィジェットとアラームグラフで積層信号灯の状態の可視化ができるようになります。

細かいウィジェットの設定方法については以下リファレンスをご参照ください。


「シグナルウィジェット」の使い方


「アラームグラフ」の使い方





223回の閲覧0件のコメント
 

conect.plus Corp. - IoT Data Design

東京都港区海岸1-7-1 東京ポートシティ竹芝 オフィスタワー36階

購読登録フォーム

  • Google Places
  • Facebook

© conect.plus Corp. All Rights Reserved.