Help us understand the problem. What is going on with this article?

Raspberry Pi とリード線だけで漏水センサーを作る

More than 3 years have passed since last update.

はじめに

この度の水害で被害にあわれました皆様に心からお見舞い申し上げます

報道されているような大きな被害だけではなく、普段は水がでないような所から急に水がでて大変だったというような小さなものまで含めますと本当に多くの方が難儀をされたのではないかと存じます

大きな災害の減災のためなら数十万もするセンサを設置して監視することも可能でしょうが、 普通の人が普通の生活のなかでちょっと気になる場所に水がでていないかを監視するのにはあまり現実的でないかもしれません

私も擁壁の水抜き孔からドバドバと水が出て大変な目に合われた方のお話を伺って、 とにかく安く漏水センサーを作れないか との思いにかられ、こちらの記事などを参考にさせていただき掲題の件、試作してみたところ、良い結果を得る事が出来ました
詳細とは言いがたい記載で大変恐縮なのではございますが、後で自分で使う目的でこちらに置かせていただいた次第でございますので、間違っている所などございましたら御忌憚なく御指摘いただければ大変ありがたいです

ハードウェア構成

と言う程大げさなものでもないのですが、ダブルコードの先っちょの被覆をちょびっと剝いただけです

スクリーンショット 2016-09-16 11.02.05.png

これを GPIO につなぐだけです
スクリーンショット 2016-09-16 12.04.59.png

この構成で 水を検知して SMS で通知するデモのビデオをこちらにご用意いたしました

論理構成

これを RPi の 3.3v pin とか、Output mode で On な pin (例えば GPIO 27 下図の GPIO 27番とか) と、Input mode で off な pin につないで on になる事を監視します

スクリーンショット 2016-09-01 15.26.52.png

要は水をスイッチ代わりに使っている だけです。 これはシンプル!

gpio が on になったら ブザーを鳴らすなり、 curl で server に POST する なり、受け取ったサーバーで Twillio をつかって 携帯に音声電話や SMS で通知するなりすると 安価だけど立派な漏水監視システム になります

monitorでも POST 受け取って表示するようにしてみたら良い感じになりました

スクリーンショット 2016-09-16 15.08.38.png

なんで こんなのでうまくいってしまうのか(Internal Validity ですね、ここでまちがってたらどうしょうもないです)、 どこまで(水質が違ったり、ケーブルをのばしたり) うまくいくものなのか(External Validity です。提案手法の提要範囲を考えるのに必須ですね)については後ほど述べさせて頂きます

ソフトウェア

ハードといっしょでこちらもそんな大げさなものでもなく、水の検出は GPIO の on/off の変化をポーリングするなりイベントを待ったり するだけです

GPIO デバイスをこちらのように shell から直接ポーリングしてもいいですし

GPIOデバイスファイルを直接読む例
gpio=20    #GPIO.28 => BCM2835 の20番、対応表は gpio readall
dulation=1 #ポーリング間隔(秒)

# gpio がまだ初期化されていなければ初期化
if [ ! -d /sys/class/gpio/gpio${gpio} ]
then
    echo $gpio > /sys/class/gpio/export
fi
value=/sys/class/gpio/gpio${gpio}/value #gpio の値
while :
do
  current_value=`cat $value`
  if [ $current_value -eq 1 ]
  then
    echo "WATER!!!"
  fi
  sleep ${dulation}s
done

最近の jessie だと最初から Wiring Piがはいっているみたいなので、gpio wfi で例えば GPIO 28 を監視するのであれば以下のように

water_leak_detecte.sh
gpio wfi 28 falling
echo "WATER!!!"

を実行すると水を検出するまで gpio wfi コマンドが wait し、水がきたら "WATER!!!"を表示して終了します

Python からだと例えば RPI.GPIO を使ってこちらのようにもできます

water_leak_detect.py
import RPi.GPIO as GPIO
# GPIO の設定
GPIO.setmode(GPIO.BOARD) # ボードのピン番号で GPIO28 => pin 38

GPIO.setup(36, GPIO.OUT)
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.output(36, GPIO.HIGH)

