すぐに使える水やり装置をご活用ください

【1】まずは使い方から                 (2024年9月 by Tokio Yamada)
 とても使いやすい自動水やり装置が完成しました。Raspberry Pi Pico (RPI pico) / Raspberry Pi Pico W (RPI Pico W) を使い、言語は MicroPython を使用していますが、プログラミングをしなくても、内部のパラメータを基板のスイッチと表示器を使って変更できますから、問題なく自分の環境に合わせる事ができます。ブレッドボードを使って動作確認しましたが、そのままでは長期の使用はとても難しいので基板化しました。基板化するに当たって、電源を一つにすることを必須にしました。RPI Pico W の方は、WiFi を使って Googleスプレッドシートにデータを送り管理できるようにしています。これ以外は両者の水やりの制御はまったく同じです。RPI Pico W の方ではありますが、実際の運用状況をここに示しています。はじめに、WiFi のない RPI Pico の方の解説をいたします。
 RPI pico の方も RPI Pico W の方も、この基板以外に必要なものは、
DC5Vの電源(1A以上) 水中ポンプミニホースおよび土壌水分センサです。これらは AmazonゃAliExpressなどから安価に購入できます。下図が必要なものすべてです。お持ちのものがあれば、流用されると良いと思います。実装基板の入手についてはリンク先を、また回路図についてはここをご参照ください。

  

自動水やり装置を稼働させるための準備
(1) 供給用の水タンクを準備し水を入れておきます。ポンプとホースを接続しポンプは水タンクの中へ漬けてホースを植栽に配置します。もし、すぐに水が出ても支障がないような置き方にして下さい。私は、急に水が出て、それが基板にかかり、基板を壊してしまったことがあるので、これだけは
十分に注意して下さい。ポンプのケーブルを基板の CN2 に接続します。極性を間違わないように、基板に線の色を BLK,REDと表示していますので確認して接続して下さい。

(2) 土壌水分センサーにコネクタ付きケーブルを接続し、そのセンサーを土壌に差し込みます。センサー上部に回路がありますので、それに土がかからないように注意して下さい。反対側のコネクタを基板の
CN1 に挿入してください。その際、基板に線の色を BLK,Red,Yellow と表示していますので間違わないように接続します。

(3) 最後に
J1 にDC5V電源を接続します。もし、ここで電源が入ると、土壌水分センサーの値(初期値では30000超え) によっては急にポンプが稼働し、水が供給されることがありますので、そのつもりで電源を入れてください。ポンプが動作したとしても、初期値では 5秒間です。基本的にポンプの空転は禁止されているようですので、使用しないときは外していると良いです、ポンプの電源が入ると LED が点灯しますから電源が入った事は分かります。

これだけの設定で
既に稼働を開始しています。「計測し、水やりが必要なら水を供給する」という Action は、初期値では 10分ごとに行われます。

これまでの説明で初期値というのが3個出てまいりました。そのパラメータの内容は以下の通りです。
    内 容                変 数 名          説  明
 ポンプの動作時間   5秒(初期値)  WATERING_LENGTH    ポンプの動作時間を限定しています
 Action 間隔       10分(初期値)   INTERVAL        計測・水やりの Action 間隔です
 土壌水分センサー値  30000(初期値) WATERING_THRESHOLD  これを超えると水やりを実行します

これらの値は、基板からスイッチ(S1) を操作し、表示器(ST7735S) を見ながら変更することが可能です、リンクをご参照下さい。これらの値を変更することで、
様々な環境に適用できるようにすることができます。初期値は、私の鉢植えの環境で問題なく運用している値を適用させていただきました。ただ、「Action 間隔」は、その後 60 分に変更して運用しています。理由は、RPI Pico W の場合の WEB に POST する回数を減らしています。いずれにしろ急には乾燥しないのでまったく問題はありません。
土壌水分センサー値は、製品によりバラツキがあるので、実際に運用して決定して下さい。しかし、乾燥時で 40000~60000 、湿潤時で 15000~25000 というのは、ほぼ変わらないようです。この
土壌水分センサーの今の値は、初回と Action間隔を経過した時のトビトビにしか分かりませんが、下記のソースファイルをダウンロードすると GetMoisture.py というのがありますので、Thonny 上に読み込んで RPI Pico を接続した上で走らせる(RUN) ことで1秒ごとにコンソールに土壌水分センサーの値が表示されますので必要であればご利用ください。土壌の湿り具合とセンサー値の関係をリアルタイムで観察することができます。もちろん、この自動水やり装置を実際に使いながら WATERING_THRESHOLD値を変更していく方法でも、まったく問題ありませんし実用的です。

 ところで、ポンプの稼働時間が5秒というのは短すぎるのではないかと思われるかもしれません。しかし実際に動かしていただければ分かりますが、結構な水量です。特に、
