Medición Precisa de Corriente Alterna con Sensor ACS712 en Arduino
Componentes y Suministros
- Arduino UNO × 1
- Pantalla OLED I²C 128x32 × 1 (opcional)
- Sensor ACS712 30A × 1 (ver nota sobre selección de rango)
- Pantalla LCD 16x2 I²C × 1
Sobre este Proyecto
⚠ PRECAUCIÓN: CUIDADO AL TRABAJAR CON LÍNEA DE RED (220V/110V).
Tutorial para medir corriente alterna (CA) usando el sensor ACS712 (efecto Hall) con Arduino. Se cubren tres métodos: visualización de señal, cálculo RMS simple (solo senoidal) y cálculo TRMS real (cualquier forma de onda) usando librería Filters.h.
Selección del Sensor ACS712
Existen versiones 5A, 20A, 30A. No compres el de 30A "por seguridad" para uso doméstico: su sensibilidad es menor (66 mV/A vs 185 mV/A del 5A), dando mayor ruido y fluctuaciones en corrientes bajas. Para electrodomésticos típicos, 5A o 20A son ideales. El rango afecta la calibración (pendiente/intercepto).
Montaje de Prueba
Bombilla incandescente 75W + dimmer (triac) en serie con multímetro de referencia y módulo ACS712. Alimentación 230VAC/50Hz.
Test 1: Visualizar Señal del Sensor
Cableado (Wiring 1)
- ACS712 VCC → 5V Arduino
- ACS712 GND → GND Arduino
- ACS712 OUT → A0 Arduino
- Circuito de potencia: Línea → Carga → ACS712 (terminales IP+ IP-) → Neutro
Código (Code_1.ino)
#define CURRENT_SENSOR A0
float i;
void setup() {
Serial.begin(9600);
pinMode(CURRENT_SENSOR, INPUT);
}
void loop() {
i = analogRead(CURRENT_SENSOR);
Serial.println(i);
delay(100); // Ajustar para ver forma de onda clara en Serial Plotter
}
Resultado: En Serial Plotter se ve senoide. Al bajar dimmer, la onda se distorsiona (corte de fase por triac).
Test 2: Método Pico a Pico (Solo Señal Senoidal)
Mismo cableado. Código Code_2.ino calcula pico a pico y aplica factor 0.3536 (√2/2 × 0.5) para RMS teórico de senoide. Funciona bien con dimmer al máximo (onda sinusoidal pura). Falla con dimmer bajo: mide 0.36A vs 0.21A real (multímetro TRMS), porque la onda ya no es senoidal.
Test 3: Cálculo TRMS Real (Cualquier Forma de Onda) – Librería Filters.h
La librería Filters.h implementa estadísticas en ventana deslizante (media, sigma/desviación estándar) para calcular valor eficaz real (TRMS) mediante cálculo integral discreto.
Código (Code_3.ino)
#include <Filters.h>
#define ACS_PIN A0
float testFrequency = 50;
float windowLength = 40.0 / testFrequency;
float intercept = 0; // Calibrar: offset a 0A
float slope = 0.0752; // Calibrar: factor de escala
float Amps_TRMS;
unsigned long printPeriod = 1000;
unsigned long previousMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(ACS_PIN, INPUT);
}
void loop() {
RunningStatistics inputStats;
inputStats.setWindowSecs(windowLength);
while (true) {
float ACS_Value = analogRead(ACS_PIN);
inputStats.input(ACS_Value);
if (millis() - previousMillis >= printPeriod) {
previousMillis = millis();
Amps_TRMS = intercept + slope * inputStats.sigma();
Serial.print("\t Amps: "); Serial.println(Amps_TRMS);
}
}
}
Calibración (Imprescindible)
- Sin carga (0A): observa
inputStats.sigma(). Si no es 0, ajustainterceptpara queAmps_TRMS = 0. - Carga conocida (ej. bombilla 75W a 230V → 0.326A teórico): mide
Amps_TRMSsin calibrar. Calculaslope = teórico / medido. - Actualiza
interceptyslopeen el código.
Test con Pantalla LCD u OLED
Mismo principio, salida a display. Código Code_ACS712_LCD.ino (usa LiquidCrystal_I2C.h) y Code_ACS712_OLED.ino (usa Adafruit_SSD1306.h + Adafruit_GFX.h).
- LCD I²C: Dirección típica 0x27 (escanear con I2C scanner). Pines: En=2, Rw=1, Rs=0, D4-D7=4-7.
- OLED 128x32: Dirección 0x3C, reset pin -1 (compartido).
Esquemáticos
- Wiring 1: Sensor standalone + Arduino (para Tests 1-3).
- Wiring_LCD: Añade LCD I²C (SDA→A4, SCL→A5 en UNO).
- Wiring_OLED: Añade OLED I²C (SDA→A4, SCL→A5).
Enlaces Útiles
- Librería Filters: GitHub (o enlace del autor)
- Librería OLED: Adafruit SSD1306, Adafruit GFX
- Librería LCD I²C: Descarga directa
- Proyecto complementario: Medición fácil de voltaje CA con Arduino y ZMPT101B
Proceso de manufactura
- Medición de la Calidad del Aire con OpenSensors: Guía para Arduino y Python
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- Facilitar la comunicación sordo‑ciego usando 1Sheeld y Arduino
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Integración del sensor de huella capacitivo DFRobot (ID809) con Arduino o ESP8266
- Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
- Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
- Anima tu Pez Billy Bass con Cualquier Fuente de Audio: Guía Paso a Paso
- Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet
- Sistema Radar Compacto con Arduino Nano, Sensor HC-SR04 y Pantalla 1.8"