工作と競馬2

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

ソーラー発電式自動水やり器を作る(1) --- 構想検討 ---

概要

植物の自動水やり器の構想を検討した。


背景と目的

およそ1年半前に、こちらで、同じようなタイトルの記事を書いたが、途中で他の製作が忙しくなりやめてしまっていた。最近、やっと手を付ける余裕ができたので、リスタートする。まずは、改めて構想を練ってどのようなものを作るか決める。


詳細

1.やりたいこと

ざっと列挙すると、以下の感じ。最後の項目は、あいまいな感じではあるが、温度や湿度といった基本的なものでよい。

  • 室内またはベランダに置いた植木鉢に、水やりをができる
  • 水やりの実施有無は、植木鉢の土の湿り気を基に判断する
  • 電力はソーラーパネルで発電して賄う
  • 水やりの実績をスマホ等に通知する
  • 周囲の環境も計測したい


2.システム要素

2.1 水やりを電気的に行うには

最近、このシステムで使うことを想定して、以下の記事で、試している。ちゃんと使えることがわかったので、これを使うことにする。

dekuo-03.hatenablog.jp


2.2 湿り気を判定するには

土の湿り気は、土壌水分センサを使う。前回すでにセンサだけは買っていたが、いよいよ日の目を見る時が来た。

dekuo-03.hatenablog.jp


2.3 ソーラーパネルで電力を賄うには

ソーラーパネルは、昨年秋に検討をした。その際、一時蓄電用にエネループニッケル水素電池を用いたのだが、繰り返し中途半端な充電をしたためか、途中でメモリ効果らしき現象が起き、うまく充放電できなくなってしまったため、頓挫していた。

dekuo-03.hatenablog.jp

今回はどうするかというと、記事には書いていないが、別途、リチウムイオン電池を使った系を検討し他結果うまく稼働しそうな手ごたえを得られたので、ソーラーパネル発電+リチウムイオン電池で蓄電という構成を用いることにする。


2.4 実績をスマホ通知するには

リモート水位センサの定期通知で使用しているおなじみIFTTT+LINE Notify連携でいいだろう。あまりこだわらない。

https://dekuo-03.hatenablog.jp/archive/category/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%B0%B4%E4%BD%8D%E3%82%BB%E3%83%B3%E3%82%B5%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0dekuo-03.hatenablog.jp


2.5 温度や湿度の計測

これは、適宜温度センサや湿度センサを使えばいいだろう。手持ち品でBME280があるのでそれで十分。


3. システム構成

上記のシステム要素を踏まえ、以下のようなシステム構成になる。

  • メインのマイコンは、手持ちのESP-WROOM-32が使う
  • 理想的なシステムは水道直結の給水系だが、室内 or ベランダとなると施工が厳しいので、一定期間分の水がためられるバケツのようなもの(図では水瓶)を用意し、1週間に一度バケツに給水という感じにする。チャンスがあれば、屋外で水道直結の系を実現してみたいが、今回はお預け。
  • 水瓶自体の水切れがわかるように、水位センサも付けることになるだろう


まとめ

植物の自動水やり器の構想を検討し、大まかなシステム構成が描けた。次回から、設計していく。

ESP-WROOM-32 起動直後におけるGPIO出力レベルが、ポートごとに異なることについて調べてみた

概要

ESP-WROOM-32で、起動直後におけるGPIO出力レベルがポートごとに異なることを確認し、対処方法について考察した。


背景と目的

先日、ArduinoでESP-WROOM-32をいじっていたところ、GPIOの起動直後における出力レベルがGPIOポートごとに異なるようにみえる現象に遭遇した。具体的には、以下に示すように、ポートの入出力方向の設定後→出力レベルを設定すると、実際に出力されるまでの間HIGHが出力されるポートと、LOWが出力されるポートがあるように見えた。ポートごとの違いが本当にあるのか、チェックしてみる。

void setup () {
    pinMode(GPIO_NUM, OUTPUT);
    digitalWrite(GPIO_NUM, HIGH);
}


詳細

1. 環境

  • Arudino IDE 1.8.12
  • Arduino-esp バージョン調べ忘れた、2020/05/31時点での最新と思われる
  • ESP-WROOM-32 DevKit-C


2.方法

今回は、現象の確認が主な実施事項なので、あまり細かいところに立ち入らず、以下のように、2つのGPIOポートに対して入出力設定と出力レベル設定を行ったときに、出力レベルがどう遷移するか、オシロスコープによって波形を観測する。時間関係が分かりやすいように、2つのポート間に100msecの時間差をつけて観測しやすくしておく。ここで、

  • IO5: 常に、もう一方に対して100msec後にHIGHを出力する
  • 他のIO: IO5に先行する
  • IO34,35,36,39は入力専用なので除く
  • 負荷は何もつけない
