ラズパイを使って、土壌湿度センサーからデータを取得するよ

5 min read読了の目安(約4900字

💡やること

ADコンバータであるMCP3002を使って、土壌湿度センサー(YL-69)からデータを取得します。
水分によってセンサーの抵抗が変わり、電圧が変化します。
電圧(アナログの値)を取得することで土壌の湿度を知ることができます。

🏁デモ

🔧パーツ一覧

no 部品名 個数 備考
1 ラズベリーパイ 1 今回は4Bで確認
2 MCP3002 1 秋月電子 2ch ADコンバータ MCP3002-I/P
3 土壌湿度計湿度検出水センサー 1 Amazon - YL-69, HC-38
4 ジャンパー線 適量 -
5 ブレッドボード 1 -

接続図

ピンの接続

ラズパイPin MCP3002 センサーボード 備考
8(CE0) 1 ~CS - SPI通信 - チップセレクト
- 2 CH0 A0 アナログのインプット
- 3 CH1 - 今回は使用しないため接続不要
GND 4 Vss GND GNDへ接続
10(MOSI) 5 Din - SPI通信 - データ(Pi->MCP)
9(MISO) 6 Dout - SPI通信 - データ(MCP->Pi)
11(SCLK) 7 CLK - SPI通信 - クロック
3.2(SDA.1) 8 Vdd/Vref VCC MCPへの電圧+リファレンス電圧
- - D0 今回は使用しません

MCP3002の1つのピンに印がついています。
これが1番ピンとなります。

💻環境

開発環境

  • ラズベリーパイ
    • Linux rpi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
  • Python
    • Python 3.7.3 (default, Jan 22 2021, 20:04:44)

ラズベリーパイの設定

本デバイスは、SPI通信を使って制御します。
SPI通信を使用できるように設定する必要があります。
SPIの有効化は、以下のコマンドから実施できます。

$ sudo raspi-config
  • Interface Optionsを選択
  • SPIを選択
  • "はい"(or "Yes")を選択
  • これで有効化されます(1回行えばOKです)

モジュールのインストール

OSのクリーンインストールした前提で記載しています。

apt

pigpioライブラリは、Raspberry PiのGPIOを制御するためのライブラリです。
以下のコマンドは、はじめてインストールする場合のみ必要です。

$ sudo apt install pigpio
$ sudo service pigpiod start
$ sudo systemctl enable pigpiod.service

pip

Pythonに関するモジュールをインストールします。

$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install pigpio
(env) $ pip install gpiozero

📝手順

1秒ごとに、MCP3002からの出力値を取得し、乾燥しているかを判定します。

コード

yl69.py
from gpiozero import MCP3002
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep

DRY_THRESH = 0.75

def main():
    # 初期化
    Vref = 3.3
    factory = PiGPIOFactory()
    adc_ch0 = MCP3002(channel=0, max_voltage=Vref, pin_factory=factory)

    while True:
        # MCP3002からの出力値と電圧値を表示
        val = adc_ch0.value
        if val > DRY_THRESH:
            print(f'土壌が乾燥しています。 - value:{val:.2f}')
        else:
            print(f'土壌が湿っています。 - value:{val:.2f}')
        sleep(1)
    return

if __name__ == "__main__":
    main()

実行手順

(env) $ python yl69.py
土壌が乾燥しています。 - value:0.98
土壌が乾燥しています。 - value:0.98
土壌が湿っています。 - value:0.63
土壌が湿っています。 - value:0.58

🔎ポイント

ADコンバータ - MCP3002

ラズベリーパイには、ADコンバータが搭載されていません。
電圧などのアナログな値を計測するためには、外部デバイスを利用する必要があります。
MCP3002は、2CHのアナログ入力のある10bit SPI接続ADコンバータです。
モジュール(MCP3002)からは、0.0~1.0で取得できます。

MCP3002は2CHですが、同じシリーズに8CHのMCP3008などがあります。

土壌センサー(YL-69)

YL-69は、水分の状態によって抵抗が変わるセンサーです。
水分が多い環境下では抵抗が上がり、乾燥すると抵抗値が下がります。
今回のシステムでは、抵抗が上がると、MCP3002から取得される電圧が下がります。
センサー自体の精度は高いものではないので、利用環境に合わせて、閾値を見直す必要があります。

センサーの状態 プログラムの出力値
min "土壌が湿っています。 - value:0.63"
min "土壌が乾燥しています。 - value:0.98"

さいごに

この記事も含め、ラズパイの活用方法を

https://zenn.dev/kotaproj/books/raspberrypi-tips

としてまとめ中です。