1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラズパイ入門まとめ:PLC水位監視 + 警報LED & カメラ画像処理

1
Posted at

ラズパイ入門まとめ:PLC水位監視 + 警報LED & カメラ画像処理

Raspberry Pi の定番テーマを、実際にコードを動かしながらまとめて解説します。この記事では PLC水位監視 + 警報LED/カメラ画像処理 の2テーマを扱います。

各テーマは ブラウザ上の仮想Raspberry Piシミュレーターで、コードを編集しながら自分で動かせます。

1. PLC水位監視 + 警報LED

概要

PLCの水位センサを監視し、閾値超過で警報LEDと排水弁を制御。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。

プログラムの内容(ざっくり)

PLCの保持レジスタ0から水位を1秒ごとに読み取り、閾値THRESHOLDを超えたら警報LED(GPIO17)を点灯し、PLCの排水弁(コイル0)を開きます。実TCPソケットのModbus/TCPで通信します。

# === 仮想PLC 水位監視システム ===
# PLC(保持レジスタ0)のタンク水位を1秒ごとに読み取り、閾値を超えたら
# 警報LED(GPIO17)を点灯し、PLCの排水弁(コイル0)を開く。
# ※ plc は接続済みの Modbus/TCP クライアント。数値を編集して挙動を変えてみよう。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)        # 警報LED

THRESHOLD = 700                 # ← この閾値を変えると挙動が変わる

while True:
    level = plc.read_register(0)
    print(f"水位 = {level} cm")
    if level > THRESHOLD:
        GPIO.output(17, GPIO.HIGH)
        plc.write_coil(0, True)     # 排水弁OPEN
        print(f"  警報! {level} > {THRESHOLD} -> 排水弁OPEN")
    else:
        GPIO.output(17, GPIO.LOW)
        plc.write_coil(0, False)    # 排水弁CLOSE
    time.sleep(1)

配線

配線図(PLC水位監視 + 警報LED)

GPIO17 ──[330Ω]──▶|(赤LED 警報灯)──── GND
eth0 (RJ45) ══════ LAN ══════ RJ45 PLC
PLC 保持レジスタ0  →  タンク水位センサ (cm)
PLC コイル0        ←  排水弁(Piが制御)

シェルの出力

実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。

🍓 Raspberry Pi シェル

pi@raspberrypi:~ $ python app.py
水位 = 549 cm
水位 = 600 cm
水位 = 681 cm
水位 = 726 cm
  警報! 726 > 700 -> 排水弁OPEN
水位 = 633 cm
水位 = 683 cm
水位 = 731 cm
  警報! 731 > 700 -> 排水弁OPEN

🏭 PLC (Modbus/TCP)

SCAN#001  DB1.水位=549cm  Y0.排水弁=CLOSE
SCAN#002  DB1.水位=600cm  Y0.排水弁=CLOSE
SCAN#003  DB1.水位=640cm  Y0.排水弁=CLOSE
SCAN#004  DB1.水位=681cm  Y0.排水弁=CLOSE
SCAN#005  DB1.水位=726cm  Y0.排水弁=CLOSE
SCAN#006  DB1.水位=676cm  Y0.排水弁=OPEN
SCAN#007  DB1.水位=633cm  Y0.排水弁=OPEN
SCAN#008  DB1.水位=683cm  Y0.排水弁=CLOSE
SCAN#009  DB1.水位=731cm  Y0.排水弁=CLOSE
SCAN#010  DB1.水位=684cm  Y0.排水弁=OPEN

計測値(タンク水位(cm))の推移:

chart

コードを編集したらどうなるか

THRESHOLDを下げると早い段階で排水が始まり、水位は低い位置で安定します。上げると高い水位まで許容します。閾値付近で水位が振動する様子が変わります。

まとめ

Modbus/TCPでPLCと双方向通信し、しきい値制御で水位を保つ基本形です。産業機器連携の入り口です。


Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。


2. カメラ画像処理

概要

毎フレームをキャプチャし、最も明るい領域(動く光点)を検出して枠表示・LED点灯。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。

プログラムの内容(ざっくり)

毎フレームをキャプチャし、最も明るい領域(動く光点)を検出します。面積がMIN_AREA以上なら検出枠を描き、検知LED(GPIO17)を点灯します。

# === カメラ画像処理(動体・輝点検出)===
# 毎フレームを取得し、最も明るい領域を検出。面積が一定以上なら
# 検出枠を描き、検知LED(GPIO17)を点灯する。THRESH/MIN_AREA を編集してみよう。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)

THRESH = 150      # 明るさしきい値
MIN_AREA = 12     # 検知に必要な画素数

while True:
    frame = camera.capture()          # 画像取得(自動表示)
    x, y, v = frame.brightest()       # 最も明るい画素
    area = frame.count_above(THRESH)  # しきい値以上の画素数
    print(f"最輝点=({x},{y}) 値={v} 面積={area}")
    if area >= MIN_AREA:
        frame.mark(x, y)              # 検出位置に枠
        GPIO.output(17, GPIO.HIGH)
        print(f"  物体検知! 位置=({x},{y})")
    else:
        GPIO.output(17, GPIO.LOW)
    time.sleep(0.4)

配線

構成(カメラ + 検知LED)

CSI カメラ ── Raspberry Pi カメラポート
GPIO17 ──[330Ω]──▶|(検知LED)──── GND

シェルの出力

実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。

🍓 Raspberry Pi シェル

pi@raspberrypi:~ $ python app.py
最輝点=(25,14) 値=242 面積=13
  物体検知! 位置=(25,14)
最輝点=(22,17) 値=255 面積=11
最輝点=(18,18) 値=239 面積=13
  物体検知! 位置=(18,18)
最輝点=(14,18) 値=244 面積=12
  物体検知! 位置=(14,18)
最輝点=(10,17) 値=255 面積=9
最輝点=(8,14) 値=249 面積=12
  物体検知! 位置=(8,14)
最輝点=(7,11) 値=236 面積=13
  物体検知! 位置=(7,11)
最輝点=(9,8) 値=244 面積=14
  物体検知! 位置=(9,8)
最輝点=(12,6) 値=247 面積=11

📷 カメラ (PiCamera)

frame #001 captured 32x24
frame #002 captured 32x24
frame #003 captured 32x24
frame #004 captured 32x24
frame #005 captured 32x24
frame #006 captured 32x24
frame #007 captured 32x24
frame #008 captured 32x24
frame #009 captured 32x24
frame #010 captured 32x24

計測値(検出面積(px))の推移:

chart

コードを編集したらどうなるか

THRESHを上げると明るい対象だけに反応し、MIN_AREAを上げると大きな対象だけを検知します。感度を調整できます。

まとめ

しきい値処理と領域検出という画像処理の基礎です。監視カメラや物体検知の入り口です。


Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。


おわりに

どちらもラズパイの基礎として役立つテーマです。気に入ったらLGTM・ストックしていただけると励みになります。他のテーマも順次まとめていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?