Arduinoで作る高精度エナジーモニター&データロガー – Dr. Wattsonボード活用
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| Dr. Wattson エナジーモニタリングボード | 1 | MCP39F521搭載、I2C接続 |
| Dr. Wattson用アクリルケース | 1 | 安全性確保、IECソケット付き推奨 |
| Adafruit MicroSDカードブレークアウトボード | 1 | SPI接続、データログ用 |
| タクトスイッチ | 1 | ログ開始/停止トグル用 |
| LED (赤) | 1 | ログ状態表示用 |
| 抵抗 220Ω | 1 | LED電流制限用 |
| ジャンパーワイヤー | 多数 |
プロジェクト概要
Microchip MCP39F521パワーモニタリングICを搭載した「Dr. Wattson」ブレークアウトボードをArduinoで制御し、電流・電力・力率などのエネルギーデータをMicroSDカードにCSV形式でロギングするシステムです。タクトスイッチでログ開始/停止を切り替え、LEDで記録中を表示。ログローテーション機能により、セッションごとに別ファイル (DATA00.CSV〜DATA99.CSV) に保存。Excel等で簡単にグラフ化可能です。

Dr. Wattsonボードの特徴
- MCP39F521ベース: 単相電力測定IC、4000:1ダイナミックレンジ (1mA〜4A測定可能)
- 電流/電圧トランスで絶縁済み: デジタル出力はメイン電圧から完全絶縁、安全
- I2Cインターフェース: 2線 (SDA/SCL) でArduinoと通信、アドレスジャンパーで4台まで同時接続可能
- 工場出荷時キャリブレーション済み: すぐ使える高精度データ
- 最大12Aまで対応 (基板設計上)、測定レンジは4Aまでキャリブレーション済み
- 高度機能: ZCD(零点検出)、イベント通知(過電流/過電力/電圧サグ)、キャリブレーションルーチン

回路接続

Dr. Wattson – Arduino UNO (I2C)
| Dr. Wattsonピン | Arduinoピン |
|---|---|
| SCL | A5 |
| SDA | A4 |
| GND | GND |
| VIN | 5V |
| 3.3V | 3.3V |
| ZCD / Event | 未接続 (本例では未使用) |
MicroSDカード – Arduino UNO (SPI)
| SDピン | Arduinoピン |
|---|---|
| CLK (SCK) | 13 |
| MISO | 12 |
| MOSI | 11 |
| CS | 10 (ハードウェアCS、変更可) |
ボタン & LED
| 部品 | 接続 |
|---|---|
| タクトスイッチ | ピン4 — GND (内部プルアップ使用, アクティブLOW) |
| LED (アノード) | ピン9 — 220Ω — GND (カソード) |
スケッチ解説
主要ライブラリ
Wire.h(I2C標準)UpbeatLabs_MCP39F521.h(Dr. Wattson専用ライブラリ, GitHub)SD.h(SDカード標準)Button.h(Jack Christensen作, デバウンス機能付き, GitHub)
セットアップ処理
#define BUTTON_PIN 4
#define PULLUP true
#define INVERT true
#define DEBOUNCE_MS 20
Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS);
#define LED 9
#define CHIP_SELECT 10
UpbeatLabs_MCP39F521 wattson;
bool readData = false;
char filename[] = "DATA00.CSV";
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(CHIP_SELECT, OUTPUT);
// SDカード初期化
if (!SD.begin(CHIP_SELECT)) {
Serial.println(F("*** SD Card failed, or not present ***"));
}
wattson.begin(); // デフォルトI2Cアドレス 0x74
// 未使用のファイル名を検索 (DATA00.CSV 〜 DATA99.CSV)
for (uint8_t i = 0; i < 100; i++) {
filename[4] = i/10 + '0';
filename[5] = i%10 + '0';
if (!SD.exists(filename)) {
Serial.print(F("Data file is "));
Serial.println(filename);
break;
}
}
Serial.println(F("**initialization complete.**"));
}
メインループ
void loop() {
myBtn.read(); // ボタン状態更新
// ボタンリリースでトグル
if (myBtn.wasReleased()) {
readData = !readData;
digitalWrite(LED, readData); // LEDで記録状態表示
}
if (readData) {
UpbeatLabs_MCP39F521_Data data;
UpbeatLabs_MCP39F521_FormattedData fData;
int readMCPretval = wattson.read(&data, NULL);
unsigned long currentMillis = millis();
if (readMCPretval == UpbeatLabs_MCP39F521::SUCCESS) {
// ターミナル画面クリア (screenコマンド使用時)
Serial.write("\x1B""c");
wattson.convertRawData(&data, &fData);
printMCP39F521Data(&fData);
// SDカードにCSV書き込み
File dataFile = SD.open(filename, FILE_WRITE);
if (dataFile) {
dataFile.print(currentMillis); dataFile.print(",");
dataFile.print(fData.currentRMS); dataFile.print(",");
dataFile.print(fData.activePower); dataFile.print(",");
dataFile.print(fData.reactivePower); dataFile.print(",");
dataFile.println(fData.apparentPower);
dataFile.close();
} else {
Serial.print(F("error opening ")); Serial.println(filename);
}
} else {
Serial.print(F("Error! ")); Serial.println(readMCPretval);
}
}
}
CSV出力フォーマット
timestamp(ms), currentRMS(A), activePower(W), reactivePower(VAR), apparentPower(VA)
※ ヘッダー行自動出力は将来の拡張予定。手動で1行目に追加してください。
実測例: CFL電球 (14W) のコールドスタート

- 電流: ピーク0.21A → 定常0.18Aに収束
- 有効電力: ピーク17W → 定常14.2Wに収束
- ウォームスタート時は即座に定常値へ
- 無効電力・皮相電力から力率変化も観測可能
データ分析のヒント
- CSVをExcel/Googleスプレッドシート/NumPy等で読み込みグラフ化
- タイムスタンプは
millis()(ms) なので、経過時間に変換して横軸に - 有効/無効/皮相電力から負荷の性質 (抵抗性/誘導性/容量性) を推定
- 待機電力測定には高感度レンジ (1mA〜) が威力を発揮
シリアルモニターの代替: screen コマンド
Arduinoシリアルモニターは画面クリア非対応。Mac/Linuxなら screen が便利:
$ screen /dev/tty.usbmodem1411 9600
スケッチ側で Serial.write("\x1B""c"); (ANSIエスケープシーケンス) を送ると画面がその場で更新され、リアルタイムモニターのように見えます。
結論とリソース
Dr. Wattsonは「メイカーが手軽に高品質な電力データを扱えること」を目指したボードです。安全性、キャリブレーション済み、拡張性を兼ね備え、家電の消費電力分析からIoT電力監視まで幅広く応用可能。
- 完全スケッチ: 本文末尾に掲載
- ライブラリ & 例: Upbeat Labs drwattson GitHub
- 製品情報: Tindie販売ページ
- ニュース登録: LaunchRock
製造プロセス
- 予防保全スケジューリングの極意:固定型とフロート型の構築と最適化
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
- Arduino Mega と IoT センサによる高機能ホームモニタリングシステム
- Arduino UNOで作る信頼性の高いスマートエネルギーモニター – ステップバイステップガイド
- Arduino GPSデータロガー:リアルタイム飛行追跡、最高高度・速度監視
- Arduinoベースの心電図・呼吸モニタリングシステムを構築する
- ArduinoとProcessingで作るリアルタイムデジタルコンパス
- TensorFlowで変分オートエンコーダを構築:実践ガイド
- クラウド革命:IT、セキュリティ、キャリアをどう変えるか