diagramaMedirIntensidad-1024x561-41a8ece2

La App Makers

ACS712 es un sensor de corriente tanto de alterna como de continua, internamente trabaja con un sensor de efecto Hall que detecta el campo magnético que se produce por inducción de la corriente que circula por la línea que se está midiendo. El sensor nos entrega una salida de voltaje proporcional a la corriente, dependiendo la aplicación podemos usar el ACS712-05A, ACS712-20A o el ACS712-30A, para rangos de 5, 20 o 30 amperios.

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 ACS712 podemos encontrarlo en módulos, los cuales nos facilitan sus conexión, traen una bornera para conectar la línea que queremos medir y tres pines, dos para conectar la alimentación y un pin para la salida analógica. Al ser salida analógica, las conexiones tienen que estar soldadas y ser un cable de buena calidad para que no pierda precisión en la medició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.

El punto en contra de este modulo 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.

El rango de corriente que podemos medir y sensibilidad varían dependiendo del modelo del integrado, existen tres modelos los cuales detallamos a continuación:

Modelo

Rango

Sensibilidad

ACS712ELCTR-05B-T

-5 a 5 A

185 mV/A

ACS712ELCTR-20A-T

-20 a 20 A

100 mV/A

ACS712ELCTR-30A-T

-30 a 30 A

66 mV/A

Conexiones:

Para esto,  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.

y el esquema general sería:

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

Este sensor nos entrega un valor de 2.5 voltios para una corriente de 0A y a partir de allí incrementa proporcionalmente de acuerdo a la sensibilidad, teniendo una relación lineal entre la salida de voltaje del sensor y la corriente.
Dicha relación es una línea recta en una gráfica Voltaje vs Corriente donde la pendiente es la sensibilidad y la intersección en el eje Y es 2.5 voltios. La ecuación de la recta seria la siguiente

ecuacion V vs I en ACS712

Donde la pendiente es m y equivale a la Sensibilidad

Despejando tendremos la ecuación para hallar la corriente a partir de la lectura del sensor:

ecuacion para la corriente ACS712

Con esta ecuación podemos pasar a programar sketch con Arduino.

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

Max Intensidad Sensibilidad Tensión salida Resolución
±5A 185 mV/A 1,575V a 3,425V 26mA
±20A 100 mV/A 0,5V a 4,5V 49mA
±30A 66 mV/A 0,52V a 4,48V 74mA

Para realizar la lectura de corriente simplemente se necesita leer la entrada analógica y con la formula antes expuesta obtener la corriente.

voltage = analogRead(A0) * 5.0 / 1023.0; 
corrienteSum += (voltage - 2.5) / Sensibilidad;

Más muestras se tome , se va obtener una mejor precisión de la lectura.

Código:

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. Más muestras se tomen será más preciso. En este caso tomamos 100 muestras.

En nuestro caso estamos trabajando con un sensor de 5A por eso usamos el valor de sensibilidad de 0.185V/A que es el equivalente 185mV/A que nos da el fabricante, si están trabajando con el sensor de 20A, reemplazar el valor de la sensibilidad por 0.100 V/A.

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

int nroMuestras = 100;

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

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

void loop()
{
  float current = obtenerCorriente(nroMuestras);
  float currentRMS = 0.707 * current;
  float power = 230.0 * currentRMS;

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

float obtenerCorriente(int nroMuestras)
{
  float voltage;
  float corrienteSum = 0;
  for (int i = 0; i < nroMuestras; i++)
  {
    voltage = analogRead(A0) * 5.0 / 1023.0;
    corrienteSum += (voltage - 2.5) / Sensibilidad;
  }
  return(corrienteSum / nroMuestras);
}
  • Tutorial
  • Arduino
2 Comentarios
  1. German
    German 3 días

    Es más de mi agrado el transformador de intensidad STC-013, para esa tarea.

    0
  2. peter
    peter 21 horas

    Bien explicado

    0

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos. Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Nuevo informe

Cerrar

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account