じーろぐ

日々の記録。コンピュータやプログラミングの話題が多め。

TWELITEでリモート土壌水分センサーを作る

TWELITEと土壌水分センサーを使って、観葉植物の土が乾いてきたらスマートフォンに通知するシステムを作成中です。 インターネットで電子工作してる人のページ見ていると割とよく出てくる定番のやつ(TWELITE使ってる人はあんまりいなくて、Arduino使っている人が多い)。

目標はTWELITEの省電力性を生かして、できるだけコンパクト+電池で長期間(できれば1年以上)メンテナンスフリーでの動作を実現することです。

いずれは土が乾いてきたら自動で水やりとかもしたいのですが、今回はとりあえず通知までを目指します。

f:id:z_logger:20191014004613j:plain
リモート土壌水分センサーをテストしている時の様子

システム全体

土壌水分センサーのデータをTWELITEを使って定期的に送信し、MonoStickがついているRaspberry Piで集計します。これは、窓の施錠監視システムで使っているサーバーを共用しており、基本的には構成も同じです。

f:id:z_logger:20191018002426p:plain

回路図

以下はシステム全体の回路図とブレッドボードを使って仮組み中の写真。

f:id:z_logger:20191014011456j:plain
ブレッドボードを使って仮組み中のリモート土壌水分センサー

f:id:z_logger:20191018002429p:plain
TWELITEを使ったリモート土壌水分センサーの回路図

構成部品は以下のとおりです。

土壌水分センサー

DFRobot社のAnalog Soil Moisture Sensor (SEN0114)を使用。土壌の水分量の変化すると土の電気抵抗が変わるので、それを電圧変化として読み取ることができます。500円ぐらいで入手可能です。土に挿して抵抗値を測定する2本の電極+トランジスタ1個+抵抗2個だけで構成されるシンプルな部品ですが、結構奥(闇?)が深いです。詳しい仕組みは土壌水分センサーの仕組みを詳しく知る - じーろぐを参照。

f:id:z_logger:20191014010925j:plain
観葉植物の鉢に設置した土壌水分センサー

TWELITE

データ送信とセンサーデータのアナログ・デジタル変換(ADC)を担当。今回はTWELITE DIPを使いました。 プログラムはMONO WIRELESSのサイトで配布されている、無線タグアプリをインストール。このアプリは、データの受信ができない代わりにボタン電池で動作可能なほど消費電力が少なく、今回のようなセンサーデータを定期送信するのに便利です。また、設定値のOTAアップデートが可能なので、TWELITE Rでアプリを書き込んだあとの設定変更は無線通信で可能です。

現在の設定値は以下の通り。

f:id:z_logger:20191016022427p:plain
TWELITE子機の設定値

開発中なので、30秒おきにセンサーの値を送信しています。土の水分量はそんなに変化しないので、実際の運用ではもっと低頻度送信で良さそう。 センサー値安定待ちのためセンサー起動後、データ送信するまで250ms待つようにしています。

親機の方は、窓の施錠監視システムで使っているサーバーとMONO Stickを共用。 PALアプリをインストールした親機でもタグアプリのデータを受信できるので、シリアルポートからデータを受信するPythonスクリプトを改造して、どちらのデータもパースできるようにしています。

3.3V出力昇圧DCDCコンバーター (AE-XCL102D333CR-G)

土の水分量をちゃんと測定するには、大前提としてセンサへの供給電圧が一定である必要があります(そうじゃないと電池の電圧変化も拾ってしまう)。 今回は、秋月電子で300円で売られているDCDCコンバーター (AE-XCL102D333CR-G)を使い直流3.3V一定の電源を得ます。すごい小型でDC0.9V~3.3Vを入力するとDC3.3Vが出力されるスグレモノ。同じシリーズで5VDCに変換するものも秋月電子で売ってますが、TWELITEのADCのレンジが0~2.4Vのため、3.3Vのものを用いました。(5Vだとオーバーレンジになる)

また測定時以外にセンサーに電源供給すると電池の無駄遣いなだけでなく、センサー電極腐食の原因になるので、アイドル時は電源供給を止める必要があります。 このDCDCコンバータはENピンをGNDに落とすと電源供給が停止する仕様なので、TWELITE稼働中(測定中)にLoが出力される9番ピンの信号をトランジスタを介して入力します。

3.3V出力昇圧DCDCコンバーター: 組立キット 秋月電子通商-電子部品・ネット通販

電源と消費電力および電池寿命

電源は単3電池2本(直列)です。今回はエネループを使ったので1.2*2=2.4V、容量は1900mAhになります。 消費電力は、実測でアイドル時が29μA、測定時(センサーON、TWELITEはIDLE)で60mAでした。 TWELITEの製造元、MONO WIRELESSのページによると一回の送信にかかる時間は2.5msで送信中の平均消費電力は11.6mAらしいです。

消費電力がアイドル時30μA、起動中70mA、起動時間250msとします。

f:id:z_logger:20191018022452p:plain
30秒おきにデータ送信する場合の消費電力プロファイルの例

n秒おきにデータを送信する場合の電池寿命は(単三eneloopの場合)、

$$ \frac{ 1900 \mathrm{mAh} }{ (0.03(n-0.25)+70 \times 0.25) / n } $$

で計算できます。

データ送信間隔 電池寿命
30sec 120day
2min 1.2year
5min 2.5year
15min 4.3year
7.2year

5分間隔でデータ送信した場合でも2年以上の電池寿命が期待できそうです。

測定結果

実際の測定結果をグラフ化するとこんな感じ。

f:id:z_logger:20191028021155p:plain

上から、電場強度、バッテリー電圧で下2つがセンサーの電圧です。 徐々に電圧が下がっていって土が乾燥していることがわかるかと思います。 結構上下しながら下がっていくようですね。

関連記事

土壌水分センサーの仕組みについて詳しく知りたい人は、以下の記事を読んでください。

zlog.hateblo.jp

TWELITEを使った、窓の施錠確認システム

zlog.hateblo.jp