Contents
圧力計などのゲージ読取機
産業界一般でIoT 化が加速されてきています。一般的に、センサで測定したデータをデジタルデータとして処理し、そのデータから有効な情報を読取り、産業の効率化を図ろうという動きです。この場合のデータを収集するセンサにあたるものとして、R-MSM などに代表されるデジタルセンサがある一方で、この記事で紹介するような従来から存在している機器のアナログメータなどがあります。
全て装置を全く当たアしいものに変えてしまうのではなく、従来からあるアナログメータなどのデータをどうやってデジタル化するかということが IoT 化を推進する中で求められています。
その一つの解として、メータを画像処理で読取り、デジタル数値に直すというような需要があります。
ここでは、圧力計のアナログメータをデジタル数値化するゲージ読取機を紹介します。
1. ゲージ読取機概要
ゲージ読取機は、光源とカメラとマイコンとして機能するRaspberry Pi Zeroとを内蔵し、図1のような筒状の形状をしたセンサです。筒の部分を図2のようなアナログゲージにかぶせ、電源を入れると定期的にゲージ部の写真を撮ります。そして、画像認識処理によりデジタル値に変換します。その後、BLE(Bluetooth Low Energy)の通信方式でPDH(Physical Data Hub)へ送ります。
図1 ゲージ読取機
図2 アナログゲージ
2. ゲージ読取機のハード構成
ゲージ読取機の断面イメージ図を次に示します。左側にアナログゲージをはめ込みます。右側に光源のLEDが5つ円形基板に同心円状に取り付けられています。円形基板の中央部には穴をあけてカメラが覗くようにしてあります。カメラは、Raspberry Pi Zeroとフラットケーブルで接続されています。電源はRasberry Pi ZeroのUSB電源に5Vを供給します。
2-1. Raspberry Pi Zero + カメラ
Raspberry Pi ZeroとRaspberry Pi Camera V2を使用しています。Raspberry Pi Zeroの電源としてUSB 5V 3A電源を使用します。
また、Raspberry Pi Zeroでは画像処理を行いますので、CPUにヒートシンクを装着しています。
2-2. LEDと円形基板
LEDには、抵抗内蔵5mmLED 5V 白色 OSW5DK5B62A-5Vを使用しています。Raspberry Pi の5V GPIO から電源を取り、GPIO のON/OFFでLED照明のON/OFFを実現しています。
LEDは、円形基板(両面TH丸型ユニバーサル基板 50.8mm)に同心円状に5個配置しています。消費電流は、LED1個あたり12mA@5Vであり、12mA×5個 = 60mAです。円形基板の中央部は、カメラを挿し込むために円形に穴をあけます。
2-3. ケース
ケースは、3Dプリンタで作成します。以下の様な7つのパーツに分かれており、これらを組み合わせて作成します。
3. ゲージ読取機のソフトウェア
ゲージ読取機のソフトウェアは、Raspberry Pi Zeroに関するものです。OS関連とツール関連に関して説明します。
3-1. Raspberry Pi ZeroのOS
Raspberry PiのOSは、「buster」を選択しました。最新版ではOpenCV不具合のためうまく動作しなかったためです。
また、初期設定(含むWiFi)、アップデートを済ませてください。
その後、パスワード変更、カメラ使用を設定(焦点距離は、10cmに手動調整)して下さい。
VNC サーバーを設定し、PCからVNCビューワにてリモート操作を実施することを推奨します。
注)パイソンプログラムは、ラズパイ付属のthonnyでの実行を推奨します(Python3の自動選択)。
3-2. Raspberry Pi Zeroのツール
Raspberry Pi Zeroへのツールは、以下のツールをインストールしてください。端末から以下のコマンドを入力してインストールしてください。
$ sudo apt install –y fcitx-mozc …日本語文字
$ pip3 install opencv-python …画像認識用ライブラリー
$ pip3 install numpy==1.21.6 …同上に必須なVer(インストールしたOpenCVのVerにより、異なる可能性あり)
$ sudo apt install –y libatlas3-base …OpenCVで使用されるライブラリー
$ sudo apt install –y samba …パッケージは「いいえ」を選択、PCとファイル共有(プログラム移動など)
$ sudo apt-get install –y Bluetooth bluez blueman …BLE通信用ライブラリー
$ pip3 install pybluez, bleak …パイソンからBLE通信利用のライブラリー
実行時のツールのバージョン
特に、OpenCVとnumpyのバージョンは注意が必要です。
4. ゲージ読取機の動作
ゲージ読取機が写真からどのように数値を読み取っているかを簡単に説明します。
次の図で示すように、円形のゲージの下方向を0°として、最小値0kPaと最大値2.5kPaの角度を調べます。
その角度の差と圧力の関係から、1°あたりの圧力が求まります。
この結果から、赤いゲージの0°からの角度が分かれば、圧力値は計算できます。
そこで、ゲージの値を写真に撮り、画像処理をしてゲージを抽出します(下の図参照)。そして真下との角度を算出し、圧力値を計算して求めています。
5. PDHとの通信
ゲージ読取機とPDHの間は、Bluetoothで接続してデータの通信を行います。具体的には、ゲージ読取機の中でRaspberry Pi ZeroがPythonで画像処理を行った結果を、json 形式に変換してbluetoothのSPP(Serial Port Profile)で送信しています。
PDH側では、同様にpythonでbluetoothのSPPで送られてきたデータを受信します。そのため、ゲージ読取機のbluetoothとPDHのbluetoothでペアリングを実施しています。
その後、pythonの中で、http requestのPOSTメソッドとしてNode-REDにデータを送ります。そのために、PDHのpythonでは、urllib.requestライブラリを使用しています。PDH内のNode-REDでは、http inノードとhttp responseノードを使って受信しています。
送られてきたjsonデータの受信の様子を次に示します。送られてきたjsonデータをObjectと認識されているのが分かります。
最後に、ダッシュボードの表示画面を示します。