乾電池一本で動く画面付き電流計を自作した

この記事ははJLCPCBの提供でお送りします。

またJLCPCBのブログとほぼ同じ内容です。

JLCPCBとは

jlcpcb.com (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)

JLCPCBとは、プリント基板製造などで有名な香港の企業です。

日本からでもWebページでポチポチするだけでKiCADなどで作成した基板データの製造を依頼できます。

値段もかなりお手頃で、ホビー電子工作ユーザーの間では広く利用されています。

この記事の作例もJLCPCBに基板を発注して実現しました。

どういうもの?

以前JLCPCBに発注して作った「Arduino Nanoを単4電池で動かすボード」を活用して、便利な電流計を作ってみました。

inajob.hatenablog.jp

自分が持っているテスターにも電流を測定する機能はあるのですが、その瞬間に流れている電流を数値として表示するだけのシンプルなものでした。

今回作成したのは、グラフィカルな画面を持つ電流計で、ここしばらくの電流の変動を時系列のグラフで表示するというものです。

Arduino Nanoを単4電池で動かすボード」は名前の通り乾電池1本で動かすことが出来るので、USBケーブルの接続などなしで、普通のテスターと同じような使い勝手で利用できる便利な電流計を実現しています。

パーツ紹介

Arduino Nanoを単4電池で動かすボード」を本体として、それにINA219という電流計のICを搭載したモジュールを搭載しました。

制御はI2Cとなっており、Arduinoから簡単に利用できるライブラリも公開されているのでソフトウェアの開発も簡単でした。

ソースコード

すごく素朴に電流の時系列グラフを表示するプログラムです。 これを基に様々な機能を持った電流計を作ることが出来そうです。

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
int index = 0;

void setup() {
  Serial.begin(9600);
  u8g2.begin();
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  u8g2.clearBuffer();
}

void loop() {
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);

  index = (index + 1)%128;
  char bbuf[8];
  dtostrf(current_mA, 5,2, bbuf);
  char currentbuf[16];
  sprintf(currentbuf, "%smA", bbuf);

  dtostrf(loadvoltage, 5,2, bbuf);
  char loadbuf[16];
  sprintf(loadbuf, "%sV", bbuf);
  
  u8g2.setFont(u8g2_font_ncenB08_tr);   // choose a suitable font

  u8g2.setDrawColor(0);
  u8g2.drawBox(0,0,128,10);
  u8g2.drawBox(index,0,1,64);
  u8g2.setDrawColor(1);
  u8g2.drawBox((index + 128 + 1)%128,10,1,63-10);
  u8g2.drawPixel(index, 63 - (int)(current_mA * 64/10)); // max 10mA
  Serial.println(63 - (int)(current_mA * 64/10));
  u8g2.drawStr(0,10,currentbuf);
  u8g2.drawStr(64,10,loadbuf);
  u8g2.sendBuffer();
  delay(10);
}

OLEDの制御には同じみu8g2を利用しました github.com INA219モジュールの制御には以下のライブラリを利用しました github.com

感想

以前作った、「Arduino Nanoを単4電池で動かすボード」の活用例として画面付きの電流計を自作しました。

電流計のプログラムを自分で作ることが出来るというのは、自分の使う道具の痒い所に手が届く感じでなかなか便利なことだと感じました。普段使っている既製品を、自分でプログラミングできるものとしてとらえなおすというのはとてもワクワクします。

電流計の機能的にはArduino NanoそのものやArduino UNOを使っても同じことが出来ますが、乾電池1本で画面付きで・・となってくるとこの「Arduino Nanoを単4電池で動かすボード」が非常に便利であることが実感できました。

安価で、バッテリー駆動ができ、画面もついている開発ボード、これが1つあるとちょっとしたガジェットのプロトタイピングが簡単にできると感じており、この方向でもう少しブラッシュアップした開発ボードを作っていきたいなと感じました。