家庭菜園などで土が乾きそうなのを知らせてくれて、水やりタイミングが分かったら便利ですよね。
今回、土壌湿度センサYL-69を購入して、土壌の水分量を検知するシステムを製作したので作り方を解説しちゃいます。
こんな人におすすめ!
- 家庭菜園にRaspberry Piを活用したい人
- 土壌湿度センサの使い方を知りたい人
準備したもの
- Raspberry Pi 3 Model B
- 土壌湿度センサ YL-69
- A/Dコンバータ MCP3208
- ブレッドボード
- ジャンパワイヤ
土壌湿度センサ YL-69
今回使用した土壌湿度センサ YL-69はプローブと電子基板で構成されています。


一般的に土壌の水分量が多いと抵抗値が下がります。この原理を利用して土壌水分量を検出する仕組みです。
電子基板には4本の端子があり、端子の説明は以下の通りです。
VCC | 3.3~5Vを供給 |
GND | グランド |
D0 | デジタル出力: 水分量が多いと1を出力。ポテンショメータを回すことで閾値を変化出来る。 |
A0 | アナログ出力: 水分量が多いほど値は小さくなる。 |
回路図
YL-69のアナログ出力(A0)とMCP3208のアナログ入力を接続します。そして、MCP3208とRaspberry PiをSPI接続する回路構成です。
YL-69への通電を制御出来るようVCC端子はRaspberry PiのGPIO端子と接続しています。

Raspberry Pi | MCP3208 | YL-69 |
1: 3.3V | 15: VREF 16: VDD | ー |
6: GND | 14: AGND | GND |
11: GPIO17 | ー | VCC |
19: SPI0 MOSI | 11: DIN | ー |
21: SPI0 MOSO | 12: DOUT | ー |
23: SPI0 SCLK | 13: CLK | ー |
24: SPI0 CE0 | 10: CS/SHDN | ー |
ー | 1: CH0 | A0 |
サンプルプログラム
YL-69のアナログ出力値を計測するサンプルプログラムです。
import spidev
import RPi.GPIO as GPIO
from time import sleep
Vref = 3.3
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.HIGH)
spi = spidev.SpiDev()
spi.open(0,0) #port 0,cs 0
spi.max_speed_hz = 1000000 # 1MHz
try:
while True:
adc = spi.xfer2([0x06,0x00,0x00])
data = ((adc[1] & 0x0f) << 8) | adc[2]
print (str(Vref*data/4096) + "V")
sleep(1)
except KeyboardInterrupt:
pass
spi.close()
GPIO.cleanup()
Raspberry PiとMCP3208はSPI通信します。自力でSPI通信プログラムを作るのは大変なので、spidevライブラリを使用しています。
MCP3208の使い方は別記事で紹介していますので、ここでは割愛させて頂きます。

YL-69は通電し続けると電極が錆びてしまいますので、プログラムが動作していないときはYL-69への通電を停止するよう、最後にGPIO.cleanup()を記述しています。
水分量を検出可能かテスト
まずは台上で水分量を検出可能かテストです。
水に付けていない状態では3.2Vを示しました。
全て水に付けると1.3V。半分ぐらい水に付けると1.6Vでした。
うまく水分量を検出出来てそうです。
土壌湿度を計測してみよう
台上テストが完了したので、実際の土でテストです。

まだ機器や配線がむき出しなので、屋外での使用は難しいです。
実際に運用していくには、防水対策が必要ですね。
まとめ
土壌湿度センサYL-69で土壌の水分量を検知するシステムを製作したので作り方を解説しました。
まだRaspberry Piにアクセスしなければ土が乾いているか確認出来ないので、水やりタイミングを自動で知らせてくれるにはシステムの改良が必要です。
また、実際の運用には防水対策が必須です。
今後システム改良したら紹介したいと思います。
以上、最後までお読み頂きありがとうございました。