読者です 読者をやめる 読者になる 読者になる

プログラミング素人のArduino

技術屋の末端。プログラミングは専門外。 電気回路も専門外です。 コードに間違いなど見つけられたら、気軽にコメントください。 VC#始めました。

水遣り制御ロジック

ブログ Arduino

今日は水遣りの制御を考えてみました。

<仕様>
土壌センサがある一定の乾き具合になったと判断したら、水をあげます。
水遣りを実行したら、一定時間は水遣りを実行しません。
土壌の乾き具合を人の目に分かるように通知します。
手動水遣りボタンが押されたら、状況にかかわらず水遣りを実行します。

<変数の定義>
水遣りの敷居値(乾き具合)として Thresholdを定義。
土壌の乾き具合を Soilと定義。
水遣りのRetry回数をカウントする Retryを定義。
土壌の判定具合を通知するため、Stateを定義。

<動作イメージ>
自動チェックは3時間に一回(60m*60s*3h*1000ms)
土壌の状態に応じて、LEDで通知
 十分に水が供給されている = Blue
  程よく水が含まれている = Green
 もう少しで、水遣りが必要 = Yellow
 水を上げたが渇きが解消されない = 水タンクEmpty = 警告!
手動水遣りボタンが押されたら、土壌の状態によらず水遣り実行

<実装イメージ>
実際にプログラムを組むときの骨格




以前に書いた、土壌センサを用いますので、土壌が乾いたときは最大1024が表示され、乾いているほどセンサ数値は大きくなります。

ここでは、仮に700を超えたら乾いていて水やりが必要と定義します。
if文を用いて、繋いでいきます。

たとえば、十分水が与えられている状態でセンサ読み値Soilが300であれば、Blueです。
501であればThreshold-200 = 700-200 = 500より大きいので、Yellowです。

一方、700より大きければ、水遣りを実行します。
ここで、Retryで水遣り回数をカウントアップします。
3分待った後、Retry回数をチェックし、2未満なのでもう一度判定に戻ってきます。
もう一度Soilを確認し、700より大きければ、もう一度水遣りをします。
水遣りとチェックを繰り返しても700以下にならなければ、水遣りができていないとし、警告を出しRedを表示します。

水遣りから3分待つのは、土壌に染み渡る時間を待ってチェックするためです。
判定間隔3時間や、渇きの敷居値700は実装しながら設定していきます。