【家庭菜園】土壌水分計(簡易土壌水分計)を自作してみた
家庭菜園の水やりをarduinoで自動化したけどどの位水やりしたらいいか判らないので、自作の土壌センサーで土壌水分計(簡易土壌水分計)を作りました。
簡単に作れるので家庭菜園だけでなく農業をされている方も使えるのでは?と思います。
電極式 土壌水分計(簡易土壌水分計)
電極式 土壌水分計は土壌湿度計とも呼ばれ、土壌に含まれる水分が電気を通しやすいという性質を利用して計測します。
自作する土壌水分計は電気伝導度で土壌水分を推測しようということで感覚的なものです。
これ、ビチャビチャだぁ~!という状態を100とします。
これって乾燥しすぎだろ!っていう状態を0とします。
ここで作成する土壌水分計はこのような感覚的なものを『見える化』したもので簡易土壌水分計になります。
この簡易 土壌水分計は土壌密度の影響を受けますのでその影響を最小限にするため。電極を石膏で固め密度を一定にするようですが、ここではそのような精度を追及していません。
大まかに、水分過多-水分適量-水分過少が判断できればいいのでは?というレベルです。
必要な材料
wifiを使えてarduino IDEも使えるESP32 DevKitC V4開発ボードを使って土壌水分計を作りました。
また、土壌水分センサーはデジタルセンサーモジュールを使いました。
格安ながら使える製品ですよ。
そのままでも使えますが、センサー部分は耐久性を考えてステンレス棒で自作します。
土壌水分(湿度)センサーを自作する。
土壌の水分を計測するので、常時土に埋まっています。
また、微弱電流を流すので腐食も早まります。
そこで、センサー部分の耐久性を考えてステンレス棒を使うことにしました。
適当なものはないかあれこれ思案したあげく、思いついたのがステンレス製のお箸です。
ダイソーで売っていた100均のお箸です (^^;
そしてお箸を何らかの形で固定するもの…
電気絶縁性に優れ、簡単に形成できるもの…
何か、適当なものはないものか思案していたら…
ありました!
エポキシ樹脂のパテです。
エポキシは電気絶縁性に優れ、電子機器の基盤の材料にもなっていますね。
これも、百均でした (^^;
ステンレスの加工
このステンレス製お箸は四角形ですが、微妙に丸みがついているので穴あけをしやすいようにペンチで少し押さえます。
次に、ステンレスのお箸にリード線を固定するために穴をあけることにします。
ドリルは3.2mmのチタンコーティングのドリルビットです。
1本100円もしないドリルですが、ステンレスなのに、切れ味抜群でした。
この穴にホームセンターで購入したM3 15mmのネジを通し、リード線を固定します。
穴あけが終わったところで、ステンレスお箸をエポキシ樹脂で固定します。
このエポキシパテは二層になっていて、よく練り合わせることで硬化が始まるようです。
説明書では1分程で硬化するということですが、5分ぐらいは大丈夫みたいでした。
1~2時間で完全に硬化するようですので、完全に固まる前にキャップを被せられるようにしておきます。
キャップは…
ホームセンターで購入した単管パイプ用のキャップです。
散水で水を被っても、雨に濡れても端子を保護し、安価でそこそこ耐久性もあり専業農家の方の実用にも耐えられるのでは?と思います。
esp32の配線
実用に耐えるセンサーが出来たところでesp32のピン配置です。Esp32は DevKitC V4を使っています。
VCC ⇒ 3,3V
GND ⇒ GND
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の値でした。
調べ方はカンタン!土壌センサーを机の上に置いただけ…….(^^;
ちなみにesp32ではアナログ出力は0~4096の範囲だそうです。
fromLowと同じ値を与えると、toLow、つまり値を0にしたいのでfromLowには4095を代入します。
map(dojyou_sensor_output, 4095, fromHigh, 0, 100)
値が100になるときのセンサー値も調べてみます。
調べ方はこれも簡単です。
土壌センサーを水に浸しただけ…
より、土壌に近いように塩を3粒ほど入れました。 (^_^;)
1秒おきに計測してみると…
値が一定ではありませんね。少しセンサーを動かしても値が変化します。そこで簡易キャリブレーションということでfrom Higthには1100という数値を代入します。
map(dojyou_sensor_output, 4095, 1100, 0, 100)
これでmap関数の引数を全部代入することが出来ました。
土壌水分計 arduino IDEスケッチ
arduino IDEでスケッチした土壌水分計のプログラムです。
[php]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);
}[/php]
これでビチャビチャだぁ~!の状態で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に変更しました。
土壌水分計 節電スケッチ
[wpdm_package id=’3303′]
[php]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);
}[/php]
これで土壌水分を計測するときだけ電流を流し、計測が終われば給電を停止するプログラムが出来ました。
ここではdelayを使っているので5秒後に繰り返しますが、時刻でプログラムを走らせれば実用に耐える土壌水分計として使えそうです。
また、計測値が例えば50%を下回れば散水の電磁弁に給電することで自動で散水開始出来ますね。
自作 土壌水分計のまとめ
ステンレスのお箸で自作した土壌水分計センサーですが、2019年11月に掘り返して洗ったところステンレスの部分は購入時と同じピカピカでした。
ステンレス棒を思いついたきっかけは庭に埋まっていたステンレスの釘が全く新品同様で驚いたのですが、カズが購入した記憶も使ったこともないので家を建築したときに大工さんが落としたのだろうと思います。
とすれば、もう何十年昔のことなのか…
ですから土壌水分計センサーの耐久性は問題ないと思います。
注意する点といえば、センサー部分をどの程度土壌に差し込むかということですが土壌に触れる長さで計測値が変化します。
ですからカズはセンサーの先端部分の6cm上から絶縁テープを巻きつけて土壌に触れないようにしています。
map関数の値を決める場合にはセンサー部分(絶縁テープを巻いていない部分)が全て水に浸った状態で計測してください。
実際の土壌水分計測値は5%前後の幅で変化しますが、これは市販品でもこの程度の計測誤差がありますので実用上は問題ないと思います。
専業農家さんの場合には計測地点を増やすことで潅水のムラを最小限に出来ますね。
いつ潅水するかということは長年の経験で、作る作物の状態で判断されているのだろうと思いますがこの簡易土壌水分計が経験の手助けになればいいですね。