Medir intensidad y consumo eléctrico con Arduino y ACS712


¿Qué es el ACS712?

El ACS712 es un sensor de corriente tanto alterna como continua, que permite medir la intensidad eléctrica que atraviesa un conductor. Podemos emplear el ACS712 junto con un procesador como Arduino para medir la intensidad o potencia consumida por una carga.

Internamente el ACS712 consiste en un sensor hall de precisión y bajo offset junto con un canal de conducción localizado cerca de la superficie del integrado. Cuando la corriente fluye por el canal de cobre genera un campo magnético que es detectado por el sensor Hall y es convertido en una tensión.

La salida del sensor es una tensión proporcional a la corriente, y altamente independiente de la temperatura. El sensor viene calibrado desde fábrica, aunque para una medición de precisión hará falta un ajuste de la calibración.

El camino conductor está aislado galvánicamente del IC garantizado un mínimo 2.1 kVRMS Su resistencia es muy baja, 1.2 mO, lo que se traduce en pequeñas pérdidas.

Existen modelos para rangos de 5A, 20A, 30A. El sensor soporta corrientes hasta 5x el rango de medición del sensor. Sobrepasar el límite dañara el ACS712.

La mayor desventaja del ACS712 es que es un sensor intrusivo, es decir, es necesario insertarlo en un conductor lo cual puede suponer que tengamos que cortar un cable. Es una gran desventaja frente a sensores no intrusivos como el transformador de intensidad STC-013.

Aplicaciones típicas del ACS712 incluyen control de motores, control de cargas, fuentes de alimentación, y protecciones contra sobretensiones.

Nosotros podemos usarlo en nuestros proyectos de electrónica casera y Arduino, por ejemplo, para medir la intensidad que alimenta una carga, para medir su consumo, o como protección de dispositivos tales como motores.

Precio

El ACS712 es un sensor barato. Podemos encontrar módulos con el ACS712 en sus distintas versiones 5A, 20A y 30A, preparados para conectar de forma sencilla con Arudino, por 1.25€ en vendedores internacionales de eBay o AliExpress.

Esquema de montaje

Los módulos con el ACS712 son muy sencillos de conectar. Precisamente esta es una de sus grandes ventajas. Al ACS712 proporciona una salida de tensión proporcional a la intensidad que atraviesa el sensor.

Por tanto, simplemente alimentamos el módulo conectando Gnd y Vcc, respectivamente, a Gnd y 5V en Arduino, y conectamos la salida del sensor a una entrada analógica de Arduino.

Mientras que la conexión, vista desde Arduino, sería la siguiente.

Ejemplos de código

Como hemos comentado, la tensión en la salida del ACS712 es proporcional a la intensidad que atraviesa sensor. Se incluye un offset de 2.5V de forma que la referencia está centrada, lo que permite medir intensidades positivas y negativas.

V = 2.5 + K \cdot I \Rightarrow I = (V - 2.5) / K

El factor de proporcionalidad y la resolución dependen del modelo del sensor, para rango de 5A, 20 y 30.

Max IntensidadSensibilidadTensión salidaResolucion
±5A185 mV/A1,575V a 3,425V26mA
±20A100 mV/A0,5V a 4,5V49mA
±30A66 mV/A0,52V a 4,48V74mA

El siguiente código realiza la medición de la corriente mediante el ACS712. Para reducir el ruido de la medición, se realizan varias mediciones y se calcula el promedio.

// Sensibilidad del sensor en V/A
float SENSIBILITY = 0.185;   // Modelo 5A
//float SENSIBILITY = 0.100; // Modelo 20A
//float SENSIBILITY = 0.066; // Modelo 30A

int SAMPLESNUMBER = 100;

void setup() 
{
	Serial.begin(9600);
}

void printMeasure(String prefix, float value, String postfix)
{
	Serial.print(prefix);
	Serial.print(value, 3);
	Serial.println(postfix);
}

void loop()
{
	float current = getCorriente(SAMPLESNUMBER);
	float currentRMS = 0.707 * current;
	float power = 230.0 * currentRMS;

	printMeasure("Intensidad: ", current, "A ,");
	printMeasure("Irms: ", currentRMS, "A ,");
	printMeasure("Potencia: ", power, "W");
	delay(1000);
}

