arduinoで自動水やり機(タンク式)を自作してみた

arduinoと電磁弁,フロースィッチを使ってタンク式自動水やり機を自作しました。非接触フロースイッチで水面の位置を検出し水やりの時間はRTCで設定しています。自作してから3年経過しましたが、ほぼ故障もなく使っています。

水やりの奴隷から解放

カズは年に1度は海外へブラブラ出かけますので、留守の間、ビニールハウスやプランターの水やりが気になります。

そこで、arduinoを使って自動水やり機(タンク式)を自作していますが、今年で3年目になりました。

故障と言えば電磁弁にゴミが詰まったぐらいで毎日、朝、夕設定した時間に確実に水やりをしてくれます。

現在は3つのラインをarduinoでコントロールしていますが、電磁弁とホースを増やすだけでラインの増設も簡単です。

【2024/2 追記】

水道水の圧力では弁が開かず水が流れないとの指摘がありました。

このタンク式ではダイアフラム圧力ポンプを使用していますが、タンクを使わず水道直結の場合には電磁弁の開閉をダイレクトに行う直動式電磁弁なら使えます。

スマホで遠隔水やり

【追記】

カイエン社の高度なiotプラットフォームを利用してスマホで海外からでも遠隔水やり出来るようにしてみました。

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..カイエン社の高度なiotプラットフォームを利用してスマホで海外からでも遠隔水やり出来るようにしてみました。..

カイエン社のiotプラットフォームはビジネス向けiotシステムですが、個人は無料で利用出来ます。有難いですね。

会社設立3年目ながらマイクロソフトやアリババなどとも提携し、AWS(アマゾンクラウド)も参加してしています。

この無料プラットフォームを利用すればスマホを使って海外からでも水やり機のスイッチを入れたり気温など監視出来ますのでビニールハウスの室温調節などにも応用出来ます。

ガンバッテ作ったのにコロナで海外行けなかったけどようやく行けるね。。。

準備するもの

水タンク(ホームセンター)
PVCホース
霧吹きノズル
水位センサー  2個
arduino
電磁弁
ダイヤフラムポンプ
抵抗 2個(適当に。カズは100Ωを使いました)

arduinoやesp32,M5StackをLinuxで使う

arduinoやesp32,M5StackをLinuxで使うにはどうしたらいいでしょうか?

今まではpython2系やpython3系で使えていましたが2024/1 移行期間を経てpython2系のサポートが終了しpython3系は仮想環境を構築しその環境でarduinoなどをインストールしないと動作しなくなりました。

その手順を新しくまとめました。

水タンクの加工

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..水タンクの加工..

水タンクはコーナンで購入しました。一番上の黒い箱です。

このBoxのフタにフローセンサーを取り付けて水位が低下したら水を補充し満タンになったら水道水を停止することにします。

水道直結でもいいのですが、夏場の水耕栽培は溶液の温度が高くなるので溶液冷却コイルを水タンクの中に置く予定でタンク式にしています。

タンクといってもほぼ、工具入れかキャンプ用品ですね。大きいサイズ2個は水耕栽培に用いるつもりで購入しました。

フロースイッチを加工する

水位センサー(フロースイッチ)はタンクの上面と底に取り付けます。

でも、タンクの底に穴を開けたくなかったので、PCVホースを使って上から下ろすように取り付けることにしました。(もちろん水漏れに注意してタンクの底面に取り付けてもかまいません)

PVCホースをライターで暖めフロースイッチをねじ込みます。PVCホースにははリード線と100均で購入したアルミ線を通しています。

アルミ線を入れているので、柔軟性とちょうど良い硬さがあります。ぐるっと巻いてもOKです。

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..PVCホースをライターで暖めフロースイッチをねじ込みます。PVCホースにははリード線と100均で購入したアルミ線を通しています。アルミ線を入れているので、柔軟性とちょうど良い硬さがあります。ぐるっと巻いてもOKです。..

タンクの蓋を細工する

このBoxにはフタの強度を増すために数箇所に支えがあります。

レジャーボックスとしてコーナンさんが開発したオリジナルで、大人が座っても大丈夫なような作りです。

その支えにドリルで穴を4箇所開け、フロースイッチを固定します。

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..大人が座っても大丈夫なような作りです。その支えにドリルで穴を4箇所開け、フロースイッチを固定します。..

反対側はこんな感じです。

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..反対側はこんな感じです。..

アルミ線はペンチでねじって固定しました。ネジよりも簡単で早いです。(^^;

『 arduinoで自動水やり機(タンク式)を自作してみた 』 ..アルミ線はペンチでねじって固定しました。ネジよりも簡単で早いです。(^^;..

自動で水やりをするには、時間設定に加え、水面を感知するセンサーや電磁弁をコントロールするプログラムが必要になります。

arduinoではプログラムとは呼ばずにスケッチと呼んでいます。

ということで、次ではスケッチをしてみます。

arduinoのスケッチ

このフローセンサーは上方に取り付けたので、フロートが水の上昇と共に浮いて、1センチ程上に動くと電流の流れを遮断、OFFの状態になります。

また、底面では水位の低下と共にフロートが下がりSWがONの状態になります。

そのため、上面のセンサーに流れる電流が遮断されたらリレーを遮断するように、そして、底面のセンサーでは電流が流れたらリレーのスイッチを入れるというようなスケッチをしてみます。

リレーは3C接点ですのでON-OFFどちらでも使えるのですが、信号がLOWの状態でリレーモジュールのLEDが点灯するようです。

ということで、

上面の電流が遮断 → リレー ON
底面に電流が流れる → リレー OFF

このようなスケッチをしてみます。(ピンはarduino megaの場合)

void setup() {
pinMode(22,INPUT); // 水槽上 SW
pinMode(23,INPUT); // 水槽下 SW
pinMode(24,OUTPUT); //リレー2:電磁モータ 散水
pinMode(25,OUTPUT); //リレー1:電磁弁 給水
}

pinは自由に設定出来ます。

void loop() {
if(hour==7&&minute==00||hour==17&&minute==00){ //朝7時と夕方5時に散水
digitalWrite(24,HIGH); //リレー2 散水開始
}
// 給水
if(digitalRead(22)==LOW){ //水面上昇 SW = OFF
digitalWrite(25,LOW); //リレー1 給水停止
}
if(digitalRead(23)==HIGH){ //水面が下がり SW = ON
digitalWrite(25,HIGH); //リレー1 給水開始
digitalWrite(24,LOW); //リレー2 散水停止
}
}

散水の開始は別にRTC(リアルタイムクロック)を組み込み条件文で時間設定し、動作するようにしました。このスケッチでは、7:00か17:00になったら散水を始めるようになります。朝夕の散水ですね。

リレー1は水道水の流れをコントロールする電磁弁を繋ぎます。

リレー2にはダイヤフラムポンプを繋ぎます。

フロースイッチはプルアップ抵抗でGNDに落としておきます。

RTCで自動水やり

それでは朝,夕に自動で水やりをするように次ではRTC(リアルタイムクロック)を組み込んでみます。