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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。