梅雨明けに合わせて

本当はもう少し早く完成する予定だったのですが...

グリーンカーテンへの給水システムが完成しました。

目的:
去年に引き続き、グリーンカーテンを行うが、水やりはとても面倒だ。
去年の夏に、ベランダまでホースをつないで水道を持ってきたので、散水を自動化したい。
ただ自動化するだけでは面白くないので、ネットワークから制御できるようにしたい。


動作の仕組み:
当初は電磁弁とかいろいろ考えていたものの、まったく業界が違うということで難航。
手っ取り早く乗っ取れるデバイスがあればそれが一番だよね!と、検討していたところ、
タイマー制御の製品を発見。

この製品の、今すぐ水やりボタンを乗っ取れば、手っ取り早いのではないか、ということでさっそくポチッ。


タイマーというだけであれば、乗っ取る必要もなく、非常によくできた製品だったため、そのまま使ってもよかったのだが...





結局ばらしてしまい、有線制御できる状態に。
この状態で、室内から散水の制御が可能になったのだが、人間の指による結線で制御している状態。

案外便利だったので、1か月放置...


昨日やっと制御部分を作りました。
かなりやっつけですが、Beaglebone BlackのGPIOで、ソリッドステート・リレーSSR)を開閉。




ところで、水やりのほうは、付属のプランター行給水とは別にミストクーラーなるものもつないでいます。

1分間でどれぐらいの水量が出ているのか、気になって調べてみました。
メーカーの情報では、水圧0.4MPaで230ml/minだそうです。

水道圧は地域、階数で変わるので、実測してみました。

きっちり1分間分の水をペットボトルで回収。
60mlでした。ノズルは3か所設置しているので、180ml/1minでした。



gpioの制御はこんな感じです。
かなり適当です。トラップもかけてません。

earth@beagleboneblack:~$ cat ./sprinkler2.sh
#!/bin/bash
LANG=C

########################
#for takagi sprinkler2.sh
#c earthlab 2013.
########################

loop_count=$1

if [ -z "$1" ];then
 loop_count=1
fi

for i in `seq 1 $1`
do
 echo "loop: $i"
 echo 30 > /sys/class/gpio/export 
 echo out > /sys/class/gpio/gpio30/direction
 echo 0 > /sys/class/gpio/gpio30/value
 sleep 0.3
 echo 1 > /sys/class/gpio/gpio30/value
 sleep 0.1
 echo 0 > /sys/class/gpio/gpio30/value

 if [ ${loop_count} -eq 1 ];then
  break
 fi
 sleep 65
done

earth@beagleboneblack:~$

0.1秒間だけopenにして、タカギのタイマーにスイッチを押したときと同じ動作をさせています。
あまり長く押し続けると、設定モードに入るのので注意です。

また、制御装置が途中でハングしたときに、水が出続けるのは困るので、タカギのタイマー側で、今すぐ水やりボタンが押されたときに1分間水が出るようにセットしています。

引数があった場合(数字かどうかの判定は省略していますが)、65秒間まってから、再度ボタンを押しています。

1分間水が流れた後、5秒してから再度流れ始めるわけです。
どの程度精度の良いタイマーを使っているのか、分からなかったのでマージンは多めです。
タカギのタイマーは、流れている最中にボタンを押すと、キャンセル扱いの制御になるので...

earth@beagleboneblack:~$ sudo ./sprinkler2.sh 3

実効にはroot権限が居るようなので、こんな感じで実行しています。

root@beagleboneblack:~# cat /etc/sudoers
earth ALL=(ALL) NOPASSWD: /home/earth/sprinkler2.sh


制御装置の入れ物はもう少し何とかしますが、基本的には完成です。
なお、先ほどのスクリプトは個人で使う分には自由に使って良いですが、自己責任でお願いします。