【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較
投稿日:
植物の自動水やりシステムなどを作るときに、土壌が乾いていないか検知するセンサーが必要になります。
このときに使える、Raspberry Pi(ラズパイ)やArduino用に作られた
格安の土壌湿度(土壌水分)センサーが一般市場に出回っています。
安く入手できるものには2種類のセンサーがあり、
1つは電気抵抗式、もう1つは静電容量式のものがあります。
本記事ではこれら2つを実際に動かしてみて、問題なく使えそうか、
大きな違いがあるのか比較してみます。
比較するセンサー
今回は電気抵抗式センサーを1つと静電容量式センサーを2つ使用しました。
電気抵抗式 | 静電容量式1 | 静電容量式2 | |
---|---|---|---|
基板上の印字 | MH-Sensor-Series Flying-Fish | Capacitive Soil Moisture Sensor V1.0 | Capacitive Soil Moisture Sensor V1.2 |
型番 | YL-69 | SEN0193 | 不明 |
メーカー | 不明 | DFRobot | 不明 |
駆動電圧 | 3.3 – 5V | 3.3 – 5.5V | 3.3 – 5.5V |
出力電圧 | 0V – 駆動電圧 | 0 – 3V | 0 – 3V |
電気抵抗式
電気抵抗式の土壌湿度センサーは、2つの電極間にDC電圧をかけて、
その間の抵抗値を測定することで湿度を検出します。
水を多く含むほど電気が流れやすくなるため、抵抗値が変化し湿度の変化として識別できます。
ただし金属と水に電気を流すので、電気分解によって 電極が腐食します。
長期間使用する場合は注意が必要になります。
今回使用したのはYL-69という型番のものです。
型番が明記されていない、または別の型番のものでも、
見た目が同じ互換品であれば、同じ機能であると思われます。
このセンサーは、アナログ出力とデジタル出力の両方が可能になっています。
ラズパイのGPIOにはアナログ入力端子が存在しないので、
センサーのアナログ出力を使用する場合は、
アナログ・デジタルコンバーター(ADC)を用意する必要があります。
土壌が乾いているか乾いていないかの2パターンを検出したいだけであれば、
センサーのデジタル出力を使うのも1つの手で、
その場合はADCなしでラズパイと接続可能です。
こちらの出力は、湿っているときは0V、乾いているときは駆動電圧になり、
その閾値は基板上の半固定抵抗を回すことで調整できます。
基板にはLM393というコンパレータが搭載されています。
静電容量式
静電容量式は電極にAC電圧を印加して、電極回りの誘電率を測定することで
土壌の湿度を測定するセンサーになっています。
土に比べて水の誘電率は非常に大きいため、水の含水量の変化を検知できます。
電気抵抗式と異なり電極は露出していないため、電極の腐食は起こりません。
今回使用したセンサーは、"Capacitive Soil Moisture Sensor V1.0"の印字があるもの(型番:SEN0193)と
"Capacitive Soil Moisture Sensor V1.2"の印字があるもの(型番:不明)の2つを使いました。
データシートが入手できたのはV1.0だけでしたが、基本的な特性はどちらも変わらないようです。
AmazonではV1.2の方の取り扱いが多く、安く手に入ります。
ただしV1.2の古い個体は抵抗R4がグランドから浮いているため、
応答速度が遅くなっており、配線の修正が必要になります。
電気抵抗式とは異なり、こちらは出力がアナログのみなので、
ラズパイに接続する場合はADCが必須となります。
比較結果:どちらがオススメ?
結論を先に書いてしまうと、お試し程度に使用したい人、手軽に使ってみたい初心者の人、土の深さに制限のある人には電気抵抗式センサーをオススメします。
センサーに電圧をかけると腐食が進んでしまうという欠点はありますが、
あまり試行錯誤せずにきれいなデータがとれること、
電極プローブのサイズを自由に変えられることがその理由となります。
一方で、長期的な使用を考えている人、土壌の種類や電極プローブの刺し方等の測定系を最適化できる人には静電容量式をオススメします。
長時間センサーを動かしても電極が腐食しないという大きなメリットがあるためです。
しかし簡単に測定してみたところ、あまり再現性の良い結果が得られなかったので、
正確な土壌湿度を測定したい場合は条件検討が必要になりそうです。
各センサーのオススメできる人
- 電気抵抗式センサー:
- 手軽にそこそこの精度で湿度を知りたい人
- 測定する土壌の深さが特殊な人
- 静電容量式センサー:
- 長期的に測定をしたい人
- 測定条件を最適化できる人
- 湿度値の精度が低くても問題ない人
サイズの比較
サイズの点から、電気抵抗式と静電容量式のセンサーの比較をしてみます。
電気抵抗式は電子基板と電極プローブが分かれており、
電極プローブのサイズは60 x 20 mmです。
原理上、土に露出した金属が2本ささっていれば良いので、
電極プローブをカットしたり、別で用意した
適当な金属を2本用意したりしても動作するはずです。
そのため、比較的自由に電極のサイズを変えることができます。
一方静電容量式は、基板の電極が一体化しています。
電極プローブは金属部分が露出していません。
これは腐敗が進行しないというメリットがありますが、
カットすると電極を覆っていた部分が露出する可能性や、
内部の電極が電気的に切断されてしまう可能性があり、
自由に電極プローブサイズを変えることができないというデメリットになります。
電極プローブは土壌に45~65mm差し込むことが推奨されていますが、
これより深いor浅い土壌をモニターしたい場合には、
別のセンサーを検討する必要が出てきます。
土壌湿度センサーのサイズ
- 電気抵抗式: 60mm x 20mm(プローブ)、32mm x 14mm(PCBボード)
- 静電容量式: 98.0mm x 23.0mm
使用感の比較
回路・プログラム
ラズパイ GPIOピン | ADC (MCP3002)ピン | 土壌湿度 センサー | 機能 |
---|---|---|---|
24 (GPIO 8) | 1 (CS) | – | SPI通信:チップセレクト |
– | 2 (CH0) | A out | センサーから ADCへアナログ信号 |
– | 3 (CH1) | – | – |
20 (GND) | 4 (Vss) | GND | グランド |
19 (GPIO 10) | 5 (Din) | – | SPI通信:データ(ラズパイ→ADC) |
21 (GPIO 9) | 6 (Dout) | – | SPI通信:データ(ADC→ラズパイ) |
23 (GPIO 11) | 7 (CLK) | – | SPI通信:クロック |
17 (3.3V) | 8 (Vdd) | – | ADCの電源 |
22 (GPIO 25) | – | Vcc | センサーの電源 |
電気抵抗式センサーにはデジタル出力端子もありますが、今回は使用していません。
センサーからは、電気抵抗式・静電容量式ともにアナログ信号を拾います。
ラズパイで信号を検出したいのですが、アナログ入力端子を持っていないので、
ADCによってアナログ信号をデジタル信号に変換してから検出します。
使用したものはMCP3002という10ビットの2ch ADCで、変換後のデジタル信号はSPI通信方式になります。
ADCの1番ピン近くには丸印または切りかけがあり、
そこから反時計回りに1,2,…,8とピン番号が振られています
詳しくはデータシートを参照ください。
土壌湿度センサーは、基板にピンの割り振りが書かれているので、それに従って接続してください。
ラズパイのGPIOピンは、SPI接続用のピンを使用します。
ADCのVccピンには一定電圧3.3Vを接続していますが、土壌湿度センサーのVccには、
印加する電圧する時間をコントロールするため、GPIO 25ピンと接続しています。
ラズパイ上ではPythonを使い、gpiozero ライブラリをつかってGPIOの制御を行いました。
ただしピンの動作制御用に pigpio のAPIを利用しています。
コードを動かす前準備として、pigpio をインストールしておく必要があります
(gpiozero は初期状態からインストール済みのはずです。)
インストールできていない場合は、下記の記事を参考にしてください。
ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】
インストールが済んだら、pigpioのデーモンを起動も忘れずに。
# インストール
sudo apt update
sudo apt install -y pigpio
# デーモン起動・起動設定
sudo service pigpiod start
sudo systemctl enable pigpiod.service
SPI通信を使うには、その機能も有効化しておく必要があります。
まだ設定していない場合は、下記の設定をしておいてください(1回やれば再設定不要)。
sudo raspi-config
このコマンドを入れると、設定画面が起動するので
"Interface Options" > "SPI" > "はい(Yes)"
と選択すればOKです。
センサーの動作確認には、下記のPythonコードを使用しました。
センサーへの電圧印加時間を簡単に変えられるようにしています。
【表示する】
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gpiozero import MCP3002,DigitalOutputDevice
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
VOLT_APPLIED_TIME = 1. # 測定までの電圧印加時間[sec]
MEAS_PERIOD = 1. # 測定周期(測定間隔) [sec]
def main():
print(VOLT_APPLIED_TIME)
# 初期化
Vref = 3.3
factory = PiGPIOFactory()
adc_ch0 = MCP3002(channel=0, max_voltage=Vref, pin_factory=factory)
dout = DigitalOutputDevice(25, pin_factory=factory)
meas_period = MEAS_PERIOD if VOLT_APPLIED_TIME < MEAS_PERIOD else VOLT_APPLIED_TIME
wait_time = meas_period - VOLT_APPLIED_TIME
try:
while True:
# MCP3002からの出力値を表示
dout.on()
sleep(VOLT_APPLIED_TIME)
val = adc_ch0.value
print(f'value:{val:.2f}')
dout.off()
sleep(wait_time)
except KeyboardInterrupt: # Ctrl+c入力時
print("Interrupt")
if __name__ == "__main__":
main()
なお、回路およびソースコードはこちらの記事を参考にさせていただきました。
電気抵抗式センサーの電圧印加時間の検討
電気抵抗式センサーは電気を流すと腐食が進んでいくので、
可能な限り電圧の印加時間は短く設定したいものです。
そこで電圧印加時間を変えたときの、読み取り値の変化を確認しました。
センサーの電極プローブは空中に浮かせています。
結果は0.01秒よりも印加時間が短くなると、センサーの検出値が低下していきました。
余裕をもって0.1秒の値に設定して、次の測定を行うことにしました。
土壌湿度の測定方法
ここまでで回路・プログラム・パラーメーターの準備ができたので、
電気抵抗式と静電容量式センサーを実際に使って測定し、
検出値と土壌湿度値の関係を示す校正グラフを作成しました。
測定の手順は以下の通りです。
- 一定体積(今回は400mL)の乾燥した土を用意
- センサーを土に挿入し、ラズパイでの検出値を記録
- 水を一定量(今回は30mL)加え、土をよく攪拌
- 2,3を繰り返し
実際に使った土は「花ごころ 多肉植物&ミニ観葉植物の土」になります。
ざっくりと傾向がわかれば良いと思い、下記を仮定した上で測定を行いました。
- 土は水を加えても完全に吸収し、膨張せず体積一定であるとする
- 水を加える前の含水率を0%とする
土壌湿度の値として、体積含水率(体積基準含水率)$\theta_v$ を下記式より算出しました。
$$\theta_v = \frac{volume_{water}}{volume_{soil}}$$
ここで$volume_{water}$は水の体積、$volume_{soil}$は土の体積です。
静電容量式センサーは、電極プローブの真上に剝き出しの電子基板がついています。
ここに水が付着してショートすると問題なので、ビニールテープで覆い、輪ゴムで固定しました。
測定結果・使用感
水15mLを10カップ = 150mLほど加えると、土は水を吸収しきれなくなったので、測定はそこでストップしました。
土壌の含水率を変えたときの各土壌湿度センサーの出力値をFig.5に示します。
電気抵抗式・静電容量式の両方のセンサーで、土壌の含水量が変わるごとに、
センサー出力値も変化しているので、土が乾いているかどうかを検出するのにはどちらも使えそうです。
電気抵抗式センサーは、電圧をかけていると出力値が徐々に大きくなっていくのが確認されました。
これは電極表面の腐食が進んでいったためであると考えられます。
Fig.5でもその傾向が確認でき、土に水が多く含まれるときに、電圧の印加時間による差が生じています。
センサーへの印加電圧が0.1秒のパルスのときでは、水による腐食の進行が遅いので出力値が小さく、
一方で常に電圧をかけているときには出力値が大きくなっています。
測定の順番としては、センサーへの電圧印加時間0.1秒を先に測定し、次に常に印加時の測定をしています。
以上のように、センサーへ印加する電圧を測定前の0.1秒のみと短くしても特に問題なく土壌湿度が測定でき、
むしろ腐食の進行を遅らせて測定ができると言えます。
静電容量式センサーの測定結果をみると、電気抵抗式と比較して
グラフがガタついた(誤差が大きい)ように見えます。
一般的には電気抵抗式よりも静電容量式センサーの方の安定性が高いと言われていますが、
その傾向とは逆の結果になってしまいました。
土に含まれる塩分が高いとき(導電率が高いとき)では静電容量式のものの精度が下がるようなので、
今回使用したものは適した土壌ではなかったのかもしれません。
また静電容量式の電極プローブには、応答性の高い面と低い面があるようだったので、
土壌への刺し方が適当すぎた可能性もあります。
とくに体積含水率10%以下のときでは、土が乾いていることでセンサーとの密着性が低くなるので、
より一層誤差が大きくなっていたのだと予想されます。
また、静電容量式センサーのグラフのガタガタ具合を考慮すると、
v1.0とv1.2ではそれほど大きな差はないように思えます。
素性がはっきりとしたv1.0に対して、比較的安く入手しやすいv1.2でも、
とくに問題なく水分に応答することがわかりました。
土壌湿度を測定した使用感
- 電気抵抗式: センサーへの印加電圧を短くすることで腐食の進行を遅くして測定できる
- 静電容量式: 土壌の種類やセンサーの刺し方により誤差が大きくなる可能性あり、
v1.0とv1.2では大きな差はない
価格の比較
Amazonで探してみると、センサー1個だけ購入する場合、
電気抵抗式は150円ほどで売っているのに対し、
静電容量式は安くても450円ほどなので少し高いように感じます。
しかしどちらも5, 6個セット500~1000円ほどで売っているのも見かけるので
その場合、電気抵抗式・静電容量式どちらも単価100~200円ほどになるので、
価格に大きな差はないと言えます。
ただし静電容量式のv1.0は単価1000円ほどで売っているものしかないようなので、
安く購入したい場合はv1.2になるかと思います。
各センサーの価格
- 電気抵抗式・静電容量式ともに単価100~200円程度(セット買い時)
それぞれの土壌湿度センサーの特徴
電気抵抗式
電気抵抗式の土壌湿度センサーは、電極プローブに電気を流すと
水と反応して腐食していくという大きな欠点があります。
そのため長期的な運用には向いていません。
一方、電極プローブは単純な構造となっているため、
小さくカットすることも、長い適当な金属棒に取り替えることも可能です。
これにより、極めて小さい植木鉢や深くまである土壌に対しても対応できます。
また使用してみた個人的な感覚としては、
電極プローブの刺し方にそれほど気を使わなくてもうまく測定ができるように感じました。
- メリット
- 電極プローブが小型、自由に加工(サイズ変更)も容易
- 初心者でもうまく含水量の測定ができる
- デメリット
- プローブが徐々に腐食していく
静電容量式
静電容量式の土壌湿度センサーは、電気抵抗式と異なり、
どれだけ使用しても電極プローブの腐食が起こらないので、
本格的な長期運用にも耐えうるセンサーだと言えます。
電極プローブは少し複雑な構造であり、電子回路とも一体化しているため、
プローブのサイズを変更することが難しいです。
また電子回路は露出しているため、土壌に刺して使用する場合には、
回路に水が付着しショートするのを防ぐ工夫が必要になります。
今回の測定では、電気抵抗式センサーよりも誤差が大きい結果となりました。
一般的に静電容量式センサーの方の精度が高いと言われていることを踏まえると、
測定に適した土壌選びが必要であったり、電極プローブの刺し方にコツがあったりしそうです。
以上のことから、静電容量式センサーは比較的慣れた人向けのセンサーかなと感じています。
- メリット
- 腐食しないので長期間使用可能
- デメリット
- 電極プローブのサイズが固定
- 電子回路の防水加工が必要
- 土壌の選択の必要性、刺し方にコツがありそう
オススメな人
土壌センサーを使うのに慣れていない初心者や、お試し程度に使用してみたい人は、
電気抵抗式の土壌湿度センサーをオススメします。
慣れていなくてもとりあえず回路を作り、プログラムを走らせるだけで
それなりに含水量がわかると思われます。
また測定したい土壌の深さが浅かったり、深すぎたりと、深さの条件が特殊な場合も、
電極プローブのサイズ変更の比較的容易な電気抵抗式センサーの方が有利となります。
一方、長期的な測定を想定している人は、
電極プローブが腐食しない静電容量式センサーをオススメします。
また土壌を適切に選択したり、センサーの刺し方の調整等ができ、
測定系を改善できる人にも向いていると言えます。
「土壌の湿度が何パーセント」という細かい精度は不要で、
ざっくりと土壌が乾燥しているか否かを判定するのに使用する程度であれば、
精度を上げるような調整をしなくても、問題なく使用できるかもしれません。
オススメできる人
- 電気抵抗式センサー:
- 手軽にそこそこの精度で湿度を知りたい人
- 測定する土壌の深さが特殊な人
- 静電容量式センサー:
- 長期的に測定をしたい人
- 測定条件を最適化できる人
- 湿度値の精度が低くても問題ない人
まとめ
電気抵抗式 | 静電容量式 | |
---|---|---|
基板上の印字 | MH-Sensor-Series Flying-Fish | Capacitive Soil Moisture Sensor V1.0/ v1.2 |
型番 | YL-69 | SEN0193 / 不明 |
メーカー | 不明 | DFRobot / 不明 |
サイズ | 60mm x 20mm(プローブ) 32mm x 14mm(PCBボード) | 98.0mm x 23.0mm |
使用感 | 電圧の印加を短くすることで腐食を遅くできる | 土壌の種類やセンサーの刺し方により誤差が大きくなる可能性あり、 v1.0とv1.2に大きな差はない |
価格 | 単価100~200円程度(5,6個セット) | 単価100~200円程度(5,6個セット) |
電気抵抗式と静電容量式の土壌湿度センサーを実際に使用して比較してみました。
両者に違いは見られましたが、どちらも水を加えることによって出力値に変化がみられたので、
土壌が湿っているか、湿っていないかの2パターンを判別する程度であれば、
どちらのセンサーを使っても問題ないように感じます。
静電容量式より電気抵抗式センサーの方がきれいなデータが得られたのは意外でしたが、
土壌の種類を変えたときや、同じ条件で繰り返し測定したときにどうなるかをみると、
違った可能性になるかもしれません。