供給水面より放水口が低い場合は、サイフォンの原理により過剰に水が供給されるので注意が必要です。このあたりのことは実際に動作させて状況を把握してください。
 いずれにしろ
サイフォン現象は、起こらないようにした方が良いと思います。この現象による水の供給は、システムの制御を離れたことだからです。放水口の高さは供給水面より高くすべきだと思います。これらを考慮に入れて水供給タンクの位置や WATERING_LENGTH の値を決定して下さい。

基本的に以上の解説にて、この自動水やりシステムの運用はできます。これより以降については、詳細をお知りになりたい場合にご利用ください。なお、パラメータ値の変更法についてはここに待機中の画面の説明はここに、また RPI Pico W の例ではありますが、運用状況ここに示しています。


【2】動作の説明とパラメータの編集について

  
下記に動作のフローチャートを示します。
    
 動作については、このフローチャートを見ることで大方わかると思います。この中にもパラメータについての説明があります。この3つのパラメータ値は、相互に密接に関連しており、また土壌の鉢のサイズやオープン土壌かによって大きく変わってまいります。初期値につきましては、私の鉢植えの環境で良好な結果を得たものを設定しています。ですので、そちらで実際に運用されて新たに設定されることをお勧めします。

パラメータ値の変更方法
 これらの
パラメータ値の編集モードに入るには、通常の待機中(画面の右上の水色のが点滅している) に SW(S1) を 5~6秒以上押し続けると入ります。編集モードに入っている状況を下図を示します。
一番左が編集の最初の INTERVAL の設定です。単位は分です。SW を短押し(言葉で言えば
トン) すれば押すたびに +5(加算) します。SW を長押し(言葉で言えばペタ) すれば -5(減算) します。これを繰り返して希望の値にしてください。私は初めは 10分にしていましたが、今は 30~60位にしています。次の編集に入るには、SW を2秒以上押ますと入ります。真ん中の画面です。これは水やりポンプの動作時間で単位は秒です。SW を短押しすれば +1(加算) します。SW を長押しすれば -1(減算) します。これを繰り返して希望の値にしてください。
 次の編集に入るには、SW を
2秒以上押しますと入ります。右側の画面です。水分センサーにはバラつきがありますので実際の湿り具合を確認しながら決定して下さい。乾燥時には 40000~60000 となり、湿っていると 15000~25000 程度になります。対象の植物や土壌により変わりますので、それに合わせてください。SW を短押しすれば +100(加算) します。SW を長押しすれば -100(減算) します。これを繰り返して希望の値にしてください。
 以上の3項目で終了ですが、最後に SW を
2秒以上押しますと編集モードを抜けて、これらの値を parameter.dat に記録します。そして初期のメインループの TOP に戻ります。WATERING_THRESHOLDの設定値によっては水やり動作があるかもしれませんのでご注意ください。いずれにしろ、最後の記録まで行かずに電源を切ると、何も変更はされません。

待機中の画面について

 環境の温度・湿度・気圧を測定する、BME280 というデバイスがあります。水やりには直接の関係はないのですが、環境の状況を把握するにはとても良いデバイスです。画面に T:33.3 とあるのは気温で 33.3℃を示し、H:50.7 とあるのは 50.7% の湿度を、P:1009 は、気圧 1009hPa を表します。一番下の M:22005 は土壌水分センサーの値を示しています。T は temperature、H は humidity、P は pressure、M は moisturre の頭文字です。
