カテゴリー
ESP8266+ESP32+RISC-V

実際に1年間動作を実証した乾電池駆動のESP32搭載IoT対応センサ

単3型アルカリ乾電池で動作する2台のIoT対応センサ。どちらも 約1年間 動作することを実際に確認しました。
使用したWi-Fi搭載ESP32マイコンは、Deep Sleepからの復帰時に多くの電流を必要とするので、乾電池を使い切る前に停止してしまうことがあります。
そこで、実験機Aでは専用IC(TI製)を使用、実験機Bでは電池を使い切らないことを前提に電源ICなしの電池直結で動かしてみました(上図左=実験機A、右=実験機B)。

実証実験結果

下記の2台の実験機を作成し、実際に動作させてみたところ、実験機Aは375日間、実験機Bは325日間、動作しました。

実験機A:TI製 DC-DCコンバータ TPS61020
  単3アルカリ乾電池 3本
  送信間隔 約31分
  375日動作(2019/11/24~2020/12/03)

実験機B:IoT Sensor Core 実験用
  単3アルカリ乾電池 2本
  送信間隔 約60分
  325日動作(2020/01/13~2020/12/03)

IoT用クラウド・サービスAmbient

実証実験データの蓄積には、アンビエントデータ社が運営するクラウド・サービスAmbientを使用しました。Ambientには、1年分のセンサ値データを蓄積することが出来ます。

Ambient – IoTデーター可視化サービス (ambidata.io)

下図は実証を終えたときの様子です。

ESP32使用 IoTセンサ 乾電池駆動 -Ambient (ambidata.io)


以下、実験機A、実験機Bそれぞれについて解説し、また、ESP32用ソフトウェアや、データのダウンロード方法などを紹介します。

実験機A 降圧DCDCコンバータ

実験機A(下図)では、TI製 DC-DCコンバータ TPS61020を用い、単3アルカリ乾電池3本で駆動させました。
電池電圧の測定用に、可変抵抗器で電池電圧を分圧し、ESP32マイコンのA/Dコンバータに入力しました。さらに、DC-DCコンバータの入力側に1000μFのコンデンサを追加し(写真の右の方の斜めに刺さっている部品)、電池の終止(寿命)付近での電圧降下を低減させました。

実験機Aでは、TI製 DC-DCコンバータ TPS61020を用い、単3アルカリ乾電池3本で駆動させた
単3アルカリ乾電池 3本で、375日(2019/11/24~2020/12/03)動作した。横軸は時間、縦軸は電圧。ノイズは電池電圧を分圧する抵抗値が高いことが原因と思われる

実験機Aの詳細(TI製TPS61020電源IC)

TI製 TPS61020は、0.9V~5.5Vの入力電圧に対して3.3Vなどの一定の電圧を出力するDC-DCコンバータです。入力電圧が出力電圧よりも高い時はLDO(低ドロップアウト・レギュレータ)として動作し、低い時はDC-DCコンバータとして動作します。
つまり、動作の大半はLDOで動作し、DC-DCコンバータ部が動作するのは電池の終止(寿命)付近のみとなります。

このような電源ICを使うことに対し、「無駄な使い方だ」と思った方は勘の鋭い人です。動作時の電力効率は、LDOよりもDC-DCコンバータの方が優れているからです。ところが、反対に「最適な使い方だ」と気づいた人も推理力の優れた人です。ボクは、後者に気づくのに2年、かかりました(少し、誇張しています)。

乾電池で間欠動作を行うための電源回路の要件は、(1)起動時や動作時に安定した電圧で電源を供給できることと、(2)「待機時」の消費電力を抑えることです。動作時の電力効率が悪かったとしても待機時の消費電力が減らせるのであれば、長寿命化できる場合があります。例えば、一般的なDC-DCコンバータの場合、待機中も電力を消費します。このため、送信頻度が少ない場合は、効率が悪くても待機時の消費電力が小さいLDOで動かした方が、待機時を含めた平均消費電流を抑えることが出来ます。
一方、LDOだけだと電池を使い切ることが出来ません。はい。この場合、DC-DCコンバータは、電池を使い切るまで動かす役割を担うのです。
※バッテリ駆動機器の待機時消費電力を低減するための一般的な考え方として記しています。TI製 TPS61020のようにDC-DC動作時であっても消費電流が25μAと小さい場合は、あまり変わらない場合もあります。

この原理に気づく前に行った(2年前の)実験については下記のブログで紹介しています。

実験機B 電池直結の実験用回路

下図の実験機Bでは、ESP32マイコンに単3型アルカリ乾電池2本を直結して動作させました。直列2本の電圧3VをESP32マイコンの電源に、直接接続することで、電源回路が不要になります。電池電圧の測定は、ESP32マイコンのGPIO34のA/Dコンバータに抵抗(470Ω)を経由して入力しました。

実験機BではESP32マイコンに単3型アルカリ乾電池2本を直結して動作させた
単3アルカリ乾電池 2本で325日(2020/01/13~2020/12/03)動作した。縦軸は電池電圧だがA/Dコンバータの特性上3V以上の電圧は適切に測れない

実験機Bの詳細(電池の直結)

この実験機Bでは、乾電池を使い切ることは出来ません。実験機Aとは対照的に思われるかもしれませんが、解決したかった課題は似ています。

電源回路や大容量コンデンサを無くすことで、電源回路の消費電力や、大容量コンデンサの漏れ電流が無くなり、Deep Sleep中の待機時消費電流を減らすことが出来、さらに部品コストも下がります。実際、待機時の消費電力が多い電源ICを使った場合や、一般的に市販されている開発ボードに比べると、より長期間動作を行うことが出来るようになるでしょう。

