スポンサーリンク

【家庭菜園_水やり】土壌水分計を自作してみた

スポンサーリンク

家庭菜園の水やりをarduinoで自動化したものの、どの位水をあげたらいいか判らないので、自作の土壌センサーで土壌水分計(土壌湿度計)を作りました。

簡単に作れるので家庭菜園だけでなく農業をされている方も使えるのでは?と思います。

スポンサーリンク

電極式 土壌水分計

電極式 土壌水分計は土壌湿度計とも呼ばれ、土壌に含まれる水分が電気を通しやすいという性質を利用して計測します。

自作する土壌水分計は電気伝導度で土壌水分を推測しようということで感覚的なものです。

これ、ビチャビチャだぁ~!という状態を100とします。

これって乾燥しすぎだろ!っていう状態を0とします。

ここで作成する土壌水分計はこのような感覚的なものを『見える化』したものです。

この電極式 土壌水分計は土壌密度の影響を受けますのでその影響を最小限にするため。電極を石膏で固めたりするようですがここではそのような精度を追及していません。

大まかに、水分過多-水分適量-水分過少が判断できればいいのでは?というレベルです。

スポンサーリンク

必要な材料

wifiを使えてarduino IDEも使えるESP32 DevKitC V4開発ボードを使って土壌水分計を作りました。

また、土壌水分センサーはデジタルセンサーモジュールを使いました。

格安ながら使える製品ですよ。

そのままでも使えますが、センサー部分は耐久性を考えてステンレス棒で自作します。

スポンサーリンク

土壌水分センサーを自作する。

土壌の水分を計測するので、常時土に埋まっています。

また、微弱電流を流すので腐食も早まります。

そこで、センサー部分の耐久性を考えてステンレス棒を使うことにしました。

適当なものはないかあれこれ思案したあげく、思いついたのがステンレス製のお箸です。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..適当なものはないかあれこれ思案したあげく、思いついたのがステンレス製のお箸です。..

ダイソーで売っていた100均のお箸です ♪

そしてお箸を何らかの形で固定するもの…

電気絶縁性に優れ、簡単に形成できるもの…

何か、適当なものはないものか思案していたら…

ありました!

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..何か、適当なものはないものか思案していたら…ありました!..

エポキシ樹脂のパテです。

エポキシは電気絶縁性に優れ、電子機器の基盤の材料にもなっていますね。

