02.M5Stak Basicで自動水やり(1)


02.M5Stak Basicで自動水やり(1)

自動水やり装置DIYキットをAmazonで購入しました。
WayinTop 自動水やり装置 DIYキット 静電容量式土壌水分センサー4個+ポンプ4個+5mホース+リレーモジュール4チャンネル1個 2,280円
https://www.amazon.co.jp/gp/product/B07VNDZDCR/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
この土壌水分センサーでは、正確な水分量は測定できません。土が乾いているかいないかを判定する程度です。今回は準備までです。

内容物

  • 静電容量式土壌水分センサーx4個
  • センサー用ハーネス20cmx4本
  • 小型ポンプx4個
  • リレーモジュールx1個
  • ホースx5m (1台当たり125cm)

静電容量式土壌水分センサー

  • Capacitive Soil Moisture Sensor v1.2
  • Vcc DC3.3-5.5V
  • Icc 5.5mA
  • Vo DC0-3.3V
    HPでは3Vとなっていて内蔵の電圧レギュレーターで3Vにしているのかと思ったが、測定では3.3Vでした。
    実際の静電容量のアナログ範囲は1.2-2.5Vとあります。
  • コネクタ PH2.54-3P (PH2.0-3Pではなかった)
    pin:1-GND, 2-Vcc, 3-Aout
  • 使用IC TLC555CD (TI)
    表示はTL555C
    TLC555Cのデータシートより
    VDD=2-15V
    Ta=0-70℃
    出力抵抗Roは、Ta=0℃時Ro=180Ω,Ta=50℃時Ro=230Ω(VDD=3V, Io=0.3mA, 出力H時)
  • 推奨深度は、Sensor v1.2のシルク表示のn~1の間です。また、シルクの線は警告線です。
  • 土中に入る部分はレジストがかかっていて金属むき出しではないため耐食性があります。
  • 回路部は防水ではありません。
  • 添付ハーネス長は、20cmで短いです。

水分量と静電容量

コンデンサの静電容量Cは、
 S:極板の面積
 d:極板間の距離
とすると、Sに比例し、dに反比例します。その時の係数をεとすると
 C = ε x S / d
となりεを誘電率と言います。
 εo:真空の誘電率
とすると、誘電率εは、
 ε = εr x εo
となり、比誘電率εrの概略値は、https://www.key-t.co.jp/resources/rader-tecinfo/rader02/ より
材質比誘電率
空気1
関東ローム(乾燥)2-5
土(乾燥)2-6
砂(乾燥)3-6
清水・海水81
よって、空気や土と水の比誘電率が大きく違うため、土壌の比誘電率を測定する事により水分量がわかります。また、 https://www.jstage.jst.go.jp/article/segj/64/3/64_177/_pdf の7頁目図10に体積含水率(横軸)vs比誘電率(縦軸)のグラフがあります。

測定

No.VccVDDf
13.3613.318292
23.3613.299284
33.3613.392269
43.3613.298261
Vccは、センサーのコネクタpin2の電圧(V)。VDDは、ICのpin8の電圧(V)。fは、ICのpin3の周波数(kHz)です。測定したテスター M-6000M(METEX)の精度は、
fは、600kHz±0.1%+2dgts = ±0.6kHz+2dgts = ±0.8kHz
DCVは、6V±0.7%+2dgts = ±42mV+2dgts = ±44mV
です。

回路図(検出部)

555を使用した発振回路で、ICのpin3がopenの時はほぼ0-Vccの矩形波が出力されます。土の中に埋めるセンサー部をCと見て、矩形波の電圧でR1を通しC(センサー)を充放電し、その上下しているCの電圧をD1によりピーク電圧の時C4に充電しその電圧がセンサー出力されます。また、C4には放電抵抗R4(1MΩ)が接続されています。

校正

