実践IoT:電力計の値をリアルタイムに取り込みたい

IT・DX

最近のネットに接続できる製品やシステムなら、データを取得して保存するのはそれほど難しくないのですが、昔の機器でネットに対応していない、あるいは、最新機器でも、データをメーカー以外に外部保存できない、あるいは、USBメモリやSDカード経由などで手間がかかる場合があります。
ラズベリーパイ(ラズパイ、Raspberry Pi)があれば工夫することでリアルタイムでデータを取り込むことができます。

ChatGPT(AI)に聞いてみたら、、

ChatGPT先生に相談しました。
———————
質問(プロンプト):デジタルメータの数字を取り込みたくどうすればいいですか?

ChatGPT
デジタルメータの数字を取り込む方法はいくつかあります。具体的な方法は、使用しているデジタルメータの種類や出力インターフェースに依存します。一般的な方法を以下に挙げます。

シリアル通信(RS-232やUSBなど)
多くのデジタルメータはRS-232やUSBポートを備えており、これを使用してPCと接続できます。適切なドライバと通信プロトコルを使用してデータを読み取ります。
必要なもの: 通信ケーブル、ドライバ、適切なソフトウェア(例: Pythonのpyserialライブラリ)

データロガー
データロガーを使用して、メータからのデータを収集し、後でPCに転送することができます。
必要なもの: データロガー、インターフェースケーブル、データ解析ソフトウェア

ネットワーク接続(EthernetやWi-Fiなど)
一部のデジタルメータはネットワーク接続をサポートしており、LANやWi-Fi経由でデータを取得できます。
必要なもの: ネットワーク設定、データ収集ソフトウェア

カメラと画像処理
メータの表示をカメラで撮影し、画像処理技術を使用して数字を抽出します。これは、メータにデジタル出力インターフェースがない場合に有効です。
必要なもの: カメラ、画像処理ソフトウェア(例: PythonのOpenCVライブラリ)
———————
しっかり分かりやすく答えてくれてますね!

では試しに電力メータの数字の取り込みを検討します。(我が家の電力メータはいつのまにかアナログ回転式からデジタル表示するメータに替わっていました、、、)

電力メータ

ラズパイでどうすればいいのかChatGPTに聞いてみた

———————
質問(プロンプト):
Raspberry piにUSBカメラを繋いで、デジタルメータの写真をとり数値化するプログラムを教えてください

ChatGPT
Raspberry PiでUSBカメラを使用し、デジタルメータの写真を撮影して数値化するプログラムを作成する方法について、基本的な手順を説明します。この例ではPythonとOpenCVを使用します。
必要なもの:
Raspberry Pi (最新のRaspberry Pi OSが推奨)
USBカメラ
Pythonプログラミング環境
OpenCVライブラリ (opencv-pythonパッケージ)

手順:
(以下pythonのプログラムコードがコピーできる形で紹介されているので省略)

画像処理の詳細:
デジタルメータから数値を正確に読み取るためには、以下のような手法が役立ちます。
画像の前処理: ノイズの除去、二値化、エッジ検出など。
物体検出: デジタルメータのエリアを特定する。
文字認識 (OCR): 数字を認識するためにOCRライブラリ(例えばTesseract)を使用する。これらの手法を組み合わせて、デジタルメータの数値を正確に読み取ることができます。

注意点:
Raspberry Piの性能やカメラの性能によっては、リアルタイムでの処理が制限される場合があります。処理が遅い場合は、撮影と処理を分けて行う方法を検討することが重要です。この基本的なスケッチを元に、具体的な画像処理手法や数値読み取りのための詳細なアルゴリズムを適用して、デジタルメータから数値を取得するプログラムを完成させてください。
————————
ChatGPTでPythonのプログラムコード例がコメント付きで紹介されているので、このテキストをラズパイにコピーし、少々手直しすれば動作する試作プログラムが数時間で完成します。(いい時代になりました)
ただ今回の場合、最新のラズパイにOpenCVライブラリを入れる段階でてこずり、トライアルを動かすまでに二日かかりました。ライブラリの入れ方もChatGPTに聞けば教えてくれますが、最新OSでは間に合っていないようで(GPT3.5だから?)、ネットでの検索結果も参考にしました。

実験結果 → 反射光で意外に難しい

電力メータの真正面にUSBカメラをつけ、ラズパイ4をモバイルバッテリーで起動し、WiFiで家庭LANに接続、リモートディスクトップでiPhoneやPCでコントロール・撮影します。

PCからラズパイにリモートで入り、制御・取り込み

PCからVNCでラズパイに接続し、プログラムを走らせ、画像を確認します。リモートの画面キャプチャで左上がUSBカメラの画像、中央が2値化した結果、右下がコマンド入力やメッセージ出力のターミナルウインドウになります。
電力メータが屋外にあり、また、透明ケースで覆われているために、外光の映り込みが激しく、画像を見ながらカメラやメータの周囲を紙で覆いましたが、それでも反射率にバラつきがあり2値化はうまくいきませんでした。
カメラを固定してしっかりフードすれば光の乱反射も減り、2値化の閾値も決められると思うのですが、今回は簡易実験でフードを固定することができず断念しました。

室内で、手書きの数字で実験

それでは、室内で紙に書いた数字を数値化できるか実験。
このときも部屋の明るさで反射率がかわるので、画像をみながらパラメータを調整します。
いいところを見つけると、2値化も綺麗にでき、数字を数値として読み取ることができました。
大成功!
ここまでできれば、あとは、読み取るタイミングを決め、結果をサーバに保存したり、メールで知らせることは難しくありません。
ネットではさらに応用し、アナログメータの針の位置・数値を読み取ったり、画像認識で部品の外観不良検出もラズパイで行った事例がありました。

機会があれば次はそのような取り組みをしてみたいと思います。

ご不明な点・御意見等コメント大歓迎です!

コメント