WROOM-02で土壌センサーを作ってみた (Arduino, ESP-WROOM-02, ESP8266)



今年からベランダ菜園をはじめているが、日当たりの悪いベランダなので、朝、夕の二回の水やりの必要性に疑問を感じていた。
土のかわき具合を調べることができれば、水やりの必要性に確信がもてる。

そこで、今回はESP-WROOM-02 (ESP8266)を使って、土壌センサーで土の水分量を測れるようにしていく。

ESP-WROOM-02にはADコンバータが内蔵されているのでそれを使う。ただし内蔵のADコンバータは上限が+1Vまでなので、センサーからのアナログ出力を抵抗で分圧して読み取っていく。





土壌センサー (Capacitive Soil Moisture Sensor v2.0)


今回土壌センサーの購入にあたって、AliExpressのアプリをはじめて使ってみた。
住所をローマ字で書かなければならないが、それ以外は思ったより簡単だった。
届くまでに時間はかかるが、物によっては電子部品が非常に安く手に入るのでAliExpressを今後も使っていきたい。

Capacitive Soil Moisture Sensorというセンサーで、値段はなんと87円!
送料が35円で、合計しても122円という激安価格!

すぐさまポチった。



8月13日に注文して、8月27日にポストにちょうど2週間で届いた。
思ったより早い。



商品ページではバージョン1.2になっているが、届いたものはバージョン2.0となっている。
なにが違うのかは分からないが、とくに問題はなさそうだ。

この土壌センサーは静電容量型で、センサーに接触している水分量が変わると、センサー内部の静電容量も変化することから、出力電圧を変化させているようである。
土壌センサーは他にも、金属棒2つを使って土の抵抗を測ることで土壌の水分量を測定する方法がある。しかしこの場合、金属棒が腐食して抵抗値が変化しやすい。
それに比べてこの静電容量型は、腐食がほぼない。


さっそくWROOM-02に土壌センサーを接続してみる。



センサーの電源はWROOM-02の主電源(アルカリ電池2本)と同じ3Vに接続した。
また、TOUT に入力できる信号は+1Vまでなので、アナログ出力 AOUT を分圧抵抗で1/3の電圧にしてWROOM-02の TOUT ピンにつないだ。





本記事ではWROOM-02のライターの作り方はを省略する。



プログラム


この土壌センサーには水分量の絶対値的なものがないので、空気中と水中のデータをそれぞれ測り、現在の水分量の割合を計算していくことになる。

まずは、空気中の時のアナログ電圧を AirValue とする。
次にコップに水を入れ、その中に浸けて測った値を WaterValue とした。



土壌センサーのアナログ出力 Aout を、AirValue を最小値とし WaterValue を最大値としたパーセントで表すには次のような式になる。

$$ Moisture = 100 - 100 \times \frac{(Aout - WaterValue)}{(AirValue - WaterValue)}$$


これを元に、水分量を測定し、Ambientへ送信するまでのArduinoプログラムを作ってみた。



TOUT ピンのアナログデータは、下記の宣言でモジュールを読み込んで system_adc_read() 関数を使って読み取ることができる。

extern "C" {
#include "user_interface.h"
}



それっではさっそくこの土壌センサーを使って、ベランダで育てているチンゲンサイの土壌の水分量を測定してみることにしよう。


朝水やりしてから、土壌の水分を測定してみた。

水分量がなぜか上昇していくのを不思議に思いながらも、そのままログを取り続けていた。
数式を何度も確認しても、間違っている点はなさそうだ。

そして途中、電池切れになり電池を交換した時に、重大なことに気づいてしまった!


乾電池の電圧効果で土壌センサーのアナログ出力も変化してしまっていたのだ。

アルカリ電池2つで約3Vになるので、これをWROOM-02の主電源にしていたが、センサーもこの電源を使っているので、電圧降下のがそのままアナログ出力に出てしまっていたのだ。

土壌センサーは出力電圧が低くなると水分量が多いと判断される。だから、電池の消耗で電圧が下がると右肩上がりのグラフになってしまっていたのだ。
この問題は3.3Vの定電圧をレギュレーターで作れば、簡単に解決する。
あいにく手元になかったので、そのうち対処することにしよう。

とりあえず今回は、土壌センサーの使い方を覚えただけで良しとしようか。




参考


Capacitive_Soil_Moisture_Sensor_SKU_SEN0193-DFRobot
Arduinoライブラリー - Ambient



あなたにおすすめ