Promedio de lecturas

Buenas amigos de Arduino

Tengo generador de viento y estoy haciendo un medidor de corriente directa, tengo un sensor de corriente y lee cada segundo. y ahora lo que me gustaria hacer es un promedio cada minuto de cuanta corriente produce; estoy usando el codigo de abajo pero el resultado esta raropara la corriente y el promedio me da:

Current = 0.56
Average = 0

saludos…

int calVal = 511;
int mVpA = 66;
const int numReadings = 10; 

int readings[numReadings]; // Lecturas de la entrada analogica 
int index = 0; // El indice de la lectura actual 
int total = 0; // Total 
int average = 0; // Promedio 

int inputPin = A5; 
void setup () {

  Serial.begin(9600);
  // Iniciamos todas las lecturas a la entrada 0 
for (int thisReading = 0; thisReading < numReadings; thisReading++) 
readings[thisReading] = 0; 
}

void loop(){

  int val = analogRead(A5);
  int valAdj = val - calVal;
  float milliVolts = ((valAdj * 5.00) / 1024) * 1000;
  float Amps = milliVolts / 61;
  //Serial.println(val);
  //Serial.println(milliVolts);
  Serial.print("Current = ");
  Serial.println(Amps);
  //delay(1000);


  // Restamos la ultima lectura: 
total= total - readings[index]; 
// Leemos del sensor: 
readings[index] = Amps; 
// Añadimos la lectura al total: 
total= total + readings[index]; 
// Avanzamos a la proxima posicion del array 
index = index + 1; 

// Si estamos en el final del array... 
if (index >= numReadings) 
// ...volvemos al inicio: 
index = 0; 

// Calculamos el promedio: 
average = total / numReadings; 
// Lo mandamos a la PC como un valor ASCII 
  Serial.print("Average = ");
  Serial.println(average); 
delay(10000);
}

Movido a Software.

Corregido

int calVal            = 511;
int mVpA              = 66;
const int numReadings = 10; 

int index             = 0; // El indice de la lectura actual 
float readings[numReadings]; // Lecturas de la entrada analogica 
float total           = 0.0; // Total 
float average         = 0.0; // Promedio 

int inputPin          = A5; 

void setup () {
  Serial.begin(9600);
  // Iniciamos todas las lecturas a la entrada 0 
  for (int thisReading = 0; thisReading < numReadings; thisReading++) 
      readings[thisReading] = 0; 
}

void loop(){

  int val = analogRead(A5);
  val = 700;
  int valAdj = val - calVal;
  float milliVolts = ((valAdj * 5.00) / 1024) * 1000;
  float Amps = milliVolts / 61;
  //Serial.println(val);
  //Serial.println(milliVolts);
  Serial.print("Current = ");
  Serial.print(Amps);
  //delay(1000);


  // Restamos la ultima lectura: 
  total = total - readings[index]; 
  // Leemos del sensor: 
  readings[index] = Amps; 
  // Añadimos la lectura al total: 
  total = total + readings[index]; 
  // Avanzamos a la proxima posicion del array 
  index = index + 1; 
  // Si estamos en el final del array... 
  if (index >= numReadings) 
     index = 0;   // ...volvemos al inicio: 

  // Calculamos el promedio: 
  average = total / numReadings; 
  // Lo mandamos a la PC como un valor ASCII 
  Serial.print(" Average = ");
  Serial.println(average); 
  delay(1000);
}
2 Likes