はじめに
RaspberryPi Pico Wを使って、観葉植物・家庭菜園などに使える土壌湿度センサを使う方法について解説します。言語は「MicroPython」を使用します。
~ この記事の内容 / Contents ~
環境
この記事で使用する環境は以下の通りです。
環境 | バージョンなど | 備考 |
開発用PCのOS | Windows11 | Windows10でもOKです |
言語 | MicroPython | |
開発環境 Thonny | 3.3.13 | |
ボード | RaspberryPi Pico W | ノーマルのPicoでも同じように使えます |
DiyStudio土壌湿度検出モジュール
特徴
静電容量式の安価な土壌湿度センサです。3.3V~5.5Vまでに対応しているので、Pico/PicoWの3.3Vにつないで使用できます。
土壌の水分(湿度)に応じて出力ポートからのアナログ電圧を出力されるので、Pico/PicoWのADC(アナログデジタル変換)ピンに接続して使用します。
センサ本体を土に差して使用しますが、屋外や水のかかる場所で使用する際は、大きめの収縮チューブなどで根本の回路部分を保護すると安心です。
UnBox
Amazonの以下のページから購入しました。化粧箱に梱包され、基板一つ一つが静電対策のパッケージに個別包装されています。5個入りで1000円の破格の値段ですがクオリティは高いです。
【参考】「LM393搭載」のセンサとの違い
以下の「LM393搭載」と書かれている土壌湿度センサは、今回解説するセンサとは異なり湿度が「高い/低い」の2パターンをI/Oで出力する仕様です。(判定値/閾値はボリュームで調整可能)
センサ側で湿度の情報を判定してくれるため、ノーマルのRaspberryPiなどのADC非搭載の機器で使う場合は便利なのですが、今回のように「中間」を設ける場合や、電圧値をロギングするなど、細かい変化を見たい場合は不向きです。
単純に「土壌が乾いたら知りたい・水を上げたい」といったシンプルな用途ならこちらで十分かもしれません。

「RaspberryPi Pico W』と「土壌湿度センサ」の接続
Pico Wの「3.3V(OUT)」「GND」「ADC0」に土壌湿度センサの配線を接続します。
ピン番号 | 内容 | 備考 |
38 | GND | グラウンド |
36 | 3V3(OUT) | 電源(3.3V) |
32 | ADC0 | 土壌湿度センサの出力電圧(AOUT)を取得します |
※ ノーマルのPicoでも、上記と同じ接続方法で使用できます。
直接ブレッドボードには挿せません
センサ付属の配線は細く、芯線も「より線」です。コネクタをカットしてブレッドボードに直接差すのは厳しいので、固いジャンプワイヤ等で中継した方が楽に使えます。
Pico W ピンアサイン(Pin-Out)
※ Pico W公式サイトより引用
Picoピンアサイン(Pin-Out)
※ Pico公式サイトより引用
使用する部品
今回の記事では以下の部品を使用しています。
Pico W 本体
Raspberry Pi Pico W本体です。技適対応品かどうか心配…という方は、以下のページで出品者を「共立エレショップAセレクト」(国内の有名ショップ)にして購入してください。
RaspberryPi Pico
Pico本体です。一時期は半導体不足の影響がありましたが、今は価格・納期とも安定しています。
USBケーブル Micro-B
本体にUSBケーブルが付属していないので、別途購入が必要です。PicoW側の形状は「Micro-B」、ひと昔前のスマホと同じタイプを使います。現在主流のTypeCではないので注意が必要です。

土壌湿度センサ
冒頭で紹介した、今回使用する土壌湿度センサーです。
ブレッドボード
国内サンハヤト製のブレッドボードです。少々堅めの指し心地ですが、海外製と違ってピン穴の番号がすべて印刷されており、品質も高いのでおすすめです。

プログラム概要
今回のプログラムの概要は以下の通りです。
- 土壌湿度の出力電圧を計測する。
- 出力電圧から土の状態を「カラカラ」「ふつう」「しっとり」で表示する
実行結果
後述するプログラムの実行結果は以下の通りです。センサから湿度を電圧値として取得して土の状態を判定します。