float getCorriente(int samplesNumber)
{
	float voltage;
	float corrienteSum = 0;
	for (int i = 0; i < samplesNumber; i++)
	{
		voltage = analogRead(A0) * 5.0 / 1023.0;
		corrienteSum += (voltage - 2.5) / SENSIBILITY;
	}
	return(corrienteSum / samplesNumber);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección
tutoriales de Arduino
5 4 votes
Article Rating
Previous Detector de cruce por cero con Arduino y optoacoplador H11AA1
Next Sensor de corriente eléctrica no invasivo con Arduino y SCT-013
12 Comments
oldest
newest
Inline Feedbacks
View all comments
ed
4 years ago

Hola Luis. Gracias por todos estos ejemplos que estas poniendo, haciendo uso de los sensores mas comunes. Tengo un pregunta. Para un proyecto necesitaria medir cuando fluye corriente, no me importa la intensidad. Prefiero una solucion no intrusiva, pero como necesito cuando flute corriente en varios puntos, una solucion que usa la SCT013 sale cara. Hay alguna solucion "casera" que se puede emplear? Pienso por ejemplo en dar unas vueltas al cable que lleva corriente, esperando ver un debil corriente inducido en el cable que uso para las vueltas, y medir eso... Se te ocurre algo mas (seguro) elegante?

luisllamas
4 years ago

Hola. Para ese tipo de montajes normalmente se emplea un sensor de corriente no invasivo, como el STC-013, transformadores de corriente con el núcleo partido que permiten medir la intensidad en un conductor sin tener que cortarlo.
Échale un vistazo a esta entrada https://www.luisllamas.es/arduino-sensor-corriente-stc-013/

luisllamas
3 years ago

Hola Juan, Lo normal en este caso es emplear un sensor no intrusivo como el SCT-013 (un transformador de corriente) https://www.luisllamas.es/arduino-sensor-corriente-sct-013 Para la potencia, deberías saber el voltaje. Como no me gusta mezclar sensores en las entradas sobre un determinado dispositivo (para no liar conceptos) hacemos tripas corazón y asumimos la tensión de red nominal, que es de 230V. Afortunadamente, los señores de la red eléctrica están encargados de mantener este valor con bastante precisión (+-10%) por lo que es asumible para este ejemplo. Y, a una mala, siempre puede medir con un polímetro y sustituir los 230V por la… Read more »

Agustin
3 years ago

Hola Luis. Muchas gracias por el ejemplo, me ha ayudado muchísimo en entender este shield. Te hago una consulta al respecto, ¿Cómo hago yo para determinar el modelo de mi ACS712? Además de esta pregunta quería saber también si puedo utilizar los otros valores de sensibilidad independiente del modelo de mi Shield. Desde ya, muchas gracias!

Mario
3 years ago

Estoy buscando un sensor para medir con arduino corriente continua entre 90V y 110V

¿Algo que se ajuste a estas características?

Leonardo
3 years ago

Hola consulta como puedo utilizar ese sensor para medir corriente con un ESP8266. Reduje la tension con un divisor (1k, 4.7k) pero en el codigo no sé que modificar.

José Grillo
2 years ago

Hola Luis, gracias por tus invaluables publicaciones, en el control de motores, más precisamente en el arranque o puesta en marcha bajo carga en el que momentáneamente se dispara el amperaje hast 7 veces la intensidad de consumo de funcionamiento, que sucede con este sensor??? Se daña??? lo soporta o no aplica??? Gracias por la atención prestada.
Saludos. PP Grillo

Ranganok Schahzaman
1 year ago

Hola,

Aunque el chip tiene un aislamiento de 2000V, la PCB no (el GND está por toda la PCB con una separación entre pistas muy pequeña); así que os la jugáis si metéisuna tensión mayor de 50V (con respecto a GND) por las pistas de medida de corriente.

S2

Ranganok Schahzaman

Miguel
4 months ago

ACS 712 30A. ¿Realmente pueden circular hasta 30A dc de forma continua?.
Por el tamaño de las pistas, como están las soldaduras y la regleta que tiene el sensor (al menos los que tengo yo), no creo que aguante mucho tiempo con 25 A o 30A, antes de quemarse algo.
Mi impresión es que las secciones son pequeñas y se trabajan con densidades de corriente muy elevadas.

Fernando
4 months ago

Hola Luis, Muy claro y útil tu artículo sobre el sensor ACS712 para su uso con arduino. Te consulto un problema que tengo yo. He conectado un ACS pero por algún motivo no mide nada. Siempre me da los 2'5 voltios (más conretamente 512 porque muestro el valor directo del sensor) Eso cuando no circula corriente, es decir con los terminales de medida del ACS al aire. Hasta ahí, bien. Es lo que debe pasar. Luego monto un sencillo circuito con una resistencia de 220 ohmios,un led (para comprobar que efectivamente circula corriente) y un potenciómetro en serie. El potenciomtro… Read more »

Ruben
2 months ago

Hola, los módulos que he recibido marcan 80 mA sin tener corriente, con sus entradas cortocircuitadas. ¿Es posible ajustarlos físicamente o he de hacer un ajuste vía software?

saludos