M5Stamp Picoでできること 〜ニッケル水素電池で長期間連続稼働させる

「M5Stamp Pico」は、他のM5Stack社のモジュールに比べて「ディープスリープ時」の消費電力が非常に小さく、「間欠的にデータ採取するIoTデバイス」を「電池」で動かしたいというような用途に向いています。
実際に「M5Stamp Pico」の消費電流値を測定してみたり(記事は こちら)、「M5Stamp Pico」でIoTデバイスをつくってみたり(記事は こちら)して、実際に活用できそうな感触も得られました。

今回は、実際に電池で「M5Stamp Pico」を動かしてみて、どのぐらいの期間、連続稼働できるか確認してみたいと思います。

電池は、単四形ニッケル水素電池(800mAh)を4本直列にしたものを使います。
電流電圧センサ「INA226PRC」を使い、1分毎に電池の出力電圧値を測定することとします。
具体的には、起動→「INA226PRC」で電圧値を測定→Wi-Fi接続→Ambientに測定データを送信→Wi-Fi切断→1分間のディープスリープに入る、という処理を繰り返します。

回路図は以下のとおりです。

低電力化のため、ディープスリープ中は「INA226PRC」にも電源供給したくないので、「INA226PRC」の電源端子を電源にはつながず、「M5Stamp Pico」の「25番」ピンにつないでいます。
「M5Stamp Pico」が起動したら、最初に「25番」ピンをHIGHにし、電圧測定後はすぐにLOWに戻すようにします。

スケッチはこちらです。

#include <WiFi.h>
#include <Wire.h>
#include "INA226PRC.h"
#include "Ambient.h"

INA226PRC ina226prc;
WiFiClient client;
Ambient ambient;

const char*  ssid      = "XXXXXXXX";
const char*  password  = "XXXXXXXX";
unsigned int channelId = XXXXX;
const char*  writeKey  = "XXXXXXXX";

unsigned long interval = 60; // unit:sec

void setup() {
  Serial.begin(115200);
  Wire.begin();

  // INA226PRC
  pinMode(25, OUTPUT);
  digitalWrite(25, HIGH);
  delay(500);
  ina226prc.begin();
  float amp = ina226prc.readCurrent();
  float volt = ina226prc.readVoltage();  
  digitalWrite(25, LOW);

  // WiFi Connect
  Serial.printf("Connecting to %s\n", ssid);
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.printf("\nWiFi connected\n");

  // Ambient
  ambient.begin(channelId, writeKey, &client);
  ambient.set(1, amp);
  ambient.set(2, volt);
  ambient.send();
  Serial.printf("[VOLTAGE] %.2f mV , [CURRENT] %.2f mA\n", volt, amp);

  // WiFi Disconnect
  WiFi.disconnect(true);
  Serial.printf("WiFi disconnected\n");

  // Deep Sleep
  esp_sleep_enable_timer_wakeup(interval*1000*1000);
  esp_deep_sleep_start();
}

void loop() {
}

満充電したニッケル水素電池を取り付けて、調査を行ったところ、上記の条件で7日間以上にわたり連続稼働させることができました。

測定データをグラフ化した結果はこちらです。

ニッケル水素電池の放電特性どおりのきれいな結果が得られました。

「M5Stamp Pico」の動作時の消費電流値は数十mA、対してディープスリープ中の消費電流値は1mA以下と、2桁の違いがあるため、ディープスリープ中の電力消費はほぼ無視できます。
よって、もしもデータ測定の間隔を「1分毎」→「10分毎」にすると、70日以上、連続稼働できる計算になります。
さらに、ニッケル水素電池を「単四形(800mAh)」→「単三形(1900mAh)」に変更すれば、半年近く稼働できる計算になります。

電池駆動で半年近くも連続稼働できるとなると、様々な用途に活用できそうで、非常に魅力的です。


なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。