ATOM Matrixでできること 〜ATOM Matrixの消費電流値

先日、M5StickCの消費電流値を調査しました(記事は こちら)。

調査のきっかけは、とあるスケッチをつくったことでした。
つくったスケッチは、M5StickC内蔵の加速度センサでM5StickC本体の傾きを測定し、一定時間毎にWebサーバに送信するというものです(記事は こちら)。
M5StickCを、子供の鉛筆に取り付けることで、鉛筆が縦向きになっていたら勉強中、横向きだったら勉強していないというふうに、勉強時間が把握できるのでは?という目論見でした。

スケッチ自体は問題なく動作し、データも取得できたのですが、ただひとつ問題となったのはM5StickC内蔵バッテリーのもちでした。
動作中の大部分の時間はディープスリープさせているため、内蔵バッテリーだけで半日ぐらいはもつのでは?と期待していたのですが、わずか2〜3時間で電池がなくなってしまうという状況でした。

この原因追求のために消費電流値の調査を行ったのですが、その結果、M5StickC内蔵の加速度センサを動作させると、ディープスリープ時でも10mA以上の電流を消費してしまうことがわかりました。
これが原因で、大部分の時間ディープスリープさせていたにも関わらず、わずか2〜3時間で電池がなくなってしまうという状況になってしまったようです。

そんな訳で、M5StickCでの長時間稼働は諦めていたのですが、ある時ふと、ATOM Matrixにも加速度センサが内蔵されているので、上記のスケッチはATOM Matrixでも実現できるということに気付きました。
もしもATOM Matrixのディープスリープ時の消費電流値が十分小さければ、M5StickCの代わりにATOM Matrixを使うことで、長時間のデータ測定ができるようになるかもしれません。

そこで、M5StickCで実施したのと同じ内容の消費電流値調査を、ATOM Matrixでも実施することにしました。


調査方法

調査方法はM5StickCの時と同じで、以下のとおり、ATOM Matrixを電池で駆動し、その際の消費電流値をテスターで測定します。

初期状態

初期状態は以下のとおりです。

#include "M5Atom.h"

void setup() {
  M5.begin(true, false, true);
}

void loop() {
}

CPUの動作周波数を変更

CPUの動作周波数を240MHzから80MHzに変更しました。

#include "M5Atom.h"

void setup() {
  M5.begin(true, false, true);
  setCpuFrequencyMhz(80);
}

void loop() {
}

LEDを消灯

LEDの明るさ指定をゼロにし、点灯しないようにしました。

#include "M5Atom.h"

void setup() {
  M5.begin(true, false, true);
  setCpuFrequencyMhz(80);
  M5.dis.setBrightness(0);
}

void loop() {
}

ディープスリープ

一定期間毎にディープスリープに入ります。

#include "M5Atom.h"

void setup() {
  M5.begin(true, false, true);
  setCpuFrequencyMhz(80);
  M5.dis.setBrightness(0);
}

void loop() {
  delay(5000);

  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

Wi-Fi接続

Wi-Fi接続を追加しました。

#include "M5Atom.h"
#include <WiFi.h>

WiFiClient client;

const char* ssid       = "XXXXXXXX";
const char* password   = "XXXXXXXX";

void setup() {
  M5.begin(true, false, true);
  setCpuFrequencyMhz(80);

  M5.dis.clear();
  int cnt = 0;
  WiFi.begin(ssid, password);
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    M5.dis.drawpix(cnt, 0x00FF00);
    cnt++;
  }
  M5.dis.drawpix(cnt, 0xFF0000);
  delay(1000);
  M5.dis.clear();
}

void loop() {
  delay(5000);

  WiFi.disconnect();
  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

Wi-Fi接続状況確認のため、一旦LEDを点灯させていますが、LEDが消灯した後の消費電流値を調査します。

加速度センサを動作

加速度センサを動作させました。

#include "M5Atom.h"
#include <WiFi.h>

WiFiClient client;

const char* ssid       = "Buffalo-G-8410";
const char* password   = "techtx73b6fcr";

float accX = 0.0f;
float accY = 0.0f;
float accZ = 0.0f;

void setup() {
  M5.begin(true, false, true);
  setCpuFrequencyMhz(80);
  M5.IMU.Init();

  M5.dis.clear();
  int cnt = 0;
  WiFi.begin(ssid, password);
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    M5.dis.drawpix(cnt, 0x00FF00);
    cnt++;
  }
  M5.dis.drawpix(cnt, 0xFF0000);
  delay(1000);
  M5.dis.clear();
}

void loop() {
  M5.IMU.getAccelData(&accX, &accY, &accZ);
  delay(5000);

  WiFi.disconnect();
  esp_sleep_enable_timer_wakeup(10000000);
  esp_deep_sleep_start();
}

調査結果

調査結果は以下のとおりです。

動作 消費電流値(mA)
初期状態 73.4
CPUの動作周波数を変更 48.0
LEDを消灯 48.0
ディープスリープ(動作時) 42.8
ディープスリープ(スリープ時) 25.8
Wi-Fi接続(動作時) 46.6
Wi-Fi接続(スリープ時) 25.8
加速度センサを動作(動作時) 49.0
加速度センサを動作(スリープ時) 27.5

LEDの明るさ指定は、LEDを点灯させていない状況では、消費電流値への影響は全くありませんでした。

また、ATOM Matrixでは、加速度センサを動作させるかどうかに関わらず、ディープスリープ時でも常時20mA以上の電流消費があり、M5StickCよりも悪い結果となりました。

ATOM MatrixにはLCDも内蔵バッテリーもなく、M5StickCに比べると構成がシンプルなので、消費電流値もM5StickCより小さいのではないか?と期待していたのですが、そのような結果にはなりませんでした。
ATOM Matrixでは、低電力化を目的としたディープスリープはあまり活用できなさそうです。


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


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


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

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