【Raspberry Pi】土壌湿度センサを使って植物の水やりタイミングを知ろう

Raspberry Pi

家庭菜園などで土が乾きそうなのを知らせてくれて、水やりタイミングが分かったら便利ですよね。

今回、土壌湿度センサYL-69を購入して、土壌の水分量を検知するシステムを製作したので作り方を解説しちゃいます。

こんな人におすすめ!

  • 家庭菜園にRaspberry Piを活用したい人
  • 土壌湿度センサの使い方を知りたい人

準備したもの

  • Raspberry Pi 3 Model B
  • 土壌湿度センサ YL-69
  • A/Dコンバータ MCP3208
  • ブレッドボード
  • ジャンパワイヤ

土壌湿度センサ YL-69

今回使用した土壌湿度センサ YL-69はプローブと電子基板で構成されています。

一般的に土壌の水分量が多いと抵抗値が下がります。この原理を利用して土壌水分量を検出する仕組みです。

電子基板には4本の端子があり、端子の説明は以下の通りです。

VCC3.3~5Vを供給
GNDグランド
D0デジタル出力: 水分量が多いと1を出力。ポテンショメータを回すことで閾値を変化出来る。
A0アナログ出力: 水分量が多いほど値は小さくなる。

回路図

YL-69のアナログ出力(A0)とMCP3208のアナログ入力を接続します。そして、MCP3208とRaspberry PiをSPI接続する回路構成です。

YL-69への通電を制御出来るようVCC端子はRaspberry PiのGPIO端子と接続しています。

Raspberry PiMCP3208YL-69
1: 3.3V15: VREF
16: VDD
6: GND14: AGNDGND
11: GPIO17VCC
19: SPI0 MOSI11: DIN
21: SPI0 MOSO12: DOUT
23: SPI0 SCLK13: CLK
24: SPI0 CE010: CS/SHDN
1: CH0A0

サンプルプログラム

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にアクセスしなければ土が乾いているか確認出来ないので、水やりタイミングを自動で知らせてくれるにはシステムの改良が必要です。

また、実際の運用には防水対策が必須です。

今後システム改良したら紹介したいと思います。

以上、最後までお読み頂きありがとうございました。