参考にした 他社DFROBT製のSKU:SEN0193
https://wiki.dfrobot.com/Capacitive_Soil_Moisture_Sensor_SKU_SEN0193
より
* 出力AD値は、プローブの挿入深さと土壌の固さの影響を受けます。
1.プローブが空気中の値をADdryとします。(湿度0%RHの乾燥土壌と見なします)
2.プローブが水中の値をADwaterとします。(湿度100%RHの浸漬土壌と見なします)
水につける場合プローブの挿入深さにより値が大きく変わります。測定では、プローブをシルクのv1.2のvあたりまで水に挿入しました。
上記の2値がセンサーの検出範囲です。
5000回の平均AD測定値
chADdryADwater
133831535
233611489
333511534
433791572
2値の幅を3等分し、数字の大きい方から、乾燥-湿潤-水と分けると、3351-(乾燥)-2758-(湿潤)-2165-(水)-1572 となり、乾燥の2758以上の時にポンプをonさせます。

小型ポンプ

  • 型名 JT-C3W-4.5
  • 入力 DC4.5V (3-5V) 0.18A 0.91W
  • 動作開始電圧 1V
  • 排水口外径 7.5mm
  • 排水口内径 4.5mm
  • 入水口の径 5mm
  • 流量 100L/H (= 1.67L/M = 27.8cc/S = 3.03cm^3/S)
  • 揚程 55cm
  • 連続動作寿命 300H (= 1週と5日半 短い)
  • 電線長 20cm (短い)
* 水がなくなったら、ポンプを回さない事。ポンプは水容器に完全に沈める事。
Bringsmart(福州尚睿智能科技有限公司)
http://www.bringsmart.com/pd.jsp?id=26#_pp=0_392_-1%7E-1%7E0%7E-1%7E-1

リレーモジュール

  • チャンネル:4
  • リレー:SRD-05VDC-SL-C (Songle Relay)
    コイル:5V 71.4mA
    接点:DC28V 10A, AC125V 10A, C接点
  • 入力pin:1-GND, 2-IN1, 3-IN2, 4-IN3, 5-IN4, 6-Vcc
  • 使用出力端子:各COMとNO端子

回路図(1ch)

入力がL(GND)の場合LEDが点灯し、リレーがonします。入力がH(Vcc or open)の場合LEDは消灯し、リレーがoffします。

ホース

  • 内径:5.54mm
  • 外径:8.2mm
  • 材質:PVC (柔らかい)

M5Stack Basicの使用可能pin

場所pinADDADiDo
21だぶり
22だぶり
23
19
18
3
1
16
17
22
5
2521
2622
351
361
GRO
VE
21
22
* ADとDAの1と2は、ADC1, ADC2, DAC1, DAC2です。Diは、デジタル入力。Doは、デジタル出力です。
* pin25はスピーカ入力でも使用しています。
水分センサー出力のADCpinは、36, 35, 26, 25 とし、リレー駆動用のデジタル出力pinは、17, 16, 5, 3 とします。

電気配線

sensor(No.1)--Basic
Aout(No.1)--G36
Vcc--3.3V
GND--GND

sensor(No.2)--Basic
Aout(No.2)--G35
Vcc--3.3V
GND--GND

sensor(No.3)--Basic
Aout(No.3)--G26
Vcc--3.3V
GND--GND

sensor(No.4)--Basic
Aout(No.4)--G25
Vcc--3.3V
GND--GND

リレーpin--Basic
GND--GND
IN1--G17
IN2--G16
IN3--G5
IN4--G3
Vcc--3.3V

リレー接点--電源
NO(No.1)--5V
NO(No.2)--5V
NO(No.3)--5V
NO(No.4)--5V

ポンプ--電源
黒線(No.1)--0V
黒線(No.2)--0V
黒線(No.3)--0V
黒線(No.4)--0V

ポンプ--リレー接点
赤線(No.1)--COM(No.1)
赤線(No.2)--COM(No.2)
赤線(No.3)--COM(No.3)
赤線(No.4)--COM(No.4)

動作

