💧
ラズパイを使って、土壌湿度センサーからデータを取得するよ
💡やること
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 | 今回は使用しません |
💻環境
開発環境
- ラズベリーパイ
- 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です)
モジュールのインストール
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で取得できます。
土壌センサー(YL-69)
YL-69は、水分の状態によって抵抗が変わるセンサーです。
水分が多い環境下では抵抗が上がり、乾燥すると抵抗値が下がります。
今回のシステムでは、抵抗が上がると、MCP3002から取得される電圧が下がります。
センサー自体の精度は高いものではないので、利用環境に合わせて、閾値を見直す必要があります。
センサーの状態 | プログラムの出力値 |
---|---|
"土壌が湿っています。 - value:0.63" | |
"土壌が乾燥しています。 - value:0.98" |
さいごに
この記事も含め、ラズパイの活用方法を
としてまとめ中です。
Discussion