PR

トワイライト(TWELITE)とSeeeduino XIAOで土壌の状態の履歴を保存

組み込みエンジニア
本記事はプロモーションが含まれています。

こんにちは、ENGかぴです。

ZigBeeモジュールであるトワイライト(TWELITE)と土壌センサーを組み合わせた子機とトワイライトとSeeeduino XIAOを組み合わせた親機で無線通信を行います。親機は受信したデータを表示しSDカードに動作履歴として保存します。

下記記事のMONOSTICKをSeeeduino XIAOとトワイライトで構成して履歴をSDカードに保存して動作確認を行います。

トワイライト(TWELITE)で土壌の状態を取得する

土壌センサーはSEN0114(DFROBOT製:秋月電子で購入)を使用しています。Seeeduino XIAO用拡張ボードを使用しています。

トワイライトを太陽光パネルで動作させたことやMWSTAGEの環境でソフト開発して無線通信したことなどについてまとめています。

トワイライト(TWELITE)のソフト開発と無線通信でできること

土壌センサーの情報を取得する

SEN0114は土壌の抵抗分で発生する電圧を出力するセンサーです。水分量が多いほど土壌の抵抗分が少なくなり電気を通しやすくなることを利用したものです。下記リンクにセンサーの情報とスケッチ例が説明されています。

SEN0114 Moisture Sensor-DFROBOT

Arduino環境で使用できるように出力調整されており土壌の状態の目安が記載されています。下記記事で参考値として使用したin water時の値の値750を使用します。

トワイライト(TWELITE)で土壌の状態を取得する

以下ではDC5VやDC3.3VをDCなしで記載します。

広告

トワイライト親機の構成

親機の構成
親機の構成

トワイライトとSeeeduino XIAOを組み合わせたモジュールを親機とします。親機は子機から受信したSEN0114の値と子機からの電界強度を表示してSDカードに保存します。

トワイライトのDIO13(内蔵プルアップのDI)の信号レベルで親機と子機の切り替えます。親機で使用する場合は未接続で使用できるようにしています。

トワイライトの電界強度はバイナリデータを換算して表示します。メーカのHPに換算に関する説明があります。

モノワイヤレス社HP-LQI値から電界強度[dBm]の推定

//電界強度の換算例
double d_lqi;
d_lqi = ((double)7*lqi-1970)/20; //LQI

電界強度を確認しながら配置することで設置場所の目安にすることができます。

親機は子機から受信できない場合もあるため一定の間隔以上で時間経過のカウントを更新してカウント値のみをSDカードに保存するようにして未受信であることが分かるようにしています。

トワイライト子機の構成

子機の構成
子機の構成

トワイライトとSEN0114を組み合わせたモジュールを子機とします。電源は太陽光パネルを利用したTWE-EH-Sを使用します。スリープによる間欠動作させた場合条件によっては電池無しでも動作させることができます。

トワイライトのDIO13をGNDに接続することで子機として動作します。子機は10分毎にSEN0114から取得した土壌の様子を親機に無線通信します。

電源はTWE-EH-Sを使用しているため消費電流を減少させる必要があるため子機はスリープを使用して間欠動作させます。トワイライトがスリープしている間はSEN0114の電源をOFFして消費電流を減少させます。

SEN0114の消費電流は35mA(@5V)となっているためトワイライトのDOに直接シンク電流として取り込むのは望ましくありません。トランジスタをスイッチングで使用してトワイライトに電流が流れ込まないようにします。

TWE-EH-SのBOOTはトワイライトの5ピンのDOによって制御します。BOOTをLOWにするとリセットがかからなくなるためトワイライトへの電源供給が続きます。BYPは8ピンのDOをLOWにすると余剰電力のコンデンサC2をバイパスします。(動作の説明の詳細はトワイライト(TWELITE)の自作アプリとソーラーモジュールで無線通信を参照)

C1は無線タグアプリの場合は220uFで十分ですが自作アプリで処理を追加している分消費電流が増えてしまい電圧降下が大きくなり起動が安定しないことがあるため1000uFを追加し初期起動時の電圧降下の対策を行っています。

C2は余剰電力をチャージできるため容量の大きな電気二重層コンデンサなどを実装すると効果的です。2.2Fの電気二重層コンデンサでも曇り空でわずかに日が差す程度の環境下において1時間程度でフル充電できます。

BYPを初期起動時にLOWにするとC2が十分にチャージできていない場合C1にチャージした電荷がC2側に電荷が移ってしまうため電圧低下によりTWELITEのBOOTの制御が維持できなくなりTWE-EH-Sがリセット状態となります。

初期化時にはBYPを使用せず一定電圧以上になったことを確認してバイパスと効果的です。

広告
マイベスト3年連続1位を獲得した実績を持つ実践型のプログラミングスクール

スリープとSEN0114の測定のタイミング

SEN0114の測定はスリープと測定の手順はスリープとショートスリープを使い分けながら手順1~手順3の手順に沿って行います。

