見出し画像

自作IoTシステムの構築 基礎編6:「電源制御モジュール」をどう選ぶか?

自作IoTシステムの構築 基礎編』では、私自身の経験をもとに、IoTデバイスを自作するために必要な知識の全体像と、各要素の選択肢や選び方を整理して解説しています。

電源/電池、通信、マイコンを組み合わすことで、最低限のIoTを実現できますが、特に電池駆動の場合、現場に設置したIoTシステムを長期稼働させたい、という課題があるのではないでしょうか。長期稼働には、必要な時間だけ電源供給する間欠運転が有用です。本記事では、間欠運転を実現する電源制御モジュールの必要性について整理します。

(2024/04/16 deepsleepに関する記述を追記)
(2024/11/25 Grove接続に関する注意点を追記)


■ 背景

ここで、少し私自身の経験に触れます。2019年、私が電池駆動型IoTシステムを開発していた際、如何に長期稼働を実現するか、が最大の課題でした。ちょうどそのタイミングに、自作で使いやすい電源制御モジュール(=Wio Extension – RTC)が発売され、救われた経験があります。このモジュール無しには、電池駆動での長期稼働(1年以上)は不可でした。Wio Extension – RTCを使うメリットは何なのか、どのように接続するのか、など整理します。Wio Extension – RTC、めちゃくちゃおすすめです。

■ 電池駆動型IoTデバイスの課題は待機電力

電池駆動型IoTシステムを長期稼働させるためには、如何に消費電力量を低減させるかを、考える必要があります。この消費電力量[mWh]を深堀りすると、下記の模式図のように表されます。

グラフの横軸が時間、縦軸が消費電力[mW]であり、青色の線がIoTデバイスの消費電力の時間変化です。①が計測時の消費電力量②が送信時の消費電力量③が待機時の消費電力量です。消費電力量[mWh]は電力[mW]x時間[h]であり、グラフの面積が消費電力量[mWh]に相当します。

定期的にデータを送信するIoTシステムにおいて、1サイクルの消費電力量は①+②+③で表されます。私が扱うセンサーやマイコンの環境下では、①+②は10秒弱です。仮に①+②の時間が10秒とし、計測頻度が1時間=3600秒とすると、③の時間は3590秒となります。このように、計測や送信時間よりも、待機時間のほうが長いことが一般的であるため、待機電力を下げることが、長期稼働に極めて効果的です!!!

■ 待機電力をいかにゼロに近づけるか

問題は、待機電力をゼロに近づける方法です。低消費電力のマイコンを用い、かつsleepモードを用いることも有用なのですが、sleepモードを用いたとしても、Arduino系では数mA〜数10mAオーダーまでしか下げることができません。理想的にはμAオーダーまで下げたいところです。そこで有用となるのが電源管理モジュールであるWio Extension – RTCです!!!

再掲:Wio Extension – RTC

Wio Extension – RTCを、電池とマイコンの間に割り込ますと、
・マイコンへの電源を、任意時間OFFする
・電源OFF時の待機電流を、1μA以下に低減させる
・任意時間経過後、マイコンへの電源をONにする
を実現できます!!!本当に便利なモジュールです!!!

(2024/04/16追記) deepsleepモードを用いることで、0.1μA〜数10uAオーダーまで下げられるマイコンが出てきており、これを用いるのも選択肢の一つです。ただし、 deepsleepの場合、マイコンの省電力化が実現できる一方で、センサーに電源供給され続けるため、センサー側の待機電力を考慮する必要があります。

■ Wio Extension – RTCは、Arduino等にも接続できる

開発当初、私は、Wio Extension – RTCにWioという名前が付いていることから、Wio系マイコン専用かと思っていました。確かに、Wio Extension – RTCのネジ穴位置は、Wio系マイコン専用設計になっていますが、I2C接続できるマイコンであれば電源制御することが可能です。Arduino系マイコンにも、M5Stack系マイコンにも接続できます!

Wio Extension – RTCという名前がわかりにくいですよね。。

■ Wio Extension – RTCの接続方法

ここで、具体的なWio Extension – RTCの接続方法について図で示します。下図をご覧ください。

①は、電池をマイコンに直接接続したIoTデバイスの模式図です。この構成で待機電力を下げるには、限界があります。
②は、電池とマイコンの間にWio Extension – RTCを割り込ませた模式図です。これで、Wio Extension – RTCよりも右側で消費される待機電力をゼロにすることができます!!!

接続方法を補足すると、電池とWio Extension – RTCのUSBmicroB端子を接続し、Wio Extension – RTCのUSBtypeA端子とマイコンを接続します。また、マイコンとWio Extension – RTCをGroveケーブルで接続します。

(2024/11/25追記)
GroveケーブルのVccはマイコンやモジュールによって、5V系と3.3V系とあります。例えば、Seeed系は3.3Vですし、M5Stack系は5Vだったりします。
本記事のコメント欄での会話で知りましたが、Wio Extension – RTCに接続するGroveのVcc電圧を5Vにすると、不具合が発生する事例があるようです。そのため、Wio Extension – RTCに接続するGroveのVccは3.3Vがベターです(3.3Vがマストなのかわかっていません。知見をお持ちの方、コメント頂ければ幸いです。)。
私は、今まで3.3Vを使用してたため、5Vにした時の不具合について、これまで把握できていませんでした。

■ Wio Extension – RTCのプログラム

Wio Extension – RTCのArduinoライブラリが公開されています。

主要部分のコードのみを記述すると下記の通りです。
簡単なコードで、待機電流1μA以下を実現できます!!!
もし、スリープ時にも記憶させたい変数がある場合、Wio Extension – RTCのEEPROMに、記憶させることもできます。便利ですね。

#include "WioRTC.h" // ライブラリ読込
#define BOOT_INTERVAL   (3600)  // スリープ時間[sec.]
WioRTC Rtc;
void setup(){
 
  // (中略)マイコンのsetupなど

  Wire.begin(); // I2Cの初期化
  Rtc.begin();  //Wio Extension – RTCの初期化

}

void loop(){
  uint8_t val;
  Rtc.EepromRead(0, &val, sizeof(val)); // Wio Extension – RTCのEEPROMを読込み
  val++;
  Rtc.EepromWrite(0, &val, sizeof(val)); // Wio Extension – RTCのEEPROMに書込み

  Rtc.SetWakeupPeriod(BOOT_INTERVAL); // スリープ時間定義
  Rtc.Shutdown(); // スリープ。これで1uA以下に!
  while (1) {}
}

■ まとめ

電池駆動型IoTシステムを長期稼働させるには、待機電力をゼロに近づけることが必要であり、そのためには電源制御モジュールが有用であること、また自作IoTシステムで使いやすいWio Extension – RTCを紹介しました。

私は、このWio Extension – RTCがとても気に入っています。IoTシステム実運用上の一番のコストは電池交換工数であり、電池交換頻度を下げる電源制御モジュールの採用は極めて有用です。是非、自作IoTシステム構築の際、Wio Extension – RTCを活用してみてください。

次の記事では、センサー選びについてまとめます。


■参考
・Wio Extension – RTCの使い方が、ソラコム公式ブログにまとまっています。大変わかりやすいです。

・Wio Extension – RTCは、下記から購入できます。

・Wio Extension – RTCのArduinoライブラリが公開されています。これを使えば簡単に待機電流1μA以下を実現できます。

・自作IoTシステムの構築 基礎編の各記事を、マガジンにまとめています。


いいなと思ったら応援しよう!