亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 ACS712 传感器的 Arduino 交流电流精准测量(真有效值)

元器件与物料

Arduino UNO×1
ACS712 30A 模块(霍尔效应,隔离测量)×1
OLED I²C 128×32 或 LCD 1602 I²C×1
白炽灯泡 + 可控硅调光器(测试负载)×1
万用表(参考校准)×1

项目简介

本教程演示如何使用 ACS712 霍尔效应电流传感器配合 Arduino 实现真有效值 (TRMS) 交流电流测量。区别于仅适用于正弦波的峰峰值法,TRMS 算法可准确测量调光器切相波形等非线性负载电流。文中提供三阶段代码演进:波形观测 → 峰峰值法(仅正弦波) → 滤波器库 TRMS 法(通用波形),并给出 LCD/OLED 显示方案。

⚠️ 安全警告

涉及市电操作,必须具备电气安全知识,建议使用隔离变压器或电池供电测试,严禁带电插拔传感器!

ACS712 选型建议

测试 1:波形观测(Code_1)

接线:VCC→5V,GND→GND,OUT→A0。负载串联火线通过 ACS712 端子台。

#define CURRENT_PIN A0
void setup() { Serial.begin(9600); pinMode(CURRENT_PIN, INPUT); }
void loop() {
  float val = analogRead(CURRENT_PIN);
  Serial.println(val);
  delay(100); // 调整延时直到串口绘图器显示稳定正弦波
}

串口绘图器可看到正弦波;调光器全开时为完整正弦,半波/切相时波形畸变。

测试 2:峰峰值法 RMS(Code_2,仅适用正弦波)

#define SAMPLES 300
#define ACS_PIN A0
float highPk=0, lowPk=1024, ampPkPk, ampRMS;

void loop() {
  readAmps();
  ampRMS = ampPkPk * 0.3536 * 0.06; // 0.3536=1/(2√2),0.06 为经验校准系数
  Serial.print(ampRMS); Serial.print("\t"); Serial.println(ampPkPk);
  delay(200);
}
void readAmps() {
  highPk=0; lowPk=1024;
  for(int i=0;ihighPk) highPk=v;
    if(v

调光器全开时与万用表一致;切相至 1/4 波形时读数偏高(0.36A vs 0.21A),说明峰峰值法失效。

测试 3:Filters 库 TRMS 算法(Code_3,通用波形)

使用 Filters 库(统计滑动窗口计算 σ),实现真有效值。


#include <Filters.h>
#define ACS_PIN A0
float testFreq = 50;
float windowLen = 40.0/testFreq; // 40 个周期滑动窗口
float intercept = 0;   // 零点校准
float slope = 0.0752;  // 斜率校准(见下文标定)
float ampsTRMS;
unsigned long prevMs=0, printPeriod=1000;

void loop() {
  RunningStatistics stats;
  stats.setWindowSecs(windowLen);
  while(true){
    float v = analogRead(ACS_PIN);
    stats.input(v);
    if(millis()-prevMs >= printPeriod){
      prevMs = millis();
      ampsTRMS = intercept + slope * stats.sigma();
      Serial.print("\t Amps: "); Serial.println(ampsTRMS);
    }
  }
}

校准方法(关键)

  1. 零电流时观察 stats.sigma(),若非 0,设 intercept = -sigma 消除偏移。
  2. 接已知负载(如 75W 灯泡 @ 230V → 理论 0.326A),记录读数 measured,计算 slope = 理论值 / measured。
  3. 将两参数写入代码,再次验证。

测试 4:LCD/OLED 显示(Code_ACS712_LCD / _OLED)

接线同测试 1,仅在循环中将串口输出改为屏幕显示。LCD 需 LiquidCrystal_I2C 库,OLED 需 Adafruit_SSD1306 + Adafruit_GFX。


// LCD 关键片段
lcd.clear(); lcd.setCursor(2,0); lcd.print(ampsTRMS); lcd.print(" A");
// OLED 关键片段
display.clearDisplay(); display.setTextSize(3); display.setCursor(15,10);
display.print(ampsTRMS); display.println(" A"); display.display();

原理图

测试 1-3 共用接线

基于 ACS712 传感器的 Arduino 交流电流精准测量(真有效值)

LCD I²C 接线

基于 ACS712 传感器的 Arduino 交流电流精准测量(真有效值)

OLED 128×32 接线

基于 ACS712 传感器的 Arduino 交流电流精准测量(真有效值)

代码下载

  • Code_1.ino(波形观测)
  • Code_2.ino(峰峰值法)
  • Code_3.ino(TRMS 串口版)
  • Code_ACS712_LCD.ino(LCD 显示版)
  • Code_ACS712_OLED.ino(OLED 显示版)

Filters 库下载:GitHub 或教程附件。

制造工艺

  1. 使用 OpenSensors 监测空气质量:Arduino 与 Python 实战指南
  2. K30 CO₂ 传感器:室内空气质量实时监测
  3. 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
  4. 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
  5. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  6. DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
  7. 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
  8. Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
  9. 让大嘴鲈鱼玩具随音频起舞:分步制作指南
  10. Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
  11. 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
  12. Arduino 合成乐音:从零实现 88 键钢琴全音域