はじめに
ラズパイで水位がどれくらいかを検知するためにフロートスイッチを使ってみました。
ラズパイでフロートスイッチを使って水位の測定を行う方法についての記事が少なかったので、備忘録もかねて投稿します。
フロートスイッチとは
動作原理
水位によって浮きの高さが変わり、その位置によって電気回路が開閉されます。
今回はラズパイを使って電気回路の開閉を検知することで水位の測定を行いました。
詳しい動作原理は下記サイトを参照ください。
フロートスイッチの動作原理
水位センサーモジュールと比べて
電子工作で水位を測定できるセンサーとして、水位センサーモジュールがあります。
しかし実際に使ってみたところ、水から出した後も表面に残っている水滴によって水中にいると判定されました。
"水分があるかどうか"の検知は水位センサーモジュールの方が得意ですが、
"水面がどこにあるか"の検知はフロートスイッチの方が得意だと思われます。
テスト
コップにフロートスイッチを設置し、あふれない程度の高さに水位が達するとLEDが点灯するようにしました。
フロートセンサー
今回使用したフロートセンサーのスペックの一部を載せます。
詳しくはリンクを参照ください。
メーカー:SEAFRONT
動作電圧(おそらく最大電圧):110V
動作電流(おそらく最大電流):3A
フロートスイッチ販売ページ
電子回路
写真で申し訳ないです、、、
フロートスイッチの抵抗値は1000Ωにしましたが、電流が3Aを超えないものであればなんでもいいと思います。
(100Ωでも動作しました。)
プログラム
import RPi.GPIO as GPIO
import time
FloatSwitchGpio = 18 #フロートスイッチ用端子番号
LedGpio = 16 #LED用端子番号
MeasurementTime = 60 #測定回数
WaitTime = 1 #測定待ち時間
#端子の設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(FloatSwitchGpio, GPIO.IN)
GPIO.setup(LedGpio, GPIO.OUT)
#フロートスイッチのテスト
for i in range(MeasurementTime):
#フロートスイッチの状態を取得
#水位が足りていないと0が、水位が目標に達すると1が代入される
WaterLevel = GPIO.input(FloatSwitchGpio)
#コンソールに出力
print(WaterLevel)
#水位に応じてLEDを点灯
if WaterLevel == True:
GPIO.output(LedGpio, True)
else:
GPIO.output(LedGpio, False)
time.sleep(WaitTime)
GPIO.cleanup
1秒ごとにフロートスイッチの状態を取得し、コンソールへ値を出力し、状態に応じてLEDを点滅させています。
結果
フロートスイッチのテスト動画 pic.twitter.com/hXGIJjzXo9
— Nanana (@hamadaira0412) March 26, 2023
水面の上昇に伴い、浮きも上昇しました。
浮きがフロートスイッチの上限に達するとLEDが点灯しました。
動画に映っていませんが、一定時間放置するとフロートスイッチが上限に達しているにもかかわらずLEDが点滅を繰り返しました。
コンソールを確認すると0(水位が足りていない)との表示もされていました。
フロートスイッチが安かったので感度が悪いのかなと思っています。
次は少し高いものを買って試してみようと思います。