void setup () {
    pinMode(他, OUTPUT);
    pinMode(5, OUTPUT);

    digitalWrite(他, HIGH);
    delay(100);
    digitalWrite(5, HIGH);
}


3. 結果

以下の通り、起動後0.5秒間の出力レベルが、GPIOポートによって異なるということが、明らかになった。 青はIO5の出力、赤はもう一方のGPIOの出力である。横軸0秒の時点でリセットボタンを押し、約0.2秒後にリセットボタンを離し、ESP32が再起動させている。その時点から約0.5秒後、IO5がいったんLOWに落ち、0.1秒後にHIGHになることから、LOWに落ちた時点でpinModeが実行されている。

  • IO5,4,15: HIGHが出力される f:id:dekuo-03:20200816003201p:plain

  • IO0: HIGHが出力される(リセット中) f:id:dekuo-03:20200816003154p:plain

  • それ以外: LOWが出力される f:id:dekuo-03:20200816003157p:plain

なお、リセット前の出力レベルに依存しないか確かめるため、LOWを出力した状態でリセットし、起動後LOWを出力する場合についても調べた(赤=IO15)が、以下のように依存しないことが分かった。

f:id:dekuo-03:20200816003205p:plain


4.考察

Arduino-esp32特有の現象なのか、ESP-IDFでも同じなのかといったところは確認できていないが、ひとまず、ポート設定前の挙動を気にせず、ハードウェアを組むと思わぬ動きをするということが予想できる。実際、私はIO5を出力に設定したプログラムで、起動後勝手にHIGH出力がされて意図しない動きになってしまって困った。 対処方法としては、より望ましいレベルが出力されるポートを選択するべきということだ。具体的には、起動直後LOWであってほしい場合には、IO5,15,4は避けるといった感じに。また、ポートに接続される負荷によって出力電圧が変わる。以下は、10kΩの負荷がGNDとの間にぶら下がっている場合だが、0.7V程度までしか上がらない。細かいことはわからないが出力インピーダンスが大きい状態になっているようだ。負荷を利用してLOWになるようにする手もあるだろう。

f:id:dekuo-03:20200816005409p:plain


まとめと今後の課題

ESP-WROOM-32で、起動直後におけるGPIO出力レベルがポートごとに異なることを確認できた。ハード/ソフトを組む際に参考にしたい。


小型ポンプを試す

概要

自動水やり用の小型ポンプを試し、動作を確認した。


背景と目的

およそ1年数か月前、こちらの記事で、自動水やりシステムを作りたいと書いた直後、リモート水位センサのシステムの製作により、中断してしまっていたのだが、ようやくまた作りたいと思うようになった。そこで、それに向けて、システム要素を集めて動作を確認しながら、システム構築に進んでいきたい。まずは、水やりのためのポンプを試す。


詳細

1.ポンプの調達

ポンプは、Amazonで物色していて見つけた以下のモノを使用する。

https://www.amazon.co.jp/gp/product/B07VKSTF78/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1www.amazon.co.jp

3-5V程度で動作するポンプと、それを駆動するリレーモジュール、そして土壌水分センサも付いてくるという素晴らしいセットがたったの1000数百円ということで、非常にお買い得に見えるが、当たりはずれがあるのか、使い方がわからないのか、レビューには動くだの、動かないだの書いてあるので、ちゃんと動くのかは少し心配。


2.接続

接続は、システムの電源として想定するリチウムイオン電池を用いた以下の構成。リレーの1次側と2次側は、今回は共通の電源で動かす想定なので、共通のGND、共通のVCCにつないだ。リレーモジュール基板は、全く説明書がないため、この接続にたどり着くまで、少し格闘してしまったが、どうにか正しい配線方法がわかった。ポイントは、IN端子をGNDに落とすと、リレーが動きノーマリーOPEN端子がCOMと導通するというところ。IN端子をふつうはHIGHにしたいところだが、どうやら逆論理らしい。このくらいは、Amazonの商品ページに書いてほしい。このあたりが、レビューで動かないと言っている人たちがハマってしまっている部分なのではないだろうか。


3.動作確認

手持ちのリチウムイオン電池を使って動かしてみたところ、非常にうまく水をくみ上げてくれた。こんな小型ポンプでも、園芸用の鉢程度であれば、全然問題ないと思う。100L/Hの能力があるとのことなので、1分で約1.6L。普段私が水をやっている植物たちも、1日あたり1.6Lはあげていないので、計算上は数10秒動かせば十分な量を上げることができるだろう。


小型ポンプを動かしてみた

ところで、Amazonの商品ページの説明には、水に浸けない状態で使うなと書いてあるが、水につけなくても当然ながら動く。見た感じ、モータの軸についている羽が回っているだけなので、空気中で動かしたからといって何か問題があるとは思えない。


まとめと今後の課題

小型ポンプの動作を確認できた。自動水やり器の構成要素として使えそうだ。