ラズベリーパイ3で土壌湿度センサーを試してみました
今日はこちらの記事を参考に土壌湿度センサーを試してみました。
今後はnodeで色々やりたかったので、本記事はドンピシャでした。
実験の目的
最終的には、葉物(特にコマツナ)を作るにあたっての最適な潅水タイミングを見極めたい、ので、とりあえずデータをとってみたい。
結果
結果からいうと記事の通りやったらこんなかんじで何の問題もなくデータがとれました*1。
基本、参照元の記事の手順まんまでいけるのですが、多少僕の環境との相違点とか、補足があるのでそこだけ書いておきます。
参照記事との相違点
- ラズベリーパイの
sudo raspi-config
コマンドからAdvanced Options
にてSPIの機能を有効化しました - 前回、nodebrewで最新のnodeを入れたので、"Node.js のインストール"は割愛しました
- "npm モジュールのインストール"の前にサンプル用ディレクトリを作成ました
- npm の引数
-S
は--saveと同意で、package.jsonのdependenciesに追加されるので、別途package.jsonを作っておく必要があります(作り方はこちらの記事に) - nodeコマンドがsudoで実行できなかったので、nodebrewがインストールした場所(
which node
で特定)からシンボリックリンクを貼って対応しました(参考)
参照記事の補足
ピン名対応表
記事中Fritzingで書かれた図面を見れば、配線はできますが、ADコンバータとラズパイ上のピンの対応関係が把握しずらかったのでここで少し補足します。
土壌湿度センサー | 結線 | MCP3208-CI/P | 結線 | ラズベリーパイ3 |
---|---|---|---|---|
青: 湿度出力(アナログ電圧出力: 0~4.2v(@5v)) |
- | Pin1: CH0 |
||
赤: 電源入力(DC3.3~5v) |
- | - | Pin2: 5v Power |
|
黒: GND |
- | Pin14: AGND*2 |
- | Pin6: Ground |
Pin16: ADO*3 |
- | Pin1: 3.3v Power |
||
Pin13: CLK |
- | Pin23: SPI0 SCLK |
||
Pin12: Dout |
- | Pin21: SPI0 MISO |
||
Pin11: Din |
- | Pin19: SPI0 MOSI |
||
Pin10: CS/SHDN |
- | Pin24: SPI0 CE0 |
※ 結線に"-"(ハイフン)が入っているものは結線します。MCP3208-CI/Pを飛ばして結線しているものもあります。
※ MCP3208-CI/PのPin10は、LOWにするとADCがONの状態になります。ADCを使わない場合はHIGHにしてて待機状態にする必要があります。
出力される数値の対応
土壌湿度センサーの開発元wikiページ)をみると、
0 ~300 : dry soil
300~700 : humid soil
700~950
とありました。これはArduinoに繋いだ場合の値で、見たところ上限が10bit(0~1023)ぽいです。今回のADCは12bit仕様なので、分解能は0~4095になります。これを直線的に変換するとすれば、
出力値 | 状態 |
---|---|
0~1292 | 乾いている |
1292~3017 | 湿っている |
3017~4095 | 湿りすぎ |
というふうになるかとおもいます。
通信方式について参考
今回使ったSPI通信、前回のI2C通信に関してはこちらが参考になるかと思います: I2CとSPI
感想
センサー自体が"プリント基板を切り出しました" みたいな作りだったことや、ウルトラ簡単な回路ということもあったりで実用性はどうなんだろう...というところです。色々他も調べてみたほうがいいかもしれません。
また、pFメーター(テンシオメーター)とはちがって、植物の根と土壌間の水分浸透圧を加味することはできないので、その辺の相関関係を調べないと、根が水分を吸収するのに最適な潅水時期を検出することはできないかなぁと思いました。その辺は、東大の難しめな資料が参考になるかもしれません。
あと、良く硝酸態チッソの量を推測するのに使われるEC(電気伝導率)とは仕組みとしてはどう違うのだろうと疑問に思いました。
ということで、かなり簡易的なデバイスですがデータは取るだけとってみて考えようと思います。