M5StickCでAC電流センサを使う

先日、M5Stackに電流センサをつないで、電化製品の電流値を測定しました(記事は こちら)。
今回は、同じことを、M5StickCで試してみます。


使うのは、M5Stackの時と同じ「クランプ式AC電流センサ30A」です。


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

ブレッドボードで回路を作ります。AC電流センサは端子がオーディオプラグになっているので、オーディオジャックで接続できるようにしておきます。

M5StickCの電源端子(3V3)とグランド端子(GND)を、4.7kΩの抵抗ふたつでつなぎ、中間電位を作ります。
電流センサのふたつの端子間に47Ωの抵抗をつなぎ、その一方の端に先ほど作った中間電位をつなぎます。
電流センサのふたつの端子を、M5StickCの26番、36番端子につなぎます。
M5StickCでは、26番、36番端子のアナログ値を読み取り、両者の差を観測することで、電源ケーブルを流れる電流値を把握します。

スケッチは以下のとおりです。
M5StickCで読み取ったアナログ値を電圧に補正し、さらに「電源コードを流れる電流値 I = ふたつの端子の電圧の差 V / 47 * 2000」の式に当てはめることで、ケーブルを流れる電流値が計算できます。

#include <M5StickC.h>

int pin1 = 26;
int pin2 = 36;

int count = 100;

void setup() {
  M5.begin();
  Serial.begin(115200);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
}

void loop() {
  float total = 0.0;
  for(int i=0; i<count; i++) {
    float vdiff = (float)(analogRead(pin1) - analogRead(pin2)) / 4096.0 * 3.3; // Vdiff = (val2-val1)/4096*3.3
    float current = vdiff / 47.0 * 2000.0; // I = Vdiff/R*ratio, , R=47ohm, ratio=2000
    total += pow(current, 2);
    delay(1);
  }
  Serial.println((float)sqrt(total / count));
}

電源ケーブルを電流センサではさみます。
電源ケーブルは2本の線でできていますが、両方をはさんでしまうと2次電流は流れないので、写真のように2本の線の片方だけをはさみます。
今回も、電源コードには、ヘアドライヤーをつなぎました。

シリアルプロッタに表示した結果は以下のとおりです。ドライヤーの状態に応じて、波形の大きさが変化しています。

ただし、ドライヤーを停止している時にも、13A程度と、大変大きな数値が表示されています。
ドライヤーを冷風にした程度では、停止している時との差がわかりません。また、M5Stackで測定した結果とも、大きく異なっています。

M5Stackの時と同様に、電源ノイズが原因ではないかと考え、「M5.begin」に引数を追加してみましたが、状況は変わりませんでした。

そのため、M5StickCで読み取ったアナログ値を、直接観測してみることにしました。

M5StickCの電源端子(3V3)とグランド端子(GND)を可変抵抗につなぎ、中間電位をM5StickCの26番、36番端子につなぎます(同じ信号をふたつの端子につなぎます)。

その上で、M5StickCに以下のスケッチを書き込みました。

#include <M5StickC.h>

int pin1 = 26;
int pin2 = 36;

void setup() {
  M5.begin();
  Serial.begin(115200);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
}

void loop() {
  int val1 = analogRead(pin1);
  int val2 = analogRead(pin2);

  Serial.print(val1);
  Serial.print(",");
  Serial.println(val2);
  delay(100);
}

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

可変抵抗を下限、および上限いっぱいに回した時には、アナログ値はふたつとも「0」程度、もしくは「4095」程度となり、同じ結果になっていますが、可変抵抗を中間電位にした時には、同一の信号にも関わらず、両者の間に「500」程度の差があります。
これが原因で、電流センサの測定結果が、実態と大きくずれてしまっているようです。

電流値の増減など、相対比較程度ができればよいのであれば、この方法でも何とか使えそうですが、より正確な値を測定したければ、ADコンバータを使うなど、対策を考えなければいけなさそうです。

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


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


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

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