M5Stackでできること 〜M5Stack用電圧計ユニットを使う

M5Stackで使われているESP32マイコンにはADコンバータが内蔵されており、それでアナログ電圧値を取得することができます。
ただ、この内蔵ADコンバータで測定できるのは 0V〜概ね3V程度 の範囲であり、それよりも高い電圧を測定しようとすると、外付けの抵抗で分圧するなどの処理が必要になります。マイナスの電圧も測定できません。

今回、10Vを超えるやや高い電圧を測定したい機会がありました。また極性が逆になる可能性もあるため、実際には「-10V以下〜+10V以上」の範囲の電圧を測りたいということになります。
そのため「M5Stack用電圧計ユニット」という製品を試してみることにしました。

「M5Stack用電圧計ユニット」の販売ページによると、最大測定電圧は「±36V」ということで、今回の測定対象にピッタリです。
また、I2Cインターフェースなので、M5StackのGROVEポートAに差し込むだけで簡単に使えそうです。

早速試してみました。


最初に本製品を使うためのライブラリをインストールします。
Arduino IDEで「ツール」>「ライブラリを管理…」をクリックして、ライブラリマネージャを開きます。
検索窓に「ADS1115」と入力し、表示された「M5-ADS1115 by M5Stack」で「インストール」をクリックします。今回は「バージョン1.0.0」をインストールしました。

スケッチはこちらです。

#include "M5_ADS1115.h"
#include <M5Unified.h>

#define M5_UNIT_VMETER_I2C_ADDR             0x49
#define M5_UNIT_VMETER_EEPROM_I2C_ADDR      0x53
#define M5_UNIT_VMETER_PRESSURE_COEFFICIENT 0.015918958F

ADS1115 Vmeter;

float vmeterResolution  = 0.0;
float vmeterCalibration = 0.0;

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);

  // 電圧計ユニット用設定
  while(!Vmeter.begin(&Wire, M5_UNIT_VMETER_I2C_ADDR, 21, 22, 400000U)) {
    M5.Log.println("Unit Vmeter Init Fail");
    delay(1000);
  }
  Vmeter.setEEPROMAddr(M5_UNIT_VMETER_EEPROM_I2C_ADDR);
  Vmeter.setMode(ADS1115_MODE_SINGLESHOT);
  Vmeter.setRate(ADS1115_RATE_8);
  Vmeter.setGain(ADS1115_PGA_2048); // PGA_2048 : Max Input Voltage = 32V
  vmeterResolution = Vmeter.getCoefficient() / M5_UNIT_VMETER_PRESSURE_COEFFICIENT;
  vmeterCalibration = Vmeter.getFactoryCalibration();

  // ディスプレイ用設定
  M5.Display.setTextColor(TFT_WHITE);
  M5.Display.setTextDatum(MC_DATUM);
}

void loop() {
  M5.update();

  // 電圧測定
  float voltage = Vmeter.getSingleConversion() * vmeterResolution * vmeterCalibration;

  // ディスプレイ表示
  M5.Display.fillScreen(TFT_BLACK);
  String message = "Voltage = " + String(voltage, 0) + " mV";
  M5.Display.drawString(message, M5.Display.width()/2, M5.Display.height()/2, 4);
  delay(500);
}

0.5秒毎にLCD画面に測定した電圧値を表示するだけのものです。

「Vmeter.setGain()」というコマンドでゲインを設定しています。
スケッチ例を見ると、ここで「PGA_6144」と指定すると「Max Input Voltage = 128V」になると書かれており、販売ページに書かれている「Measuring range = ±36V」と整合がとれません。
この点についてはよく分かりませんが、今回はとりあえず測定対象にあわせて「PGA_2048(Max Input Voltage = 32V)」と設定しました。

動作確認のため、このような測定対象回路を準備しました。

ふたつの100kΩ可変抵抗に、安定化電源から12Vを供給します。可変抵抗のツマミを調整することで、-12V〜+12V の電圧をつくることができます。
回路はブレッドボードでつくりました。

M5Stack Basicと「M5Stack用電圧計ユニット」を接続し、その先を測定対象回路につなぎます。

M5Stackの電源をONにし、可変抵抗のツマミを回すと、以下のように -12V程度〜+12V程度 の電圧値を測定することができました。

情報が少なくよく分からない点もありましたが、とりあえず「M5Stack用電圧計ユニット」以外には追加の部品なども使わず、所望の測定を行うことができました。


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


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


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

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