これらのデバイスにはバラツキがあり、私も数個もっていますが、まったく同じ値にはなっていません。大方の傾向を知る手段と思ってください。右上の青丸(
)は1秒点灯、1秒消灯を繰り返しています。一番上の小さな文字は、次の Action までの時間を分単位で表示しています。

この基板の回路図(クリックすると拡大されます)

 水やりシステムは、多くのものがWEBにも上がっていますが、ほとんどがポンプ電源を別にした2電源システムです。
実際の問題として、2電源で運用するのに、個人的にはすごく抵抗がありましたので1電源のテストを開始しました。かなり長い時間をかけて検証しましたが、この
1電源のシステムでも問題はないことが確認できました。Amazon からの購入の推薦をしています「WayinTop Automatic Watering Device DIY Kit」にも、2電源を使用するためのリレーボードが付属していますが、これは使用しません(要望:ポンプから出るホースは今の横では無く上向きの方が使いやすい)。
電源は、DC5V・1A以上あれば問題ありません。ただしコネクタは、センタープラス、プラグ外径:5.5mm、プラグ内径:2.1mm ですので、ご注意ください。TFT RGBディスプレー(ST7735S)はチャイナ製の物です。数台購入しましたが、例によって完璧なものは5つに1つでした。横筋のかすり傷が少しですが出ますので画像表示には不適ですが、文字表示には問題なく使えているので、この用途には「可」とします。
 回路図に「Extras for learning」と囲っている部分がありますが、LED と SW は実際に使っています。VR と SDcard-R/W を学習・追加用として残しています。水やりシステムでは、INTERVAL ごとに SDcard にデータを CSVファイルとして書き込んで行けば、後日、Excel などで分析できると思います。SDcard への読み書きの例は、
SD_CSV_Test.py として、ソースファイルの中にあります。また、RPI Pico Wによる実際の運用状況は、ここにサンプルとして示しています。ソフトの本体は WiFi接続と Googleスプレッドシートへの POST 以外は、RPI Pico と全く同一です。


【3】開発環境の設定などについて
 この水やりシステムを使用するだけなら以下の作業は必要ありません。しかし、費用をかけずに Raspberry Pi Pico / Pico W および MicroPython の学習ができますので、よろしければお付き合いください。 MicroPython が使える開発環境、
