Arduinoで土壌水分センサーを使う|配線・コード・腐食対策を徹底解説
土壌水分センサーは、植物の水やりタイミングを自動で判断したいときに便利な部品です。配線自体はシンプルです。しかし、放っておくとセンサーが壊れやすいという、少し特殊な弱点も持っています。本記事では、配線とコードの基本を解説します。あわせて、乾燥判定の方法や、センサーを長持ちさせるコツまで、初心者の方に向けて順を追って紹介します。
01土壌水分センサーとは|2つのタイプがある

抵抗式(安価だが腐食しやすい)
抵抗式は、土に挿す2本の金属端子が露出しているタイプです。土の湿り具合によって、2本の端子間の電気抵抗が変化する仕組みです。水分が多いほど電気が流れやすくなり、抵抗値が下がります。価格が安く、昔から広く使われてきました。ただし、大きな弱点があります。端子が土や水分に直接触れ続けると、電気分解(電気めっき反応)によって腐食が進んでしまうのです。
静電容量式(腐食しにくく安定)
静電容量式は、より新しいタイプのセンサーです。電気を直接土に流すのではありません。電極部分の静電容量(電気を蓄える能力)の変化を利用して、湿り具合を検知します。金属端子が露出していない構造のため、抵抗式のような腐食の心配がほとんどありません。価格は抵抗式よりやや高めですが、長期間安定して使いたい場合におすすめです。
観葉植物の水やり自動化に挑戦したいVさんは、最初に安価な抵抗式センサーを購入した。数ヶ月使い続けたところ、端子の表面が白っぽく変色し、値が徐々におかしくなっていった。調べてみると、これは腐食による典型的な症状だった。静電容量式に買い替えると、半年以上経っても安定した値が得られるようになった。用途に応じてセンサーを選ぶことが、長く使い続けるコツです。
02基礎知識|analogReadでの値の読み方

値の方向は製品によって異なる
土壌水分センサーは、analogRead()を使って値を読み取ります。0〜1023の範囲の数値が得られる点は、可変抵抗やCdSセルと同じです。ただし、注意点があります。多くの製品では、乾燥しているほど値が大きく、湿っているほど値が小さくなる傾向があります。しかし、これは絶対的なルールではありません。製品によっては、逆の関係になっているものもあります。
必ず実機で方向を確認する
この方向の違いは、実際に使う前に確認しておく必要があります。センサーを空気中に置いた状態と、コップの水に浸した状態、それぞれで値を記録してみましょう。どちらの方向に数値が動くかを把握してから、次の章以降のコードを書くことをおすすめします。
03配線方法:Arduinoと土壌水分センサー

基本の3本配線
多くの土壌水分センサーには、VCC・GND・AOUT(アナログ出力)という3本のピンがあります。VCCはArduinoの5Vまたは3.3Vに、GNDはGNDにつなぎます。AOUTは、アナログピンのA0につなぎます。抵抗式センサーの中には、しきい値で判定するDO(デジタル出力)ピンを持つものもあります。基板上のポテンショメータで、しきい値を調整できる仕組みです。
電源電圧の目安
多くの製品は3.3V〜5Vの範囲で動作します。センサーの説明書やパッケージに記載された対応電圧を確認しておきましょう。土に挿す部分(プローブ)は、示されている挿入ラインまで差し込みます。基板部分は、土や水に触れないようにしてください。
04基本のコード|土壌水分を読み取る
最小構成のコード
配線ができたら、値を読み取るコードを書いてみましょう。analogRead()にピン番号を渡すだけの、シンプルなコードです。
// 土壌水分センサーの値をシリアルモニタに表示するコード
const int sensorPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int value = analogRead(sensorPin);
Serial.println(value);
delay(1000);
}
実際に空気中と水中で試す
このコードを書き込んだら、シリアルモニタを開いてみましょう。センサーを空気中に置いたときの値と、コップの水に浸したときの値を、それぞれメモしておきます。この2つの数値が、次の章で使う判定の基準になります。
05乾燥判定のコード|しきい値の考え方
実測値をもとにしきい値を決める
4章で記録した空気中・水中の値を使って、乾燥判定のコードを作ってみましょう。ここでは、多くの製品でよく見られる「乾燥=値が大きい」という前提で例を示します。ご自身のセンサーの方向に合わせて、不等号の向きを調整してください。
// 実測値をもとに乾燥・湿潤を判定するコード
const int sensorPin = A0;
const int threshold = 600; // 実測した空気中・水中の値の中間あたりに設定する
void setup() {
Serial.begin(9600);
}
void loop() {
int value = analogRead(sensorPin);
if (value > threshold) {
Serial.print("乾燥しています(");
} else {
Serial.print("湿っています(");
}
Serial.print(value);
Serial.println(")");
delay(1000);
}
3段階に分けて判定する
しきい値を2つ用意すれば、「乾燥」「適度」「過湿」のように、3段階の判定も作れます。CdSセンサーの記事で紹介したしきい値の考え方と、基本的な発想は同じです。ぜひ参考にしてみてください。
06【最重要】腐食を抑える使い方