スリープと測定の手順
  • 手順1
    スリープからのウェークアップ

    スリープからウェークアップしたタイミングでSEN0114の電源をONしてnapする。

  • 手順2
    SEN0114の測定結果を取得する

    napからウェークアップしてSEN0114の出力電圧をAD変換値を取得する。

  • 手順3
    無線通信とスリープ

    AD変換値を無線通信する。SEN0114の電源をOFFしてからスリープする。

手順1はトワイライトの9ピンをHIGHにしてSEN0114の電源をONしてnapします。napはSEN0114の電源をONしてから測定値が安定するまでの時間として100msを確保する目的とトワイライトの消費電流を減少させる目的で使用しています。

napが短すぎると消費電流の減少の効果が低くなります。またnapが長いとSEN0114が消費する電流が増えてしまいます。

手順2はSEN0114の出力電圧をAD変換します。

if(Analogue.available()){
 vc2 = Analogue.read(PIN_AD1);
  vc2 = vc2 * 2; //TWE-EH-SのVC2は1/2なので2倍
  sen0114Data = Analogue.read(PIN_AD2); //電圧変換した値
  sen0114Data_raw = Analogue.read_raw(PIN_AD2); //デジット値
}

トワイライトのAnalogueライブラリでread()関数を使用すると電圧変換された値が取得でき、read_raw()関数を使用すると電圧変換前のデジット値が取得できます。

手順3は手順2で取得したTWE-EH-Sの電圧値とSEN0114の計測値を無線通信します。トワイライトの9ピンをLOWにしてSEN0114の電源をOFFしたあとスリープします。

スポンサーリンク

動作確認

袋に包んだトワイライト一式

子機はトワイライト(TWELITE)で土壌の状態を取得するで確認したものと同様に屋外に配置して太陽光パネルに日光が当たるように子機を配置します。挿し木している植物に水を与えてSEN0114を挿入します。屋外に設置するためSEN0114を除いたモジュール一式をビニール袋に包んで設置します。

直射日光が当たる環境であったため10分もしないうちに動作開始しました。C2についても30分程度でフル充電になりました。

動作確認の方法

昼の12:00に子機を屋外に設置して放置します。TWE-EH-Sによって電源が確立すると子機が動作開始するので親機のSeeeduino XIAO拡張ボードのOLEDに表示した土壌の様子を確認します。動作確認は以下の条件で行いました。

  1. 自作アプリを利用し間欠動作の時限を600秒
  2. 動作確認前に植物に水を与えて土壌を湿らせる。
  3. 太陽光パネルを空に向けて設置する
  4. 翌日の8:00以降に動作確認を終了

動作確認を行った日の天気は翌日まで晴天であり太陽光が十分に得られる環境でした。昼間に充電した電源で翌日まで計測できるかを確認しました。

動作確認の結果

動作確認の結果 左:OLEDに表示した子機のデータ 右:SDカードに保存した履歴データ
動作確認の結果 左:OLEDに表示した子機のデータ 右:SDカードに保存した履歴データ

子機から無線通信を受けると土壌の様子と電界強度が表示されました。子機から10分毎に無線データを受信すると表示が切り替わることを確認しました。

動作確認を終了してSDカードに保存したデータ確認しました。子機から受信したデータの履歴が確認できました。このデータをCSVファイルに変換してグラフ表示した結果は以下の通りとなります。

SDカードに保存した履歴データ

昼の12:00に屋外の日当たりが良い場所に設置したため10分もしないうちに余剰電力分のコンデンサを含めてフル充電になりました。

青線はTWE-EH-Sが供給しているトワイライトの電源電圧です。橙線はSEN0114から取得したデジット値です。太陽光パネルから十分に電力が得られる環境であったためトワイライトの電源が3.3Vを超えて安定しています。

TWE_VCCとHumid値はAD変換の基準電圧がTWE_VCCを基準にしているため連動した波形になっています。電源が3.3Vを超えているため、SEN0114の電圧が高くなったため調整値である750を超えて830近くの値になっています。

陽が沈み太陽光パネルが発電できない状態でも日中で充電した電気二重層コンデンサがバックアップ電源になっているため夜間でも子機は動作を継続しています。トワイライトの動作電圧の下限である2.0Vを下回る前に翌日の日光によっ電源が供給できたため子機が停止せずに動作継続することができています。

土壌の様子は頻繁に変わらないため子機の間欠動作を1時間程度にして消費電流を落とすことで夜間においても余裕を持った動作ができそうです。

スポンサーリンク

ソースコード全体

ソースコードは記事作成時点において動作確認できていますが、使用しているライブラリの更新により動作が保証できなくなる可能性があります。また、ソースコードを使用したことによって生じた不利益などの一切の責任を負いかねます。参考資料としてお使いください。

リンクからZIPファイル形式のファイルをダウンロードし、任意の場所に展開していただくとテキストファイルが生成されます。

ソースコードをダウンロード

TWELITEのソースコードはMWSTAGEの環境でアクトのソースファイルにコピーすると使用できます。

関連リンク

Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。

Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方

Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方

ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

PR:スキマ時間を有効に!スマホで学べる人気のオンライン資格講座【スタディング】まずは気になる講座を無料で体験しよう!

最後まで、読んでいただきありがとうございました。

タイトルとURLをコピーしました