ESP8266と土壌センサを使って水分量を測定する方法を解説

この記事では、Arduino互換機のESP8266(ESP-WROOM-02)を使って、土壌センサーで土の水分量を測れるようにしていく。そんなESP8266は、ADコンバータが1つだけ内蔵されている。それを使って土壌センサーのアナログ電圧を読み取っていく。

Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード
Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード

これはD1 miniです、それはESP-8266EXに基づくMini WIFIボードです。 11本のデジタル入力/出力ピン。 すべてのピンは割り込み/ PWM / I2C / 1線式をサポート(D0を除く)。 1アナログ入力(最大3.3V入力)。 Micro USB接続。

Amazon

ESP8266と土壌センサーの配線

土壌センサーは「Capacitive Soil Moisture Sensor」を使った。

DiyStudio 土壌湿度計 湿度検出モジュール 水分センサ アナログ出力土壌水分リアルタイムデータ V1.2 Arduino Raspberry Pi用 耐食性ケーブル付き DC 3.3〜5.5Vワイド電圧配線容量性センシングの原理を使用して土壌水分を検出します(5 個)
DiyStudio 土壌湿度計 湿度検出モジュール 水分センサ アナログ出力土壌水分リアルタイムデータ V1.2 Arduino Raspberry Pi用 耐食性ケーブル付き DC 3.3〜5.5Vワイド電圧配線容量性センシングの原理を使用して土壌水分を検出します(5 個)

Amazon
項目内容
電源電圧3.3〜5.5V
出力電圧範囲0〜3V
消費電流5mA

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

さっそくESP8266に土壌センサーを接続してみた。

ESP8266と土壌センサーの配線
ESP8266と土壌センサーの配線

センサーの電源はESP8266の主電源(アルカリ電池2本)と同じ3Vに接続。

また、TOUT に入力できる信号は+1Vまでなので、アナログ出力 AOUT を分圧抵抗で1/3の電圧にしてESP8266の TOUT ピンへつないだ。

分圧抵抗で3Vを1Vへ変換
分圧抵抗で3Vを1Vへ変換

土壌水分量を測定してみよう!

土壌センサーを使って水分量を計算するには、空気中と水中のデータを測る必要がある。だから、空気中での電圧を水分量を0%とし、水へギリギリまでつけた時の電圧を水分量100%として計算する。

土壌センサーを水につけてアナログ電圧を読み取る
土壌センサーを水につけてアナログ電圧を読み取る

空気中のアナログ電圧を AirValueとし、水の中に浸かっている時のアナログ電圧をWaterValue とする。すると、水分量Moisture(%)は次の式で導き出される。

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

土壌水分量の測定プログラム

次に示すプログラムは、水分量を計測し、Ambientへデータを送信している。

#include "Ambient.h"
//ESP8266では、アナログ入力を使うため以下の記述が必要
extern "C" {
#include "user_interface.h"
}

const int AirValue = 224; // 空気中の実測値を設定する
const int WaterValue = 123; // 水に浸した実測値を設定する
const char * ssid = "WiFi SSID";
const char * password = "WiFi パスワード";
const int channelId = Ambient チャネルID;
const char * writeKey = "Ambient ライトキー";

WiFiClient client;
Ambient ambient;

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password); //  Wi-Fiの初期化

  while (WiFi.status() != WL_CONNECTED) {  //  Wi-Fiアクセスポイントへの接続待ち
      delay(500);
  }

  ambient.begin(channelId, writeKey, &client);  //  チャネルIDとライトキーを指定してAmbientの初期化
}

void loop() {
  int v = system_adc_read();
//  Serial.println(v);
  float moisture = 100 - 100 * (v - WaterValue) / (AirValue - WaterValue);
  Serial.println(moisture);  
  
  ambient.set(1, moisture);
  ambient.send();
  
  delay(60 * 1000);
}

ESP8266では、TOUTピンからアナログ電圧を取得するために、以下の宣言が必要なので注意しよう。

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

測定結果は?

実際に土壌センサーを使って、ベランダで育てている野菜プランターの土壌水分量を測定してみた。

土壌センサーを使ってベランダの野菜プランターの土壌水分量を測定
土壌センサーを使ってベランダの野菜プランターの土壌水分量を測定

朝に水やりをしてから、土壌の水分を測定したデータがこちら。

時間と土壌水分量の推移グラフ
時間と土壌水分量の推移グラフ

水分量がなぜか上昇していくのを不思議に思いながらも、そのままログを取り続けていた。

数式を何度も確認しても、間違っている点はなさそうだ。そして途中、電池切れになり電池を交換した時に、重大なことに気づく。

定電圧でなかったために水分量が正しく測れていない
定電圧でなかったために水分量が正しく測れていない

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

アルカリ電池2つで約3Vになるので、これをESP8266の主電源にしていたが、センサーもこの電源を使っているので、電圧降下のがそのままアナログ出力に出てしまった。土壌センサーは出力電圧が低くなると水分量が多いと判断される。だから、電池の消耗で電圧が下がると右肩上がりのグラフになっていたのだ。

この問題は3.3V電源を低電圧にすれば解決する。しかしあいにく、3.3Vレギュレーターが手元になかった。とりあえず今回は、土壌センサーの使い方を覚えただけで良しとするが、皆さんは電源に十分ご注意を。

英語の記事となるがこちらも参考に

この記事で扱った関連製品はこちら

DiyStudio 土壌湿度計 湿度検出モジュール 水分センサ アナログ出力土壌水分リアルタイムデータ V1.2 Arduino Raspberry Pi用 耐食性ケーブル付き DC 3.3〜5.5Vワイド電圧配線容量性センシングの原理を使用して土壌水分を検出します(5 個)
DiyStudio 土壌湿度計 湿度検出モジュール 水分センサ アナログ出力土壌水分リアルタイムデータ V1.2 Arduino Raspberry Pi用 耐食性ケーブル付き DC 3.3〜5.5Vワイド電圧配線容量性センシングの原理を使用して土壌水分を検出します(5 個)

Amazon
Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード
Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード

これはD1 miniです、それはESP-8266EXに基づくMini WIFIボードです。 11本のデジタル入力/出力ピン。 すべてのピンは割り込み/ PWM / I2C / 1線式をサポート(D0を除く)。 1アナログ入力(最大3.3V入力)。 Micro USB接続。

Amazon

Arduinoの参考書

電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版

電子パーツを自由自在に組み合わせて電子工作ができるように、Arduinoによる電子部品ごとの制御方法を詳しく解説。初心者や電子工作に躓いた人でも安心して取り組めるよう、豊富な図・写真で徹底解説。2018年発刊の「Arduino 電子工作 実践講座」の改訂版です。

KindleAmazon
Arduinoをはじめよう 第3版 (Make:PROJECTS)
Arduinoをはじめよう 第3版 (Make:PROJECTS)

本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。

Amazon

最後まで読んでいただきありがとうございました。

「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。

今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓

あなたにおすすめ