🔋

農業IoTの準備として、TWELITEを使った環境情報の取得をやってみた-その3(電池持ちと死活監視)

2022/01/15に公開

今回は、電池持ちの確認と死活監視について検討しました。

📑本記事のシリーズ

📌現状のシステム

  • 子機 → 親機に環境データ(温度/湿度/気圧)を無線で定期的に送信

😕確認したいこと

子機は、電池で動作しています。電池が切れた場合、交換する必要があります。
今回は、以下を確認します。

  • 電池でどの程度持つのか?
  • 交換時期を通知できないのか?

💡やったこと

  • 電池持ちを確認
  • 死活監視について

電池持ちを確認

電池2本で、環境データを何回送信できるかを確認してみます。

事前検討

実験をやる上で、考えたことを記載します。

  • 充電池を使用したい
    • 毎回買っているとお金がかかるため
  • 電圧の変換回路を削除する(その1と異なる部分)
    • 省電力で動かすために、その1で使用した昇圧回路はなくしました
    • また、保護回路用のダイオードなども追加しないことにしました
  • 実機動作で電池持ちを確認する
    • 実機があるので実機で見ることにします
    • スリープ時の消費電力の影響は無視する(次に記載)

スリープ時の消費電力

スリープ時の消費電力は、下記のページに記載されています。

https://mono-wireless.com/jp/tech/Hardware_guide/QA_SLEEP_CURRENT.html

↑より抜粋

条件 消費電流 備考
ディープスリープ(I/Oによる割り込み起動) 0.1uA -
RAM非保持スリープ+ウェイクアップタイマー 1.2uA -
RAM保持スリープ+ウェイクアップタイマ 1.5uA 今回の計算対象

間欠動作のため、ディープスリープは使用しません。
後にRAM保持を使うかもしれないので、1.5uAの条件としました。
また、電池容量は1900mAh(eneloop基準)で計算します。

1900(mAh) / 1.5(uA) ≒ 1266666(h)
1266666(hour) ≒ 52777(日) ≒ 144.6(年)

すばらしい省電力モードです👏。

今回、数か月程度持てばいいかなと考えているので、スリープ時の電力は無視することにしました。

条件/確認箇所

  • 電池種別
    • eneloop 単3電池 x2
      • スタンダードモデル
      • 公称電圧 : 1.2V
      • 電池容量 min 1900mAh
    • 充電器で充電した状態から開始
    • 直列で接続
  • コードの変更
    • その1のコードに対し、以下を実施
      • デバッグ用のシリアル通信を削除
      • SHT30(使用しないセンサー)のコードを削除
      • スリープ時間を10秒に変更(結果を早く知るため)
  • ハードウェアの変更
    • 昇圧DCDCコンバータを削除
      • eneloop x2で2.4Vを担保できるため
      • TWELITEの入力電圧は、2.3~3.6Vで動作

上記グラフの"何回データが送信できる?"を確認します。

親機にて、送信データ数を確認します。

結果

親機で受信した子機の環境データから作成されたcsvファイルは以下のようになりました。
※一致部抜粋。

date devid temp hum pressure Vcc A1 備考
2022-01-06 19:06:01.437340 13 22.04 30.13 1006 2945 2467 最初のデータ
2022-01-06 19:06:11.499172 13 22.51 29.71 1006 2945 2467 -
2022-01-06 19:06:21.554070 13 22.81 29.66 1006 2945 2467 -
- - - - - - -
2022-01-12 03:00:49.357169 13 16.16 44.32 984 2221 2219 -
2022-01-12 03:00:59.247440 13 16.14 44.43 984 2221 2219 -
2022-01-12 03:01:09.303782 13 16.14 44.43 984 2221 2219 最後のデータ

約46000回という結果になりました。
実験した電池の電圧をテスターではっかったところ、2.2Vとなっていました。
起動電圧がたりないため、スリープから起動できなかったと思われます。

本結果から、仮に10分1回、[計測→送信]を行う場合、

46000 * 10(min) = 460000(min)
460000 / (60 * 24) ≒ 320(day)

3か月が目標だったので、十分な出来です。
実際は、どうなるかは不明ですが。。。

交換時期を通知(死活監視の検討)

子機は定期的に情報を送信します。
親機のアプリケーションにて、ある一定時間応答が来ない場合、
電池が切れたと判断し、交換のアラームを上げることができます。

ただし、事前にわかるのであれば、事前に通知してあげる方がいいシステムだと思います。

そこで、上記表のアナログ入力に着目します。

電圧計測について

子機のファームコードにて、

u16_volt_vcc = Analogue.read(PIN_ANALOGUE::VCC);
u16_volt_a1 =  Analogue.read(PIN_ANALOGUE::A1);

の部分があります。
現在、VCC/A1には電池+が接続されているため、
電池の電圧が取得されることになります。

TWELITEのADCの仕様は以下となります。

https://mono-wireless.com/jp/tech/Hardware_guide/QA_ADC.html

A1に着目すると、計測範囲が0-2.4Vとなります。
停止する直前で、A1の値が下がっていることが分かります。

  • 最初の電圧
    • 2467 => 2.467V
  • 終りの方の電圧
    • 2219 => 2.219V

親機のアプリケーション側で本値を監視すれば、停止する前に利用者へ通知可能ではないかと考えます。

さいごに

電池がどの程度持つかを知ることで、ハードウェアの見直しや
最終的なシステムをどのようにするかの判断材料になるかと思われます。

公式ページには、低電力動作にするためのアプローチについても記載されていますので、
もう少し試行錯誤しながら、プロトタイプを作ってみる予定です。

GitHubで編集を提案

Discussion