センサーからリレーのコイルまで動作させています。センサーが空気中の場合は乾燥で、LEDが点灯しポンプはonします。
センサーを手で握ると静電容量が上がり湿潤状態となりポンプはoffとなります。

参考

SKU:SEN0193のテスト

https://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/SEN0193/SEN0193Test.html

防水の静電容量式土壌水分センサー

SKU:SEN0308 (DFROBOT)
https://wiki.dfrobot.com/Waterproof_Capacitive_Soil_Moisture_Sensor_SKU_SEN0308
回路部にケースが被せてあります。ケーブルは1.5mあり、反対側はコネクタ端子がついています。GNDが2端子あるので1つは出力線のシールドかもしれません。

非防水の抵抗式土壌水分センサー

SKU:SEN0114 (DFROBOT)
https://wiki.dfrobot.com/Moisture_Sensor__SKU_SEN0114_
回路はTr1個と抵抗2個で構成されています。TrのVBEは温度により変化するので、出力も温度により変化すると思われます。一般に、30℃高くなると、VBEが約10%下がってonします。また、電極は金属が露出されているので錆びやすいです。
https://image.dfrobot.com/image/data/SEN0114/Moisture%20Sensor%20Schematic.pdf
インターフェース2021年7月号62頁の図1に土壌の水分含有量(%)と抵抗値(kΩ)の実測値グラフがあります。
https://interface.cqpub.co.jp/wp-content/uploads/if2107_062.pdf
2-4mmの粗い土の場合、概略40%で58kΩ, 90%で1kΩ。1mm以下の細かな土の場合、40%で12kΩ, 90%で800Ωとなっています。

土壌水分計の仕組みと活用方法

https://fieldpro.jp/mamelog/soil/3828/

土壌水分関係調査

https://www.maff.go.jp/j/nousin/noukan/tyotei/kizyun/pdf/03_yousui_hata_gijutsusho5-7.pdf
誘電率水分計法の静電容量法は、TDR法、ADR法と比べて地温や電気伝導度の影響を受けやすいそうです。

土壌水分を測定するセンサー

http://www.naro.affrc.go.jp/org/nkk/m/93/06-01.pdf

スケッチ


// 4ch水やり M5Stack Basicにて
#include <M5Stack.h>             // M5Stack Basic
int ADpin[4] = {36, 35, 26, 25}; // 水分センサー analog入力pin
int AD;                          // AD値
float ADC;                       // ADの平均
int ADhantei = 2758;             // 水やり判定値
int RLpin[5] = {17, 16, 5, 3};   // リレー digital出力pin
int i, j;                        // 4ch,平均ループ用
int n = 5000;                    // n個の平均

void setup() {
  M5.begin();//シリアルクリア,115200bps,LCD初期化,電源管理初期化
  delay(500);                     // 0.5秒待つ
  for (i = 0; i < 4; i++) {       // ループ4ch
    pinMode(ADpin[i], ANALOG);    // アナログpinとする
    pinMode(RLpin[i], OUTPUT);    // デジタル出力pinとする
    digitalWrite(RLpin[i], HIGH); // ポンプoff(Hでoff)
  }
}
void loop() {
  for (i = 0; i < 4; i++) {       // ループ4ch
    ADC = 0;                      // ADの和の初期値
    for (j = 0; j < n; j++) {     // n回ループ
      AD = analogRead(ADpin[i]);  // アナログ入力
      ADC = ADC + AD;             // 平均値を出すための和
    }
    AD = int(ADC / n + 0.5);      // 平均値算出
    Serial.printf("%d(%04d)", i + 1, AD);//シリアルモニタに表示
    if (AD > ADhantei) {         // 乾燥時
      digitalWrite(RLpin[i], LOW);  // ポンプon
      Serial.print("on  ");         // シリアルモニタに表示
    } else {                        // 湿潤時
      digitalWrite(RLpin[i], HIGH); // ポンプoff
      Serial.print("off ");         // シリアルモニタに表示
    }
  }
  Serial.println();                 // シリアルモニタで改行
  delay(5000);                      // 5秒待つ
}