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

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

KKmoon ウェザーステーションキット DHT11温度湿度 ウェザーステーション キット BMP180大気圧/ BH1750FVI光センサー 0.96インチ IDEIoTスターター用 ディスプレイモジュールの交換
KKmoon ウェザーステーションキット DHT11温度湿度 ウェザーステーション キット BMP180大気圧/ BH1750FVI光センサー 0.96インチ IDEIoTスターター用 ディスプレイモジュールの交換

Amazon

ESP8266と土壌センサーの配線

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

KeeYees 土壌湿度センサー 静電容量式土壌水分センサー 湿度検出モジュール 水分検出 高精度 耐食性良い Arduino用 Raspberry Pi用 植木鉢 園芸 農業 栽培
KeeYees 土壌湿度センサー 静電容量式土壌水分センサー 湿度検出モジュール 水分検出 高精度 耐食性良い Arduino用 Raspberry Pi用 植木鉢 園芸 農業 栽培

AmazonRakuten
項目内容
電源電圧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レギュレーターが手元になかった。とりあえず今回は、土壌センサーの使い方を覚えただけで良しとするが、皆さんは電源に十分ご注意を。

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

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

KeeYees 土壌湿度センサー 静電容量式土壌水分センサー 湿度検出モジュール 水分検出 高精度 耐食性良い Arduino用 Raspberry Pi用 植木鉢 園芸 農業 栽培
KeeYees 土壌湿度センサー 静電容量式土壌水分センサー 湿度検出モジュール 水分検出 高精度 耐食性良い Arduino用 Raspberry Pi用 植木鉢 園芸 農業 栽培

AmazonRakuten
WayinTop 自動水やり装置 DIYキット 静電容量式土壌水分センサー + 小型ポンプ DC3V 5V + 1M ホース + リレーモジュール 1チャンネル ガーデニング 家庭園芸 盆栽 庭園 花植 木鉢 植木鉢
WayinTop 自動水やり装置 DIYキット 静電容量式土壌水分センサー + 小型ポンプ DC3V 5V + 1M ホース + リレーモジュール 1チャンネル ガーデニング 家庭園芸 盆栽 庭園 花植 木鉢 植木鉢

Amazon
KKmoon ウェザーステーションキット DHT11温度湿度 ウェザーステーション キット BMP180大気圧/ BH1750FVI光センサー 0.96インチ IDEIoTスターター用 ディスプレイモジュールの交換
KKmoon ウェザーステーションキット DHT11温度湿度 ウェザーステーション キット BMP180大気圧/ BH1750FVI光センサー 0.96インチ IDEIoTスターター用 ディスプレイモジュールの交換

Amazon

こんな商品も人気です!

1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面
1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面

バックライトがなく、電源を切っても最後のコンテンツが長時間表示される。 超低消費電力、基本的に電力はリフレッシュにのみ必要です。 SPIインターフェイス、Raspberry Pi / Arduino / Nucleoなどのコントローラーボードとの接続用。

AmazonRakuten
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用

Amazon
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換

NanoはArduinoと互換性があり、ATmega328PやCH340と同じの公式バージョンで使用しています。 これは、最小で、完全で、ブレッドボードに優しいボードです。より多くのアナログ入力ピンとオンボード+ 5V AREFジャンパを備えた(電気的に)すべてが備わっています。

Amazon
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付

無料チュートリアル(CDに収録)、より良い価格、より良いサービス。 (技術データ付き) 2.8インチ多彩なディスプレイ液晶画面 タッチペンも付き

AmazonRakuten

Arduinoの参考書

ESP32&Arduino 電子工作 プログラミング入門
ESP32&Arduino 電子工作 プログラミング入門

電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。「電子工作は好きだけどプログラミングはよくわからない」あるいは「プログラミングの経験がある。それを活かして電子工作を楽しみたい」--そんなみなさまのための電子工作プログラミング入門が本書です。

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

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

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

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

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/