打造可靠的 Arduino 能源监测与数据记录仪——分步指南
组件与物料
- Arduino UNO ×1
- Dr. Wattson 能量监测板(基于 Microchip MCP39F521)×1
- Dr. Wattson 专用亚克力外壳(含 IEC 插座、叉形接线端子)×1
- Adafruit MicroSD 卡扩展板 ×1
- LED(指示记录状态)×1
- 轻触开关(启停记录)×1
- 220 Ω 电阻 ×1
项目背景
Dr. Wattson 是一款基于 MCP39F521 单相功率监测芯片的开源断路板,内置电流/电压互感器,数字输出与市电完全隔离,安全测量交流有功/无功/视在功率、电压、电流、功率因数、频率等参数。动态范围 4000:1,可测 1 mA–4 A(经重新校准可扩展)。
硬件组装
- 将 Dr. Wattson 装入亚克力外壳,接入市电插座与负载插座,所有高压走线封闭于外壳内,安全可靠。
- I²C 接线:Dr. Wattson SCL→A5,SDA→A4,VIN→5V,GND→GND,3.3V→3.3V(二选一即可)。
- MicroSD 卡模块 SPI 接线:CLK→D13,MISO→D12,MOSI→D11,CS→D10。
- 按键接 D4,启用内部上拉(低电平触发),LED 接 D9(串 220 Ω)。
软件设计
使用 UpbeatLabs_MCP39F521 库(GitHub: upbeatlabs/drwattson)与 Button 库(JChristensen/Button,含消抖)。
核心逻辑
setup():初始化 SD 卡、Dr. Wattson、按键、LED;扫描 SD 卡现有DATAxx.CSV文件,选取最小未用编号作为新日志文件。loop():按键消抖检测,释放时切换readData标志并翻转 LED;readData为真时,每轮读取 MCP39F521 格式化数据(电流、有功/无功/视在功率),搭配millis()时间戳以 CSV 追加写入 SD 卡。- 串口同时输出实时数据,配合终端
screen /dev/ttyUSB0 9600并发送 ANSI 清屏序列(\x1Bc),实现原地刷新显示。
关键代码片段
// 文件名自动轮转
char filename[] = "DATA00.CSV";
for (uint8_t i = 0; i < 100; i++) {
filename[4] = '0' + i/10;
filename[5] = '0' + i%10;
if (!SD.exists(filename)) break;
}
// 按键切换记录状态
myBtn.read();
if (myBtn.wasReleased()) {
readData = !readData;
digitalWrite(LED, readData);
}
// 记录数据
if (readData) {
UpbeatLabs_MCP39F521_FormattedData fData;
if (wattson.read(&data, NULL) == SUCCESS) {
wattson.convertRawData(&data, &fData);
unsigned long ms = millis();
File f = SD.open(filename, FILE_WRITE);
if (f) {
f.print(ms); f.print(',');
f.print(fData.currentRMS); f.print(',');
f.print(fData.activePower); f.print(',');
f.print(fData.reactivePower); f.print(',');
f.println(fData.apparentPower);
f.close();
}
}
}
数据分析
CSV 文件直接拖入 Excel/数字表格,插入表头 timestamp,currentRMS,activePower,reactivePower,apparentPower 即可绘图。实测 14W 节能灯冷启动:电流峰值 0.21 A → 稳态 0.18 A,有功功率峰值 17 W → 稳态 14.2 W;热启动则无明显峰值。
扩展功能
- 库支持校准流程、零渡检测(ZCD)、过流/过压/欠压事件通知。
- 可修改取样电阻/互感器并重新校准,扩展量程。
- 通过焊盘跳线修改 I²C 地址(0x74–0x77),单 MCU 可挂载多块 Dr. Wattson。
制造工艺
- 掌握预防性维护:构建与优化固定与浮动计划
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- Blynk + Arduino 读取 DHT11 温湿度数据教程
- 基于 Arduino Mega 与物联网传感器的高级家庭监控系统
- 基于 Arduino UNO 构建可靠的智能能源监测仪——分步指南
- 高级 GPS 数据记录器:实时飞行追踪、峰值高度与速度监测
- 基于 Arduino 的心电图与呼吸监测系统构建
- Modbus + MKR WiFi 1010 + RS485 实现用电监测
- Arduino 实时数字罗盘:HMC5883L + Processing 可视化教程
- 使用TensorFlow构建变分自编码器:实战指南
- 云革命:云计算如何重塑IT、安全与职业生涯