while True:
  if GPIO.input(38):
    print "WATER!!!"

threat of validity

internal validity, なぜこれでうまく機能するのか

水が微妙に電気伝導性を持つ為にスイッチとして機能しています。微妙に、というのが工学的でない微妙な表現なのですが、例えば水道水の電気伝導率を測ってみると 123μS/cm でした
スクリーンショット 2016-09-16 12.37.39.png
だいたい 10の-4乗S/cm ということはこの水道水の抵抗率は 10KΩ・cm ぐらい、電極間が 1mm ほどだとすると結局、電極間は 1KΩ 程度の抵抗で繋いでいるのと等価です

Raspberry Pi 内部の pull up/down の抵抗は I2C 以外は 50KΩ なので、GPIOにかかる電圧は
  
  3.3V * 50/(50 +1) = 3.24 V

と TTL のしきい値の 2.0V より全然余裕で High となります

スクリーンショット 2016-09-17 10.09.37.png

external validity, どこまでこれがうまく機能するのか

きたない水でも機能するの?

むしろきたない水のほうが余裕です
水道水みたいなキレイな水でもこの程度の低い抵抗なのですが、雨水だったり泥水だったり塩水だったり、水はなにかを含めば含むほど 抵抗率が下がります。水耕栽培に使う培養液とか 水道水より20倍ほど電気伝導率が高い混合液 をあげているのですが、そういう水だとさらに 電気抵抗は低く、GPIO にかかる電圧は

  3.3V * 50/(50 +0.05) = 3.29 V

と、ますます余裕で OK です

全く関係ないですけど、 怪しい水の汚染を簡単に見たければ pH よりも電気伝導度のほうが一発ですよ都議の皆様
水耕栽培を趣味にしてる人が使ってるような3000円しないぐらいのECメーターで水の汚染は簡易にチェックできます

逆に、凄くキレイな水だと?

苦しくなってきます
純水の電気伝導率の理論値は0.05482μS/cm と水道水の測定値より3桁以上低いです。これが水の電気伝導率の理論最小値

つまり、電気抵抗も3桁以上も大きくなって、GPIOの pull-down抵抗より大きいので、これぐらい水がキレイだと電極間の距離をμmの単位にしないとこのままでは機能しなと思います

工業用の純水とかだと用途によって程度に差があると思いますが、水道水より一桁以上抵抗が上がると Raspbery Pi の内部 pull down 抵抗とコンパラブルになってくるので、1mm 程度の間隔のダブルケーブルの先っちょを剥いただけではだんだん苦しくなってくると思います

炎も伝導体だけど、水だけじゃなくて炎も検出できる?

水害と火災の両方を検知できてしまうしかも安いセンサーって凄いですよね
炎の正体はプラズマ化したガスなので、金属同様に自由電子がある(という理屈でよかったと思うんですけど、噓ついてましたら御指摘いただければ大変ありがたいです)のですが、残念なことに 抵抗が数十MΩ・cmもあるので、Raspberry Pi の 50KΩ の内部 pull-down 抵抗より大きすぎ、このままでスイッチとして機能させるのは無理で、もう一工夫がいるような気がします

リード線の長さはどのくらいまで大丈夫?

銅線の抵抗は 1mm径の銅線 1Km で17Ω程度と水なんかと比較して全然小さいです。60キロの距離でも 1kΩでしかないので、片道30キロも全然平気だとおもいます。 避難区域外から炉心の注水状態を監視 したり、 知事室から豊洲市場の地下の浸水を監視 したりするのも、こんな簡単な仕組みだけで原理的にはできそうです。ただし、ケーブルが多分 メートルあたり100円 ぐらいするのでコストが合わない気はします

結び

はじめに、でも述べました通りこちらの記事を読んで、「こんな簡単な仕組みで水って検知できるんだ、だったらそもそもクリップとかいらない(ないほうが電極間の距離が近い)し、抵抗も(RPiの内部プルダウンがあるんだから)いらないんじゃないの???」と思い、簡単なので試してみようと思った事がこのご報告のきっかけです

この備忘録がもしどなたかのご参考になることがございましたら望外の喜びでございます

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away