プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

水遣り制御ロジック

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

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

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

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

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

f:id:s51517765:20190105113020j:plain


以前に書いた、土壌センサを用いますので、土壌が乾いたときは最大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は実装しながら設定していきます。