34.ミニトマトから汎用自動植物栽培機へ(応用編) (2021.8.10-2021.11.8)

ミニトマトの自動栽培用として開発してきた装置ですが、ここからは汎用の自動植物栽培機として計画を進めたいと思います。それと言うのも、本装置自体は別にミニトマトに限定する必然性は無いからです。植物栽培にとって異なるのは、水やりを含めて実際の運用制御をどうするかです。この部分は植物によって条件が変わってくるため、各々の植物に応じてプログラムを変更すれば済みます。なるべく初期設定で条件を与えることで、植物ごとに対応を変えるようにして、ハードウェアとメインシステムはそのまま流用することを目指します。栽培制御部分は未だ検討段階ですが、以後はこの方新に従って段階的に進めます。その前にまだやるべきことが色々残っているので、まずはそこから手を付けていくことにしましょう。

前項では制御の要となる環境測定のためのプログラムを作りましたが、処理の内容には様々な問題点や課題が残っています。そこで引き続き改善すべき点を検討し、改良につなげていきたいと思います。

<改善目標>
1.環境測定のタイミングを揃える。 → 区切り良く、時分00(待ちが長くなるため、後に5分間隔の区切りに変更)でシステムを開始する。
2.測定間隔を短縮する。 → 現在の10分間隔を5分間隔にする。
3.画面に制御パネルを表示して、設定変更や各測定値の表示を行う。
4.補助手段として手動での水補給を追加する。
5.水タンクの残量不足を警告する。 → 水の供給も停止する。
6.追肥(液体か粉末を使用)機能をシステムに組み込む。(残量警告・供給停止も含む)
7.環境測定モードと自動栽培モード(環境測定は常時)の切り替えを可能にする。
8.水補給の際になるべく均一に湿りを与えるように散水する。 → 適切な散水ノズルを新たに作る。
9.手動操作や給水イベントを記録する処理を追加する。 → 環境データと併せて制御を検討する材料になる。

1はグラフ化の際に比較しやすいようにするのと、プログラムの簡素化を目的とします。5分間隔でのデータ取得では急な雨等では値がすぐには反映しませんが、栽培全体の流れからすればごく短期間の変動に過ぎず、これくらいが妥当な測定サイクルではないかと考えます。時間区切りを一定にすることで、分析も容易になるはずです。データは1日分で1つのファイルにしているため、システム開始日のみが1日の途中からのデータ(午前0時以外での開始の場合)になりますが、以後は毎1日分の新しいファイルが作られていきます。
→ 後にグラフ化ソフトを改良することで、途中で栽培システムを中断して再開しても良いようになりました。

改善点は他にもあります。最初に考えたスリープタイマーによる時間待ち処理は、サイクル間のわずかなプログラム動作の累積時間が予想以上に大きくて、1日で10分近いズレが出てしまいました。恐らくセンサー入力(特に地中温度センサー)に時間がかかるためだと思います。これでは実用上問題です。時間待ちを少し短くすればズレは少なくできますが、それでは根本的な解決にはなりません。そこで専用のタイマースレッドを立ててスケジュール管理し、フラグチェックによって待ち時間を常に一定間隔にすることとしました。タイミングによって多少のズレは出ますが、誤差は相当少ないものになります。それでも累積は避けられないので、どこかのタイミングで補正する必要があるかもしれません。
→ 対策によって1日のズレが1秒弱のレベルになりましたが、栽培で数ヶ月連続稼動するとそれなりに誤差が蓄積するため、最終的に毎日午前0時に時刻補正するようにしました。つまり最大でも数十秒以内のズレに収まります。

時刻補正を実現するためにはプログラムの基本構造を見直し、操作パネルとセンサー測定(~データ表示・保存)処理をそれぞれスレッド化し、各処理内でループする必要がありました(TkinterやScheduleを実行すると必然的にループ構造になるため)。乏しいPythonの知識の中で実現するのはかなり大変で、数日試行錯誤してようやく完成に至った次第です。とにかく学習しながらのプログラミングのため、先に進むのは容易ではありません。コードも洗練されているとは言いがたいものですが、今はこれが精一杯です。ただ分かったこともあり、プログラムのルートとなる処理が極めてシンプルになることです。今回のようなシステムでは繰り返し計測を行うために、ルート部分自体が無限ループの中にあります。ここがシンプルであれば、無駄な処理時間が増えるのも防止できます。

scheduleを使用するためには、scheduleモジュールをインストールする必要があります。
pip3 install schedule

制御パネルは下図のように、最初はシンプルで簡素な見栄えで妥協することにしました。学習が更に進めば、最終的には商業ソフトのように画面デザインにも配慮したいところです。水や追肥は自動運用を目標とます。一方で、自動ではうまくいかない時等に対処するため、手動によっても操作できた方が便利です。制御パネルは常に環境をモニターしながら、必要に応じて操作する機能を提供します。水や肥料補給では動作の際にタンクが空の状態でポンプを動かすと故障する恐れがあるため、残量検知によって自動停止するよう保護機能も加えます。環境測定機能を標準装備しているため、取得データは自動栽培前の検討に利用したいと思います。自動栽培中も常にデータを取得するため、その年の環境変化等も同時に把握できます。

水補給は初期実験ではホースをそのまま土に埋めましたが、水はけの良い土ではすぐに鉢底の水抜きから溢れ出てしまうため、なるべく均一に水が分散するように独自の散水器を作って対処します。詳細は「32.自動ミニトマト栽培機(給水装置)」で説明しています。

改良した栽培装置の全体像は写真のようになりました。当初給水器の水タンクはペットボトルの上部を取り除いて使っていましたが、100均でフタ付きポリバケツのミニ版を買い求め、フタに給水パイプと電源コード用の切り欠けを開けて利用することにしました。これでホコリや虫の混入も防げます。残量センサーと追肥用の装置はまだ付いていないため、製作次第追加したいと思います。環境測定装置としては運用可能になったため、これに毎日の水やり処理を加えて暫定的に自動栽培を開始したいと思います。植えたのは観葉植物の一種ですが、名前が書いて無かったので詳細はわかりません。自動栽培プログラムを作りながら、成長を見守りたいと思います。

<追記(2021.8.29-2021.11.8)
水と肥料の残量センサーを加えたので、詳細は「32.自動ミニトマト栽培機(給水装置)」で解説しています。残量警告については、単に制御パネルのランプの色変化だけでは気付きにくいので、1秒ごとに点滅するようにしました。追肥装置(写真右のタンクから水平にパイプを接続して小型電磁弁へ)を加えた形で再度全体像を掲載します。また、給水装置の残量センサーの位置も、タンク上部に変更しました。