Aviso

El foro está en modo de sólo lectura.

Error medición de corriente con sensor ACS712

Más
6 años 10 meses antes #477 por andoni64
Hola,

Estoy intentando de monitorizar el consumo de una bombilla AC mediante un sensor ACS712 de 30 amperios. El problema que tengo es que el valor que me devuelve arduino por la consola varia muy poco y no llego a entender porque.

Antes de encender la bombilla, la tensión de salida del modulo es 2,48 por lo que el valor que me devuelve es 0,13 amp..Una vez encendida la tensión fluctúa algo pero muy poco por lo que la corriente también fluctúa entre 0,13 y 0,18 amp. no entiendo porque el consumo no es mayor cuando pongo la bombilla, y empiezo a pensar que mi modulo esta roto...

Este es el código que he usado para mi proyecto:
/*
Measuring AC Current Using ACS712
*/
const int sensorIn = A0;
int mVperAmp = 185; // use 100 for 20A Module and 66 for 30A Module


double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;



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

void loop(){
 
 
 Voltage = getVPP();
 VRMS = (Voltage/2.0) *0.707; 
 AmpsRMS = (VRMS * 1000)/mVperAmp;
 Serial.print(AmpsRMS);
 Serial.println(" Amps RMS");

}

float getVPP()
{
  float result;
  
  int readValue;             //value read from the sensor
  int maxValue = 0;          // store max value here
  int minValue = 1024;          // store min value here
  
   uint32_t start_time = millis();
   while((millis()-start_time) < 1000) //sample for 1 Sec
   {
       readValue = analogRead(sensorIn);
       // see if you have a new maxValue
       if (readValue > maxValue) 
       {
           /*record the maximum sensor value*/
           maxValue = readValue;
       }
       if (readValue < minValue) 
       {
           /*record the maximum sensor value*/
           minValue = readValue;
       }
   }
   
   // Subtract min from max
   result = ((maxValue - minValue) * 5.0)/1024.0;
      
   return result;
 }
Más
6 años 10 meses antes #478 por Jose Luis
Un modulo de 30A, en un entorno real, la resolucion minima no creo que baje de 0.2 o 0.1. Y en la franja central, solo por el ruido, yo eliminaría todo lo que bajara de 0.3 A. Resumiendo, según mi opinión, un acs712 de 30 amperios, no esta pensado para medir una bombilla de 60w, ya que con el consumo tan pequeño y el ruido que suelen tener eses dispositivos, vas tener muchos problemas a la hora de medir.

Por ese motivos los hacen de 5, 20 y 30.

Un saludo.
Más
6 años 10 meses antes #480 por andoni64
Muchas gracias Jose Luis,

Compre un modulo ACS712 de 5 amperios para hacer la prueba, y como comentas ahora las medidas que me devuelve son mas logicas. Sin embargo la bombilla que estoy tratando de medir consume 80 mAmperios y aun introduciendo parámetros de ruido para filtrar por software el ruido en la linea las lecturas son de 50 mAmperios y oscilan notablemet, variando desde 30 hasta 50 mAmp.

¿Hay alguna forma de hacer mas precisa la medición?

Por cierto esta vez he usado esste codigo:

/*
Measuring AC Current Using ACS712
*/

float sensibilidad = 0.185; //5A = 185; 20A = 100; 30A = 66
float ruido = 0.070;	//filtro para eliminar ruido. 
const int sensorIntensidad = A0; //Pin donde conectamos sensor.
float valorReposo = 2.5097;
float intensidadPico = 0;
float tensionDeRed = 230.0;

void setup() {
	Serial.begin(9600);			//Iniciamos puerto serie.
}

void loop() {

	intensidadPico = leerCorriente();	//Leemos corriente.
	mostrarValores();
}

float leerCorriente() {

	float valorVoltajeSensor;
	float corriente = 0;
	long tiempo = millis();
	float intensidadMaxima = 0;
	float intensidadMinima = 0;

	while (millis() - tiempo < 500)//realizamos mediciones durante 0.5 segundos
	{
		valorVoltajeSensor = analogRead(sensorIntensidad)*(5.0 / 1023.0); //lectura del sensor en voltios
		corriente = 0.9*corriente + 0.1*((valorVoltajeSensor - valorReposo) / sensibilidad);//Ecucacion para obtener la corriente
		if (corriente > intensidadMaxima) intensidadMaxima = corriente;
		if (corriente < intensidadMinima) intensidadMinima = corriente;
	}
	return(((intensidadMaxima-intensidadMinima)/2)-ruido);
	
}

void mostrarValores() {

	float Irms = intensidadPico*0.707;
	Serial.print("Intensidad Pico:");
	Serial.print(intensidadPico, 3);
	Serial.print("A , Irms: ");
	Serial.print(Irms, 3);
	Serial.print("A. ");
	Serial.print("\n");

	delay(100);

}
[/color]
Más
6 años 10 meses antes #481 por Jose Luis
80mA no la vas poder medir de forma fiable., por culpa del ruido eléctrico, ya que 80mA esta en un rango muy muy bajo y cualquier perturbación eléctrica te generara ruido, y te dara faltas medidas. A veces te parecerá que mide bien y a veces, sin saber por que, veras que te da unos 50 o 75 mA de mas. Al menos esto en mis pruebas, puedes intentar filtrar antes de la medida, pero yo no creo que a este sensor le puedas sacar eses 50Ma que tu quieres de precisión.
Tiempo de carga de la página: 0.102 segundos
Gracias a Foro Kunena