工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

ソーラー発電式自動水やり器を作る(5) --- 無動作時消費電力の低減 ---

概要

自動水やり器の無動作時消費電力を低減させるための回路の変更を行い、無駄な消費が減ったことを確認した。


背景と目的

前回完成した自動水やり器だが、陽が落ちてソーラー発電がなくなると、意外と電池の電圧が下がるのが速いことに気づいた。そこで、消費電力を低減させるための回路の変更を行う。


詳細

1. 現状

以下が、ある日の電池電圧の低下の様子。日中よく晴れていたにもかかわらず、明け方には、最大値から0.4V程度下がってしまう。これだと、天候不順が続くと心配だ。


2. 原因

現在の回路構成を調べたところ、

  • 土壌水分センサが無動作時も約5mA消費している
  • ポンプを駆動するリレーモジュールの一次側についているLEDが無動作時も点灯しており、約3mA消費している

ことがわかった。まあ、作っている最中からなんとなく気になっていはいたが、やっぱりそうだった。


3. 変更

3.1 土壌水分センサの電源供給をマイコンのGPIOでON/OFFする

以下が変更後の回路。トランジスタQ2,Q3によるスイッチを構成し、ESP32のIO12をHIGHにしたときだけ出力PWR_MOISTから土壌水分センサに電流が供給されるようにした。これにより、マイコンスリープ中は消費電力はほぼ0。ただ、マイコンでONしてから安定動作するまでのタイムラグを考慮して、ONから計測までの間に少しディレイを入れるように、マイコンのプログラムを変更しておいた。ちゃんと動作している。


3.2 LEDを削除する

LEDは箱に入れてしまえば見えないので、ついていても付いていなくても変わらない。そこで、物理的に削除することにした。


4. 動作確認

変更後は、明らかに夜間でも電池の電圧が下がりにくくなっている。効果は十分あったといえる。※2ポイントだけやけに低い電圧値があるが、これは変更前の日のデータが混ざってしまった編集ミス。


まとめと今後の課題

自動水やり器の無動作時消費電力を低減させることができた。これで悪天候が続いても安心だ。


ソーラー発電式自動水やり器を作る(4) --- マイコンソフトの製作、完成 ---

概要

前回に引き続き、マイコンソフトの製作を行い、システム全体が完成した。


背景と目的

前回に引き続き、マイコンソフトの製作を行い、完成させる。


詳細

1.主な仕様

やりたいことは以下。

  • 一定時間ごとに起動し、それ以外の時間はできるだけ消費電力を下げるためスリープする
  • 土壌水分センサ、BME280、水瓶の水位センサでそれぞれ計測を行う
  • 土壌水分センサの値が一定値を上回る=乾燥している場合、ポンプを動かす
  • ポンプを動かした場合には、IFTTTを使ってLINEに通知する
  • 水位センサで水瓶の水切れを検出した場合は、IFTTTを使って通知する
  • 起動ごとに、センサの計測値をIFTTTを使ってGoogleスプレッドシートに記録する


2.実装

具体的なコードは割愛するが、方法を大まかにメモ。

2.1 一定時間ごとに起動、動作完了後スリープ

この動きは、過去に作ったリモート水位センサと同じなのでそれに倣って、一定期間のディープスリープをすればOK。

dekuo-03.hatenablog.jp


2.2 土壌水分センサ、BME280、水位センサの計測

土壌水分センサはアナログ入力、BME280はI2C、水位センサはGPIOを読み取ればよい。BME280だけちょっと困ったのは、BME280があまりにもいろいろなところで使われているせいか、Arduino用のライブラリだけでやたらと数があること。何が決め手ということもないが、今回はスイッチサイエンスが公開しているものを使用した。

github.com

基本的に、サンプルコードと同じ流れなので特に変わった部分はないが、最初ちょっと違うサンプルを見ていてうまく動かず躓いた。I2Cをbeginして、bme280の初期設定をして、readTrimメソッドを呼ぶという手順を忘れない。

  // BME280初期化
  Wire.begin();
  bme280.setMode(
    BME280_ADDRESS, //I2C Address
    1, //Temperature oversampling x 1
    1, //Pressure oversampling x 1
    1, //Humidity oversampling x 1
    3, //Normal mode
    5, //Tstandby 1000ms
    0, //Filter off
    0  //3-wire SPI Disable
  );
  bme280.readTrim();