全体コード
全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。
湿度の判定の部分以外は、以前解説したアナログデジタル変換(ADC)と同じコードを使用しています。ADCについて詳しく知りたい方は、こちらのADCの使い方の記事もご覧ください。
import machine
import time
# ADCを行うピンの設定です。
# GP26(ADC0)を使用します
adc = machine.ADC(0)
# 16bitの数値1単位が、電圧何ボルトか?を設定します
# 3.3(V) ÷ 65535(16bit) = 0.00005035477[V]
unit = 0.00005035477
# 湿度状態の判定値(閾値)です。
thresh_dry = 1.23
thresh_normal = 1.1
# 電圧値を100回読み込みます
for i in range(100):
# ADCの値を読み込みます(16bitの生の数値)
voltRaw = adc.read_u16()
# 16bitの値から、電圧値に変換します
volt = voltRaw * unit
#
# 判定値に応じて、表示を切り替えます。
#
if volt >= thresh_dry:
print("土は「カラカラ」です。")
elif volt >= thresh_normal:
print("土は「ふつう」です。")
else:
print("土は「しっとり」です。")
# 電圧値を表示します(:.3fは少数点以下3桁を表示する設定です)
print( "電圧:" + "{:.3f}".format(volt))
# 見やすさの改行です
print("\n")
# 1秒待機します
time.sleep(1)
コードのポイント
アナログデジタル変換(ADC)の設定
ADC関数を使って、ADCとして使用するピンを設定します。ADC0のピンを使用するので括弧の中の引数に「0」を指定しています。
ピンを変更する場合は該当のADCの番号「0~2]を記載してください。
# ADCを行うピンの設定です。
# GP26(ADC0)を使用します
adc = machine.ADC(0)
ADCの値を読み込む
read_u16関数を使って、ADCで読み取った電圧値を取得します。上記関数では、ピンの電圧値(0~3.3V)を、16ビット(0~65535)の値で取得できます。
# ADCの値を読み込みます(16bitの生の数値)
voltRaw = adc.read_u16()
電圧値への変換
read_u16関数から取得した生値を、電圧値に変換します。
read_u16関数は、3.3Vを0~65535の範囲で表します。そのため関数からの1カウントは、3.3V ÷ 65535 = 0.00005035477[V] となります。
# 16bitの数値1単位が、電圧何ボルトか?を設定します
# 3.3(V) ÷ 65535(16bit) = 0.00005035477[V]
unit = 0.00005035477
取得した生値と、上記の1カウントあたりの電圧をかけることで、ADCで読み込んだ電圧値を計算することができます。
# 16bitの値から、電圧値に変換します
volt = voltRaw * unit
水分量の判定
取得した電圧に応じて、湿度の判定を行います。
実際に濡らした布を使ってセンサの電圧を計測したところ、以下のような値になったため
実測値を基に判定値(閾値)を決定しています。
センサの状態 | 電圧 | 判定 |
何も触れない | 1.23[V] | カラカラ |
水を絞った布にあてる | 1.10[V] | 普通 |
水につける | 1.00[V] | しっとり |
センサの個体差や、土の種類・状態によって判定値(閾値)は上記の値と異なる可能性があります。判定値はお使いの環境に合わせて調整してください。
コード上では、if文を並べる順番を工夫することで、以下のように判定させています。
1.2V以上
カラカラ
(1.2Vよりは少ないが) 1.0V 以上
普通
それ以外( 消去法で、1.0V よりも小さい)
しっとり
# 湿度状態の判定値(閾値)です。
thresh_dry = 1.23
thresh_normal = 1.1
# ~~~~~ 中略 ~~~~~
#
# 判定値に応じて、表示を切り替えます。
#
if volt >= thresh_dry:
print("土は「カラカラ」です。")
elif volt >= thresh_normal:
print("土は「ふつう」です。")
else:
print("土は「しっとり」です。")
まとめ
観葉植物・家庭菜園、農業などに簡易的に使える土壌湿度センサを、RaspberryPi Pico Wで使う方法について解説しました。参考になればうれしいです。
実際使ってみると、DIY向けとは言っても湿度(電圧)の再現性も高く、家庭や趣味で使うには充分なクオリティだと思います。本格的なものは数千円~数万円するので、趣味やちょっと使ってみたいだけ、という方にピッタリなセンサーです。
※ 以前、土壌湿度センサとポンプのセットを紹介していましたが、Picoでは使えない仕様であったため、リンクと紹介を削除しました。申し訳ありません。
お知らせ
MicroPythonのプログラミングガイドブックが遂に発売!
「MicroPython」の本が遂にでました。
この一冊で、MicroPythonの言語仕様から、プログラミングの仕方まで”ガッツリ”学べます!
内容は、普段別言語で開発している人や、これからマイコンを始める(工学系の)学生を対象としているので「初心者向け」ではありません。しかし、「自前のライブラリの作成」が目標なので、これ一冊で「ガッツリ」とMicroPythonを学ぶことができます。
全ての内容はここでは紹介しきれないので、詳細は以下のAmazonページをご覧ください。目次だけでも”ガッツリ”なのが確認できると思います。

Pico/Pico W関連のおすすめ本
RaspberryPi Pico / Pico W関連のおすすめ本を独断と偏見で3つ選んでみました。Picoやるならとりあえずこれ買っとけ的な本や、電子工作全般で使える本などを厳選しています。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。