目的
自動灌水には土壌の水分量をセンシングすることが必要で、土壌水分センサーにはTDRや静電容量式、抵抗式などがある。最適なセンサーの選択のために、ネットで簡単に手に入る4種類のセンサーを比較してみた。
土壌水分センサーの仕様
DiyStudio 土壌湿度計
Amazonで購入できて調べた中では最安。
- ¥200/個
- 静電容量式
- 端子:PH型(2mmピッチ)×3(ケーブル付属)
- DC 3.3-5.5 V(ArduinoでもESP-WROOM-02でも使える)
- アナログ出力0-3.0 V(土壌水分量で電圧値が変化する)
実物で空気中に置いた状態(乾燥)と水に浸けた状態(湿潤)で電圧を測定した。仕様では出力電圧3Vのレンジがあるが、実際には0.9-2.1Vの範囲で1.2Vのレンジを使って土壌の水分を測ることになる。
出力電圧[V] | 乾燥 | 湿潤 |
---|---|---|
1 | 2.10 | 0.94 |
2 | 2.11 | 0.92 |
3 | 2.05 | 0.91 |
4 | 2.06 | 0.90 |
5 | 2.12 | 0.91 |
平均 | 2.086 | 0.916 |
SEN0193
DiyStudioとほぼ同じ仕様のセンサーだが、単価は高い。
- ¥960/個
- 静電容量式
- 端子:PH型(2mmピッチ)×3(ケーブル付属)
- DC 3.3-5.5 V
- アナログ出力0-3.0 V(DFRduino UNOというこのセンサーのメーカーのボードに繋ぐと以下のディジタル出力を示す)
Dry: (520 430]
Wet: (430 350]
Water: (350 260]
https://akizukidenshi.com/catalog/g/g113550/
https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193
単価が高い分、DiyStudioよりも出力の個体差が小さそう。
出力電圧[V] | 乾燥 | 湿潤 |
---|---|---|
1 | 2.45 | 1.21 |
2 | 2.45 | 1.22 |
平均 | 2.45 | 1.215 |
SEN0114
抵抗式のシンプルな作りで、端子は金メッキで錆びづらく加工されている。
- ¥500/個
- 抵抗式
- 端子:PH型(2mmピッチ)×3(ケーブル付属)
- DC 3.3-5 V
- アナログ出力0-4.2 V (VCC 5.0V)
乾燥/湿潤の出力の大小が静電容量式とは逆になっている。
出力電圧[V] | 乾燥 | 湿潤 |
---|---|---|
1 | 0 | 3.7 |
2 | 0 | 3.4 |
平均 | 0 | 3.55 |
Adafruit STEMMA Soil Sensor - I2C CapacitiveMoisture Sensor
今回の4種類では唯一のディジタル出力で、I2Cで繋がる。温度センサーも内蔵しているが、精度は±2℃と精度は高くない。
- ¥1,150/個
- 静電容量式
- 端子:PH型(2mmピッチ)×4(ケーブル別売り)
- DC 3-5 V
- ディジタル出力:200 (乾燥) - 2000 (湿潤) (ATSAMD10に繋いだ場合)
水分値に関しては、およそ300のレンジがある。
出力ディジタル値 | 乾燥 | 湿潤 | 温度 |
---|---|---|---|
1 | 315 | 607 | 26 |
2 | 318 | 621 | 23 |
平均 | 316.5 | 614 | 24.5 |
センサーの使い方
アナログ出力の前者3種類は同じような接続で使えるが、ディジタル出力のAdafruit STEMMA Soil Sensorでは使い方が異なる。
アナログ出力センサー
センサーが動作するための電源を繋ぐVCC、センサー値を電圧として出力する端子、グラウンドの3ピンをArduinoなどのマイコンに繋ぐ。出力はプログラムで指定したピンに繋げば良い。ただし、ESPr Developerのアナログ入力は0-1Vしか入れることができないので、上記のセンサーはそのまま使用することができない。対処法の一つとしては、抵抗分圧で0-1Vの範囲に収めることができる。例えば、22kΩと10kΩの抵抗を使って10/32に抵抗分圧。Arduino UNO R4 Wifiなどはレンジが広いのでそのまま繋いで使用することができる。
#include "thingProperties.h"
void setup() {
Serial.begin(115200);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
moisture = analogRead(TOUT);
}
ディジタル出力センサー (Adafruit STEMMA Soil Sensor)
VCC, GND, SCL, SDAの4ピンを繋ぐ。
加えて、以下のライブラリが必要。
- Adafruit_seesaw.h
- Adafruit_seesaw.cpp
#include "thingProperties.h"
#include "Adafruit_seesaw.h"
Adafruit_seesaw ss;
void setup() {
Serial.begin(115200);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
tempC = ss.getTemp();
capread = ss.touchRead(0);
}
センサーの値の安定性
ノイズがなければセンサーは一定の値を出力する状態で丸一日間放置して、センサーごとの値の安定性を確認した。具体的には、アナログセンサーの3つについて、静電容量型は発泡スチロールの上のなるべく空気と接するように置き、抵抗型は水中に置いた。各種2つずつ検証し、同時にデータを得るためにArduino UNO R4 Wifiを用いた。
DHT22を用いて、気温と湿度へのセンサー値の依存性も検証したが、今回のような±1℃の条件下では依存性は見られなかった。
Arduino Cloudからデータを吐き出して統計処理すると、ばらつきが見えてきた。抵抗型のSEN0114は±100も値が変化してしまっている。それに対し静電容量型は±40に収まっており、標準偏差も小さい。
DiyStudio_1 | DiyStudio_2 | SEN0114_1 | SEN0114_2 | SEN0194_1 | sen0194_2 | |
---|---|---|---|---|---|---|
平均 | 503.91 | 509.86 | 653.25 | 659.17 | 578.95 | 578.09 |
最大値 | 26.09 | 41.14 | 109.75 | 90.83 | 21.05 | 20.91 |
最小値 | -14.91 | -31.86 | -103.25 | -88.17 | -9.95 | -10.09 |
標準偏差 | 7.00 | 19.06 | 63.52 | 54.59 | 3.98 | 3.58 |
まとめ
値の安定性の観点では静電容量型が良く、単価¥200のDiyStudioはコスパが良い。SEN0194は個体差も少なそうで、何十個と使うのでなければ選択肢としてはありだろう。