2.3 土壌水分センサの値が一定値を上回る=乾燥している場合、ポンプを動かす

アナログ入力の値を読み取って、基準よりも大きければ乾燥している。その基準をどこにするかだが、以下が販売元が公開している空気中と水中での値で校正する方法。まあ、とはいえ毎回校正できるわけではないので、生の値で適当に1つ基準を決めた。その値より大きい値であれば乾燥していると判断して、ポンプを動かす。ポンプは、GPIO出力を一定時間HIGHにするだけ。

wiki.dfrobot.com


2.4 ポンプを動かした場合には、IFTTTを使ってLINEに通知する

給水したら、LINEで通知を受ければちゃんと IFTTTを使ってLINEに通知するには、thisにWebhookチャンネルのRecieve a web requestトリガー、thatにLINEのsend a messageアクションを選択。ESP32からは、JSONボディを作ってWebhooksチャンネルのエンドポイントに投げればよい。WiFiだとか、HTTPSリクエストについては、Arduino-esp32のWiFiClientSecureライブラリのサンプルの通りやればよい。 通知内容は、


2.5 水位センサで水瓶の水切れを検出した場合は、IFTTTを使って通知する

水切れについても、同様に通知すれば水瓶自体に給水するタイミングを知ることができて便利。 やり方は、2.4と同じ。


2.6 起動ごとに、センサの計測値、電池電圧などをIFTTTを使ってGoogleスプレッドシートに記録する

電池電圧は、アナログ入力を読む。AD変換値と電圧の対応は回路構成から決まる。 これもIFTTTを使って、thisにWebhooksチャンネルのRecieve a web requestトリガー、thatにGoogleスプレッドシートチャンネルのAdd row to spreadsheetアクション。IFTTT連携の注意点として、Googleドライブ内のパスに日本語が入っているとうまくいかないので、日本語の入らないパスにシートを置く。シート名も日本語が入らないように。

以下のような感じで溜まっていく。センサ値がたくさんあるが、IFTTTのWebhooksチャンネルは一度に3種類までしか送れないので、センサ計測値、水やり実施有無、電池電圧に分けて記録。


ここまでで全体が完成した。ソーラー充電を含めてちゃんと動くか、しばらく試運転していこうと思う。


まとめと今後の課題

自動水やり器が完成した。


ソーラー発電式自動水やり器を作る(3) --- 筐体の設計、製作 ---

概要

前回に続き、回路基板を入れる筐体と水瓶を製作した。


背景と目的

前回に続き、回路基板を入れる筐体と水瓶を設計、製作する。


詳細

1.回路基板を収納する筐体

1.1 満たすべき要件


1.2 物の調達

やはり100均のプラスチックケースなどがちょうどいいだろうと思い、探してみた結果、セリアでちょうどよさそうなものが見つかった。ただし、防水構造ではないので、適宜防水加工をする。それと、材質的にも屋外使用はちょっと厳しいかも?と思うのでできるだけ日陰になるように設置する。


1.3 製作

ベースボードをねじで固定し、蓋と本体の隙間はエプトシーラーで埋めたが、ちょっと不安はある。使い始めてからしばらく様子を見る必要はありそう。本体裏面のネジ穴から水の侵入が考えられるので、エプトシーラーを使った実績のある方法を用いて、穴をふさいだ。(写真撮り忘れた) なお、筐体の外に設置される土壌水分センサ、ポンプ、水位センサなどの配線は、筐体下側に穴をあけて通してあるので、水が上からかかる分には大きな問題はない。


2.水瓶

2.1 満たすべき要件

  • 2L程度の水が入ること
  • 水位センサとポンプ装着のための加工がしやすいこと
  • お金をかけずに


2.2 調達

これまた100均の力を借りた。こちらはダイソーのいわゆる麦茶用ボトルのようなもの。バケツみたいなものもあったが、四角いほうが筐体とドッキングしやすいのでこちらを選んだ。


2.3 製作

ボトル内を撮影したためちょっとわかりにくいが、ボトル内に水位センサとポンプをねじで固定。これもネジ穴からの水漏れを防止するため、エプトシーラーを使用。水を満タンに入れて放っておいたが全く漏れる気配がないのでOK。


3.全体

最後に筐体とボトルを合体させて完了。これでハードウェアは完成。


まとめと今後の課題

筐体と水瓶を設計、製作することができた。次回は、マイコンのソフトを作って完成にこぎつけたい。