これも、百均でした (^^;

ステンレスの加工

このステンレス製お箸は四角形ですが、微妙に丸みがついているので穴あけをしやすいようにペンチで少し押さえます。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..このステンレス製お箸は四角形ですが、微妙に丸みがついているので穴あけをしやすいようにペンチで少し押さえます。..

次に、ステンレスのお箸にリード線を固定するために穴をあけることにします。

ドリルは3.2mmのチタンコーティングのドリルビットです。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ....

1本100円もしないドリルですが、ステンレスなのに、切れ味抜群でした。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..1本100円もしないドリルですが、ステンレスなのに、切れ味抜群でした。..

この穴にホームセンターで購入したM3 15mmのネジを通し、リード線を固定します。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..この穴にホームセンターで購入したM3 15mmのネジを通し、リード線を固定します。..

穴あけが終わったところで、ステンレスお箸をエポキシ樹脂で固定します。

このエポキシパテは二層になっていて、よく練り合わせることで硬化が始まるようです。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ....

説明書では1分程で硬化するということですが、5分ぐらいは大丈夫みたいでした。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..説明書では1分程で硬化するということですが、5分ぐらいは大丈夫みたいでした。..

1~2時間で完全に硬化するようですので、完全に固まる前にキャップを被せられるようにしておきます。

キャップは…

ホームセンターで購入した単管パイプ用のキャップです。

散水で水を被っても、雨に濡れても端子を保護し、安価でそこそこ耐久性もあり専業農家の方の実用にも耐えられるのでは?と思います。

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ....

スポンサーリンク

esp32の配線

実用に耐えるセンサーが出来たところでesp32のピン配置です。Esp32は DevKitC V4を使っています。

VCC ⇒ 3,3V

GND ⇒ GND

AO ⇒ GPIO 36番ピン

DO 使わない

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..AO   ⇒ GPIO 36番ピンDO  使わない..

analogRead()が使えるピンはADCが記載されているピンならどれでもいいらしい….ですよ。

スポンサーリンク

map関数

土壌センサーから出力された値を0~100%で表示させるためにmap関数を使います。

map関数とは……

数値をある範囲から別の範囲に変換します。fromLowと同じ値を与えると、toLowが返り、fromHighと同じ値ならtoHighとなります。その中間の値は、2つの範囲の大きさの比に基づいて計算されます。

map関数の引数は

map(value, fromLow, fromHigh, toLow, toHigh)

となっているので、valueにはセンサー計測値を与えます。計測値の出力はdojyou_sensor_output としました。

map(dojyou_sensor_output, fromLow, fromHigh, toLow, toHigh)

土壌センサーから出力された値を0~100%で表示させたいのでto Lowは0に,toHighを100にします。

map(dojyou_sensor_output, fromLow, fromHigh, 0, 100)

土壌センサーの最大と最小値

まず、土壌がカラカラの乾燥状態での値を調べると4095の値でした。

調べ方はカンタン!土壌センサーを机の上に置いただけ…….(^^;

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..まず、土壌がカラカラの乾燥状態での値を調べると4095の値でした。調べ方はカンタン!土壌センサーを机の上に置いただけ…….(^^;..

ちなみにesp32ではアナログ出力は0~4096の範囲だそうです。

fromLowと同じ値を与えると、toLow、つまり値を0にしたいのでfromLowには4095を代入します。

map(dojyou_sensor_output, 4095, fromHigh, 0, 100)

値が100になるときのセンサー値も調べてみます。

調べ方はこれも簡単です。

土壌センサーを水に浸しただけ…

より、土壌に近いように塩を3粒ほど入れました。 (^_^;)

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..土壌センサーを水に浸しただけ…より、土壌に近いように塩を3粒ほど入れました。 (^_^;)..

1秒おきに計測してみると…

『 【家庭菜園】自作・土壌水分計で水やりを管理する 』 ..1秒おきに計測してみると…..

値が一定ではありませんね。少しセンサーを動かしても値が変化します。そこで簡易キャリブレーションということでfrom Higthには1100という数値を代入します。

map(dojyou_sensor_output, 4095, 1100, 0, 100)

これでmap関数の引数を全部代入することが出来ました。

スポンサーリンク

土壌水分計 arduino IDEスケッチ

arduino IDEでスケッチした土壌水分計のプログラムです。

int dojyou_sensor_pin = 36;
int dojyou_sensor_output ;
void setup() {
  
   Serial.begin(115200);
   Serial.println("Reading From the Dojyou_Sensor ...");
   delay(2000);
   }
void loop() {
   dojyou_sensor_output= analogRead(dojyou_sensor_pin);
   dojyou_sensor_output = map(dojyou_sensor_output,4095,1100,0,100);
   Serial.print("dojyou_sensor_output : ");
   Serial.print(dojyou_sensor_output);
   Serial.println("%");
   delay(5000);
}

これでビチャビチャだぁ~!の状態で100%を、ちょっとカラカラじゃない?の状態では0%前後の数値を示すと思います。

ただ、この配線では常時センサーに通電した状態ですので電極表面に気泡がついてきます。

そこで、土壌湿度を計測するときだけ通電したいと思います。

スポンサーリンク

アナログ出力 DAC

esp32にはピンから直接アナログ出力が出来るようになっているとのこと…

ESP32 DevKitC V4開発ボードではGPIO25、GPIO 26 ピンが使えます。

dacWrite(pin, value)関数でpinにGPIO 25又は26を、valueは0~255の範囲で指定します。

実際に動かしてみると、4095の値を得ることは出来ませんでした。

4095は電圧では3.3VだそうですのでDACでは3V前後のようです。25ピンと26ピンで動かしたところ25ピンの方がほぼ安定しているので、GPIO 25番ピンを使うことにします。

ということで、デジタルセンサーユニット側のVCCはesp32の25番ピンからの給電です。(ピン配置図の左上から9番目です)

VCC ⇒ GPIO 25番ピン

GND ⇒ GND

AO ⇒ GPIO 36番ピン

DO 使わない

また、乾燥状態の計測値では4095の値が出ませんでしたので4050に変更しました。

スポンサーリンク

土壌水分計 節電スケッチ

int dojyou_sensor_pin = 32;
int dojyou_sensor_output ;
void setup() {
  
   Serial.begin(115200);
   Serial.println("Reading From the Dojyou_Sensor ...");
   delay(1000);
   }
void loop() {
    dacWrite( 25, 255); //給電 
    delay(3000);
    dojyou_sensor_output = analogRead(dojyou_sensor_pin); 
     
    Serial.println(dojyou_sensor_output);      
   
    dojyou_sensor_output = map(dojyou_sensor_output,4050,2200,0,100);
    dacWrite( 25, 0); //給電停止
    Serial.print("dojyou_sensor_output : ");
    Serial.print(dojyou_sensor_output);
    Serial.println("%");
    delay(5000);
}

これで土壌水分を計測するときだけ電流を流し、計測が終われば給電を停止するプログラムが出来ました。

ここではdelayを使っているので5秒後に繰り返しますが、時刻でプログラムを走らせれば土壌水分計として使えるのでは?と思います。

また、計測値が例えば50%を下回れば散水の電磁弁に給電することで自動で散水開始出来ますね。