Thonny(ソニーまたはトニー) が提供されています。これだけの機能を持ったものがフリーで使えるなんてありがたいことです、感謝いたします。従来、コマンド操作でやらなければならなかったことが、ほとんどマウスによる GUI でやれるようになっています。コマンドは覚えていても忘れてしまいますから・・・
まずは早速、インストールを実行しましょう。Thonnyの公式サイト(https://thonny.org) にアクセスしてインストーラを入手してインストールを実行して下さい。起動すると下図のような画面になります。横を縮めて表示しています。
説明の途中で RPI Pico をパソコンの USB に接続しますが、
基板の RPI Pico の USB をパソコンに接続する時は、外部のDC電源5V は切断しておいて下さい。壊れることはありませんが、ややこしくなります。

Thonny のメニューの [表示]-[ファイル] にチェックを入れることで、画面の左側にファイルタブが表示されます。➁は自分のパソコンのファイルシステムが表示されています。この基板の RPI Pico を USB で接続すると①の場所に認識されます。それで①の箇所をクリックすると 挿入した RPI Pico が表示されるので選択してクリックすると接続されます。接続されると、③の箇所に RPI Pico 内の簡易ファイルシステムが表示されます。そこで例えば main.py をダブルクリックすると、それが④のエディタ画面に表示されます。そのままエディタのコマンドで RUN させることもできます。また、lib の左の+をクリックすると lib 内にあるファイルが表示されます。
 ➁から③へのファイル転送も楽にできるようになっています。例えば➁内のホルダの上にカーソルを置き、右クリックすると 「/ にアップロード」 などのコンテキストメニューが表示されパソコン内のホルダをホルダ込み RPI Pico のファイルシステムにコピーすることができます。⑤はコンソール画面で、上のエディタに書いているソフトを走らせたりした時の結果を表示したり、直接ここに Python文を記入してインタプリタとして動作させることができます。その他、膨大な機能がありますが、必要になったつど調べていけば良いと思います。いずれにしろ壊れることはありませんので、
自由に色々と操作して馴染んでいくことが大切だと思います。
 余談ですが、最近AI (Copilotや ChatGPT) を利用することが多くなりました。なにせ機械力で圧倒的な情報を持っているのですから、利用しない手はありません。私も MicroPython のハングアップについて、現状のコードを示して、どういう対策をしたら良いかについて問い合わせたことがあります。全てを適用する事はしませんでしたが参考になる箇所については利用しました。

上記のように main.py を読み込めばソースは見れますが、参考のために下記に示します。


以上で RPI Pico の水やりシステムについての説明は終了します。ソフトウェアの構成は、格好いいやり方を使わず泥臭いやり方で、できるだけシンプルにしていますので逆に分かりやすいかと思います。各種のデータとライブラリファイルは、こちらからダウンロードできますす。


【4】RPI Pico W による WiFi への接続と Web への Posting
 基板の提供は RPI Pico 搭載のみですが、これを RPI Pico W に取り換えると WiFi に接続できて Googleスプレッドシートなどに POST できますので、データの管理を EXCEL の様な感覚で管理する事ができるようになります。

下記に動作のフローチャートを示します。

 見てお分かりのように、「WiFi への接続・ WEBへの POST 以外は、RPI Pico のフローチャートとまったく同じです。したがって
パラメータの編集などについては、RPI Pico の資料をお使い下さい。


【5】LANへの接続とWEBでの投稿について

まずこの基板の RPI Pico W の main.py のコードを示します。


各種のデータファイルとライブラリファイルを下記のリンクよりタウンロードしてください。
水やりシステムの全てのソースファイ

解凍すると下図ようになっています。
全部で21ファイルあります。これらの一部を RPI Pico W に配置しなければなりませんが、もし、RPI Pico W が新品でしたらシステムは何も入っていないので、
まずシステム・ファームウェアを入れなければなりません。これは、Pico と Pico W のファームウェアは統合されておらず別々ですのでご注意下さい。MicroPythonダウンロードサイトからダウンロードして保存し、次に、Pico W 基板上の「BOOT SEL」ボタンを押したままパソコンに差し込むと、パソコンのエクスプローラ上に Pico W(RPI-RP2ホルダ) が現れますので、その中にダウンロードしたファイルを書き込むことで使えるようになります。正常に書き込まれると、再起動によってRPI-RP2ホルダは見えなくなります。
インストールは、Thonny 上でもできます。
Thonny を起動しておき、RPI Pico W 基板上の
「BOOT SEL」ボタンを押したまま USB に接続します。すると Thonny の右下(枠の上)をクリックすると ’MicroPythonをインストール...’という項目を選択できます。このインストールが完了すると RPI Pico W を Thonny 上で操作することが可能となります。

Thonny を起動し、RPI Pico W をパソコンに接続すると Thonny の右下の枠の上をクリックするとRPI Pico W が出ますので、それをクリックします。これでThonny に接続され、RPI Pico W のファイルシステムが使えるようになりました。MicroPythonのファームウェアをインストールしたばかりでしたら、Thonny画面の左下の RPI Pico Wのファイルペインには何も入っていないと思います。この何も入っていない場所は
ルート( / ) になります。
Thonny の左上のローカルのファイルペインを操作して、ダウンロードし解凍したファイル群のうち「lib」ホルダが見えるようにしてください。その「libホルダ上にマウスのポインタを当てて右クリックすると 「
/ にアップロード」 などのコンテキストメニューが表示されパソコン内のホルダをホルダ込み RPI Pico W のファイルシステムにコピーすることができます。
これを実行すると、左下の Pico W のファイルペインに「lib」ホルダが作られたのが分かると思います。その「lib」ホルダを展開すると上図のエクスプローラの6つの .pyファイルがコピーされていることを確認できると思います。
次に、Libary ホルダの中の4つのファイル( boot.py, parameter.dat, report.dat, secrets.py)を RPI Pico W のファイルペインのルート(/)にアップロードして下さい。最後に、
PicoW ホルダ内の main.py を同じくルートにアップロードすれば完了です。Pico ホルダの main.py と間違わないで下さい。ターゲットのホルダ内のルートにある boot.pymain.py特別なファイルで立ち上がり時に必ず実行されます。ここでは boot.py には何も記述されていませんが、システムを稼働する際に共通して実行することがあれば、ここに記述します。main.py が実行させる本体のソフトになり、一般的には無限ループです。

以上の操作で、RPI Pico W での水やりシステムのファイル上の準備ができましたが、これより
LANの接続確認とGoogleスプレッドシートへの登録をする必要があります。

(1) LANへの接続確認
 LANアカウント(自分のコンピュータネットワーク)に接続する際に必要な
ユーザー名パスワードをご確認下さい。上記のリンクからダウンロードした中の [その他のTest] ホルダの中に LAN_Connect_Test.py が有りますのでこれを Thonny の編集画面に読み込ませて下さい。ファイル上でダブルクリックすれば読み込まれます。
その中の下の方に・・・
wlan = init_wlan("xxxxxxxxxxxxxxx", "yyyyyyyy")   #WIFI接続
・・・という一行があります。この「xxxxxxxxxxxxxxx」がユーザー名、「yyyyyyyy」がパスワードですので、この行をご自分のものに書き換えて、RPI Pico W を Thonny と接続した状態で実行(RUN) してください。
無事に 'IP adress', 'Netmask', 'Gateway', 'DNS Server' の4行がコンソール画面に表示されれば成功です。成功した「ユーザー名」と「パスワード」を、ファイルペイン Pico W のルートにある
secrets.py の中の WIFI_SSIDWIFI_PASSWORD に記入し保存して下さい。Pico W のルートにある secrets.py をダブルクリックして読み込ませて編集し保存すれば良いです。

上図は、水やりシステムの実機(main.py) で、 WiFi に接続を試みている時のディスプレイの様子です。

(2) WEBでのPOSTをする準備
 Googleのスプレッドシートを使いますから Google のアカウントがなければなりません。
もし、アカウントがなければ、https://www.google.com/intl/ja/account/about/ にて作成して下さい。
・ Googleスプレッドシートのサイトにアクセスします。
 https://docs.google.com/spreadsheets/
・ Googleアカウントを入力しログインして下さい。
・ 画面の上の方にある「新しいスプレッドシートの作成」の中から「空白のシート」を作成します。
・ スプレッドシートの名前を例えば「○○の水やりシステム」などとして入力します。
これで、ご自分用のスプレッドシートは出来上がりましたが、まだ RPI Pico W からのデータを受け入れることはできないので、その準備をこれからします。
https://docs.google.com/spreadsheets/ に再度アクセスして、先ほど作成したスプレッドシートを開きます。
・ メニューに「拡張機能」がありますのでクリックすると [Apps Script] という項目がありますので選択して下さい。
・ 画面の上部にプロジェクト名、例えば「水やり器からのデータ受信」などを分かるように、ご自由に入力して下さい。
・ この[Apps Script] のエディタ内に下記のスクリプトを張り付けて下さい。
POST を受け付けるコードです。



・ 画面の上部の「デプロイ」(配備する、展開する) をクリックし、「新しいデプロイ」を選択します。
・ 「種類の選択」から「ウェブアプリ」を選びます。新しいデプロイの各種情報の入力を求められます。以下は例です。
  新しい説明文: 自動水やりシステムの各種情報を記録する
  次のユーザーとして実行: ご自分のGoogleアカウント (xxxxxx@gmail.com)
  アクセスできるユーザー: 全員
・ 入力後、「デプロイ」をクリックしてください。そして「アクセスを承認」をクリックします。アカウントの選択画面が出たら、ご自分のアカウントをクリックします。
・ 警告の画面が出たら「Advanced」をクリックして、一番下の方にある「Go to プロジェクト名(unsafe)」をクリックします。
・ Googleアカウントへのアクセス要求画面が出たら「Allow」をクリックして下さい。
  この時に表示される
URLを記録します。このURL宛てに RPI Pico W からデータを送出する大切な URLです。
以上でデータ公開の準備が出来ました。この URL を先ほどの
secrets.pyAPI_URL の欄に記入して下さい。

この secrets.py は、Pico W でしか使っていません。WIFI_SSID, WIFI_PASSWORD, API_URL の大切な情報が入っています。
main.py を走らせると、これらの情報を使って WiFi に接続し Googleスプレッドシートにデータを送ります。
これで、RPI Pico W を稼働させる準備はできましたので、走らせて下さい。走り出して最初に WiFi の接続をし、次に GoogleスプレッドシートにデータをPOSTします。
スプレッドシートを確認するには・・・
https://docs.google.com/spreadsheets/
・・・にアクセスして、対象のスプレッドシートを選択して下さい。POST されたデータが記載されている事を確認できます。
 水やりシステムの待機中は、上左図のように画面の右上を水色の
が点滅し続けています。そして上部には小さな文字で次の Action までの時間を1分ごとに表示(分単位)しています。
WebのPOSTを開始すると上右図のように、やや大き目の赤の
が表示され、終了すると消えます。つまり、赤丸の表示中は Googleスプレッドシートへの Posting の最中(Retryを含む)であり、WiFi の調子の良い時は、ほぼ8~10秒ほどで完了しますが不調な時は数分を要することがありますし、再起動する事もあります。

WiFiの接続やWebへのPOSTなどは、好調な時は数か月でも全く問題ないのですが、何が原因なのかは未だに不明なのですが、一旦不調が始まったらソフトがハングアップしたような状態になり、この対策に苦労しました。とにかく「ハングアップだけは止めにしたい」を目標に色々な対策をしました。それこそAI の手も借りました。その結果、
ハングアップはなくなりました。主な対策として、 WiFi への接続と POSTについて、「リトライを繰り返すこと」と、「エラーを起こすと『システムの再起動をする』ことを取り入れました。ですから、WiFiの調子が非常に悪い場合は、良く再起動が掛ることをご承知ください。


実際の運用状況
 以下の左図に、実際の運用の様子を示しています。この例では、鉢が小さいので WATERING_LENGTH を 3秒にしています。INTERVAL は 60分、WATERING_THRESHOLD を 30000 にしています。右上の Googleスプレッドシートは、何日にも渡って営々と続くデータの一部のサンプルです。日時・温度・湿度・気圧・水分センサー値の5項目が記録されていきます。これらの値を Excel と同様にグラフ化できます。
 右下のグラフで、土壌水分センサーの値が WATERING_THRESHOLD の
30000 を超えた時に水やりが実行されて、その後、土壌水分センサー値が 25500 に降下した(湿潤された) のが分かります。このような小さな鉢では3秒の水やりでも良さそうです。もちろん5秒でも構わないと思います、その場合は水やりの間隔がもう少し伸びるでしょう(下に追加テストあり)。現在の3秒で、水やり間隔は3日17時間となっています。これは、季節や環境で変わってまいります。植物の種類によって、どの様な水やりが最適かを探らなければならないですね。水やりの動作は RPI Pico Wと RPI Picoは全く同じです。ですから、同じ設定で RPI Picoで動かしても記録が残らないだけで、全く同じ動作をします。ただし、基板には SD-Cardのパターンをあらかじめ入れています(回路図参照)ので、RPI Picoでは SD-Cardに CSVファイルとしてデータを記録し、後で EXCEL で管理する事も可能ではあります。CSVファイルの作成については、ダウンロードファイルの中の SD_CSV_Test.py を参考にして下さい。





【 追加のテスト 】

下の左は、全実装の基板の写真です。SD-Card も実装しており、CSVファイルでの動作確認もできています。
下の右の図は、
WATERING_LENGTH を5秒にした場合の動作結果のデータをグラフで示しています。水やり実行後は、土壌水分センサーの値は、23400 まで降下しており、数値にして3秒の時より 2100低く(さらに湿潤)されている事が分かります。結果として、水やりの間隔は、3秒の時より、およそ2倍の 7日11時間半となっています。



【 参考資料 】
これらのアプリ開発には「MicroPythonプログラミングガイド」(CQ出版社・宮田 賢一, 角 史生共著)を参考にさせていただきました。ありがとうございました。これは MicroPython を学習するためのシンプルで分かりやすい素敵な書籍だと思います。

汎用製品通販のページへ      USB-IOのページに戻 る        TOPへ