常時通電が腐食を早める
VCCに電源をつなぎっぱなしにしない
抵抗式センサーの端子には、常に微弱な電流が流れています。これが、湿った土の中で電気分解を引き起こす原因です。電源をつなぎっぱなしにするほど、腐食は早く進みます。Arduinoの公式フォーラムをはじめ、多くの実践報告でも、この対策が繰り返し紹介されています。
測定時だけ電源を入れる方法
もっとも効果的な対策は、シンプルです。センサーのVCCを、Arduinoの5Vピンではなく、デジタルピンにつなぎます。そして、値を読み取る直前だけHIGHにして電源を入れ、読み取り終えたらすぐにLOWに戻すのです。Arduinoのデジタルピンは、公式仕様で1本あたり最大40mAまで出力できます。多くのセンサーの消費電流(数mA〜15mA程度)であれば、十分にまかなえます。
// 測定時だけ電源を入れて腐食を抑えるコード
const int sensorPin = A0;
const int powerPin = 7; // センサーのVCCをこのピンにつなぐ
void setup() {
Serial.begin(9600);
pinMode(powerPin, OUTPUT);
digitalWrite(powerPin, LOW); // 普段は電源をOFFにしておく
}
void loop() {
digitalWrite(powerPin, HIGH); // 電源を入れる
delay(50); // センサーが安定するまで少し待つ
int value = analogRead(sensorPin);
digitalWrite(powerPin, LOW); // すぐに電源を切る
Serial.println(value);
delay(60000); // 土は急に乾かないので、1分に1回程度で十分
}
測定間隔も長めに取る
土の湿り気は、急激には変化しません。数秒おきに測定する必要は、ほとんどのケースでありません。測定間隔を数分から数十分に1回程度まで広げることも、通電時間を減らし、腐食対策として有効です。静電容量式センサーであれば、この対策はそれほど神経質にならなくても構いません。もともと腐食しにくい構造だからです。
07よくあるトラブルと対処法
症状別の対処早見表
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| 値がまったく変化しない | 配線ミス、またはピン番号の指定違い | VCC・GND・AOUTの配線とコード内のピン番号を再確認する(3章参照) |
| 値が徐々におかしくなってきた | 抵抗式センサーの腐食 | 測定時だけ電源を入れる方式に切り替える(6章参照) |
| 判定の結果が実際の湿り具合と逆になる | 値の方向(乾燥=大か小か)の思い込み | 実測して方向を確認し、不等号を調整する(2章参照) |
| 電源投入直後の値が不安定 | センサーが安定するまでの待ち時間不足 | 電源を入れてから読み取るまでに、数十ミリ秒の待機を入れる |
| 土の種類によって基準が合わない | 土質・挿入深さ・締まり具合の違い | 使用する土・場所ごとに個別にキャリブレーションする |
原因を素早く切り分けるコツ
Aさんは乾燥判定のコードを試したが、明らかに乾いている鉢植えで「湿っています」と表示され続けた。配線を確認しても間違いは見当たらなかった。そこで、センサーを空気中と水の中に交互に入れて、生の値を比較してみた。すると、想定と逆に「乾燥している方が値が小さい」製品だったことが分かった。不等号を逆にすると、正しく判定されるようになった。方向を決め打ちせず、必ず実測することが大切です。
08よくある質問
基本のQ&A
応用のQ&A
関連記事・参考資料
基礎を学べる記事
- YOFUKASI LAB「ArduinoでCdS光センサーを使う方法」2026年, https://yofukasi-lab-wp.com/2026/08/31/arduino-cds-light-sensor/
- YOFUKASI LAB「Arduinoで可変抵抗を読む|配線と値の取得」2026年, https://yofukasi-lab-wp.com/2026/08/29/arduino-potentiometer-analogread/
- YOFUKASI LAB「Arduinoに必要な工具・部品リスト」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-tools-parts/
応用・関連記事
- YOFUKASI LAB「Arduinoの外部電源|Vinと5Vの違い」2026年, https://yofukasi-lab-wp.com/2026/09/03/arduino-external-power-vin-5v/
- YOFUKASI LAB「ArduinoでSDカードにCSV保存する」2026年, https://yofukasi-lab-wp.com/2026/08/31/arduino-sd-card-csv-save/
- YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/
参考資料(外部・一次情報)
- Arduino Documentation「analogRead()」, https://docs.arduino.cc/language-reference/en/functions/analog-io/analogRead/
- Last Minute Engineers「Interfacing Capacitive Soil Moisture Sensor with Arduino」, https://lastminuteengineers.com/capacitive-soil-moisture-sensor-arduino/
※本記事は個人の学習・電子工作用途を対象にしています。実際の製品や医療機器へ組み込む場合は、電気安全・製品規格の専門家に別途ご相談ください。
コメント