LoginSignup
1
1

Arduino CloudでガーデニングIoT -土壌水分センサーの比較-

Last updated at Posted at 2024-05-06

目的

自動灌水には土壌の水分量をセンシングすることが必要で、土壌水分センサーには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などはレンジが広いのでそのまま繋いで使用することができる。

analog_soil_sensor_ブレッドボード.png

#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_soil_sensor_ブレッドボード.png

加えて、以下のライブラリが必要。

  • 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を用いた。

S__15458350.jpg

DHT22を用いて、気温と湿度へのセンサー値の依存性も検証したが、今回のような±1℃の条件下では依存性は見られなかった。

スクリーンショット 2024-05-06 10.51.50.png
スクリーンショット 2024-05-06 10.52.09.png
スクリーンショット 2024-05-06 10.52.00.png

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は個体差も少なそうで、何十個と使うのでなければ選択肢としてはありだろう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1