Warning: Array to string conversion in /home/electro2/public_html/wp-content/themes/orbital/inc/orbital-minifier.php on line 67

Warning: Array to string conversion in /home/electro2/public_html/wp-content/themes/orbital/inc/orbital-minifier.php on line 67

Warning: Array to string conversion in /home/electro2/public_html/wp-content/themes/orbital/inc/orbital-minifier.php on line 67
Saltar al contenido
Blog Arduino, LabVIEW y Electrónica

Sensor de Corriente ACS712 con Arduino

sensor de corriente Allergo ACS712

¿Qué es el sensor de corriente Allergo ACS712?

EL ACS712 conforma la familia de módulos de Arduino, es un medidor de corriente que puede funcionar para tener valores de CA como de CD. Dentro de su circuito podemos observar que consiste en un sensor HALL de precisión, el cuál cuenta con un desfase muy bajo, además de un canal de conducción localizado en la parte superior del módulo, de manera que cuando fluye corriente por el canal de cobre, se genera un campo magnético que es percibido por el sensor Hall, el cual a su vez convierte esta energía en voltaje.

sensor de corriente Allergo ACS712

 La salida que proporciona el sensor, es directamente proporcional a la corriente, y no se encuentra afectada por la temperatura. Es necesario la calibración del sensor para evitar desfase o valores incorrectos. La resistencia del circuito es muy baja, por lo que contamos con unas pérdidas mínimas, de hecho su desfase se puede contemplar hasta un máximo del 5%.

 

Funcionamiento de Sensor de Corriente Allegro ACS712

El sensor de corriente Allergo ACS712 se basa en el principio del efecto Hall, que fue descubierto por el Dr. Edwin Hall en 1879. De acuerdo con este principio, cuando un conductor que transporta corriente se produce un campo magnético y por consecuencia se genera un voltaje a través de sus bordes que es perpendicular a las direcciones de la corriente y el campo magnético.

En la siguiente imagen podemos observar este efecto. En una lámina delgada de material semiconductor (llamado elemento Hall) se transporta una corriente (I) y se coloca en un campo magnético (B) que es perpendicular a la dirección del flujo de corriente. 

SENSOR DE CORRIENTE ACS712

Debido a la presencia de la fuerza de Lorentz, la distribución de la corriente no es uniforme en todo el elemento Hall y, por lo tanto, se crea una diferencia de potencial en sus bordes perpendicular a las direcciones de la corriente y el campo. Este voltaje se conoce como voltaje Hall y su valor típico es del orden de unos pocos microvoltios. El voltaje Hall es directamente proporcional a las magnitudes de I y B. Por lo tanto, si se conoce uno de ellos (I y B), entonces el voltaje Hall observado se puede usar para estimar el otro.

Aplicaciones

Sus principales aplicaciones pueden ser para control de motores, control de intensidad de carga, en fuentes de alimentación reguladas, circuitos para aumentar el rendimiento y protección contra picos de voltaje.

ACS712 se utiliza en muchas aplicaciones industriales, comerciales y de comunicación. Este  es aplicable para automóviles. Algunas de las aplicaciones típicas de este  se pueden encontrar en circuitos de control de motores, para detección y gestión de carga y en circuitos de protección contra fallas de sobrecorriente.

sensor de corriente Allegro ACS712

Video De Arduino – Sensor de Corriente ACS712-30A

 

Información técnica de ACS712

  • Salida análoga de 100mV/A
  • Sensibilidad: 66 mV/A
  • Resistencia interna: 1.2 mO
  • Modelo: ACS712ELCTR-30A-T
  • Rango: -30 a 30 A
  • Indicador LED
  • Mínimo voltaje de aislamiento entre pines 1-4 a pines 5-8: 2.1 kVRM

Circuito de Prueba

Para comenzar se va a usar un Arduino uno, un LCD 16×2, un Amperímetro (sólo si quieres comprobar que funciona el módulo), y una fuente que suministre energía al cicuito*.

*La selección de la fuente es dependiendo de la corriente que vas a medir, no se puede exceder el máximo amperaje permitido del módulo por que puede llegar a soportar hasta 5 veces su máximo de corriente , pero sólo en un pico de no más de 100 milisegundos. Si se te excede la corriente se daña el sensor y también tu fuente.

Esta práctica tiene la función de Medir la corriente alterna. Las pruebas se realizarán en una bombilla incandescente, controlada por un atenuador de luz en serie con un multímetro de referencia y el módulo del sensor de corriente ACS712.

Diagrama de Conexión:

Diagrama de conexión sensor

#include <Filters.h>              //This library does a huge work check its .cpp file
#include <LiquidCrystal_I2C.h>    //LCD ic library


#define ACS_Pin A0              //ACS712 data pin

#define I2C_ADDR 0x27 //I2C adress, you should use the code to scan the adress first (0x27) here
#define BACKLIGHT_PIN 3 // Declaring LCD Pins
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); //Declaring the lcd


float testFrequency = 50;                     // test signal frequency (Hz)
float windowLength = 40.0/testFrequency;     // how long to average the signal, for statistist

float intercept = 0; // to be adjusted based on calibration testing
float slope = 0.0752; // to be adjusted based on calibration testing
                      //Please check the ACS712 Tutorial video by SurtrTech to see how to get them because it depends on your sensor, or look below

float Amps_TRMS; 
float ACS_Value;

unsigned long printPeriod = 1000; 
unsigned long previousMillis = 0;



void setup() {
  digitalWrite(2,HIGH);
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH); //Lighting backlight
  lcd.home ();
  

}

void loop() {
  RunningStatistics inputStats;                 // create statistics to look at the raw test signal
  inputStats.setWindowSecs( windowLength );
   
  while( true ) {   
    ACS_Value = analogRead(ACS_Pin);  // read the analog in value:
    inputStats.input(ACS_Value);  // log to Stats function
        
    if((unsigned long)(millis() - previousMillis) >= printPeriod) { //every second we do the calculation
      previousMillis = millis();   // update time
      
      Amps_TRMS = intercept + slope * inputStats.sigma();  //Calibrate the values
      lcd.clear();               //clear the lcd and print in a certain position
      lcd.setCursor(2,0);
      lcd.print(Amps_TRMS);
      lcd.print(" A");

    }
  }
}