ただし、電源を保護する回路も入っていないので実験専用です。回路がショートした時や、マイコンが故障した時などに機器が発熱や発火する恐れがあります。下記のブログでは、こういった注意点も含めて紹介しているので、よく読んでから実験してください。

ソフトウェア

ソフトウェアには、ボクが公開しているIoT Sensor Core が使用できます。IoT Sensor Coreを使えば、自分でプログラムを作成することなく、設定をスマートフォンから行うことで、Ambientへの送信が行えるようになります。様々なセンサに対応しているので、活用ください。

ボクにもわかる IoT Sensor Core for Ambient (bokunimo.net)

今回の実証では、実験機Aについては本実証専用のプログラムを使いましたが、実験機BにIoT Sensor Coreを使いました。
IoT Sensor Coreの設定を行うときはESP32マイコンが連続動作するため、安定化電源やACアダプタなどの電源に接続してください。
運用に切り替える際は、Deep Sleep中に電池からの供給に素早く切り替えてください。実験機Bでは、切り替え前に1000μFのコンデンサを電源部に接続しておき、切替後に外すと、切り替え時の動作停止を防ぐことが出来ます。

Ambientに蓄積したデータのダウンロード

Ambientに蓄積したデータは、1年で消えてしまうので、ダウンロードしておく必要があります。Ambientのウェブページ上にもダウンロード機能がありますが、最大35日と限られており、1年分のダウンロードを行うには手間がかかります。
そこで、ボクはリードキーを使いJSON形式でダウンロードしました。ただし、データ量が多いとAmbient側で処理が出来ず、ダウンロードが出来ないだけでなく、サーバへの負担もかかってしまいます。
※目安としては10万件が限度ですので、必ず、事前にデータ件数を計算し、ダウンロード可能な件数の範囲内であることを確認してください。数万件以内であればn=0を指定することで全件のダウンロードが可能です。

取得コマンド:
curl https://ambidata.io/api/v2/channels/{チャネルID}/data\?readKey={リードキー}\&n={件数} > data.json⏎

結果例:
cat data.json⏎
[{"d2":22,"d5":18.8,"d6":72,"d7":1017,"d8":2934,"created":"2020-12-05T02:52:28.799Z"},{"d2":22,"d5":18.8,"d6":72,"d7":1017,"d8":2934,"created":"2020-12-05T02:51:29.247Z"},{"d2":20,"d5":18.8,"d6":72,"d7":1018,"d8":2934,"created":"2020-12-05T02:50:29.694Z"},{"d2":20,"d5":18.8,"d6":72,"d7":1018,"d8":2934,"created":"2020-12-05T02:49:30.147Z"},{"d2":22,"d5":18.8,"d6":72,"d7":1018,"d8":2934,"created":"2020-12-05T02:48:30.583Z"}]

両方の実験機で発生した5月末の消費増大

1年にもおよぶ実証実験には運用にも手間がかかります。
サーバ側については、Ambientにデータを利用することで、維持や管理の手間を省くことが出来ました。
しかし、5月末にLAN側のトラブルで一時的に停止してしまい、また電力量も消費してしまいました。両方の実験機で、その痕跡が残っています。

こういった、トラブルを検出するために、Ambientではデータ受信を監視し、異常を通知するサービス(有料・主に事象者向け)が、提供されています。

Ambientの通知サービス(有料・主に事業者向け)

また、上記と似たような機能を自宅内のサーバ上に自作する方法もあります。前述の「超シンプル回路!乾電池で295日間動作するESP32-WROOM-32」の後半に紹介しました。

実証実験の効果

電池寿命は試算することも出来ます。もちろんボクも実験前に消費電流から試算しています。しかし、実際に動かしてみると様々な要因で想定と違った現象が発生するので、実証実験で実際の動作期間を検証することは重要です。
今回に限らず、想定した性能が確保できているのかを確認することで、新たな発見や知見を得ることも出来ました。

むすび

待機時の消費電力と、乾電池の終止付近の動作に着目し、2台の実験機を作成し、どちらも単3型アルカリ乾電池で約1年(実験機Bは325日)の動作が出来ることを確認しました。
本実証結果が、IoT対応センサの開発の参考になれば幸いです。

by bokunimo.net

「実際に1年間動作を実証した乾電池駆動のESP32搭載IoT対応センサ」への3件の返信

興味深く拝見させていただきました。
電池直結だと回路もシンプルですし気軽なので楽しそうです。
ちょっと外部に設置する機器を考えているのですが電池はエネループを使おうと考えています。
一本1.2Vくらいなので電池三本の直列でできそうです、、、

こんばんわ。
当方、乾電池で1週間ももたないので、約1年近くもつなんて夢のようです。

実験機Bの送信間隔60分はどのようなプログラムなのか教えて頂けないでしょうか?

私は、ESP32でのdeepsleepが30分を超えて設定するとうまく機能しないので悩んでいます。

興味を持っていただきありがとうございます。

30分が設定できて60分が設定できないということは、deepsleepの値を保持したり内部で演算している変数の型に問題があるような気がします。
もし「int」で宣言しているようであれば、「uint32_t」に変更してみて下さい。

また、実験機B用のプログラムは以下で公開しています。
https://github.com/bokunimowakaru/sens

ソフトウェアでは、特別な配慮はしていません。
どちらかといえば、ハードウェア(電源周り)の工夫で動作時間を伸ばしています。

コメントは受け付けていません。

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es