Eliminar valores desviados

Buenos dias, nuevamente recurro a vosotros con un problema.
La cuestion es la siguiente, tomo 30 medidas de un sensor para hacer la media y que la medida sea estable.

La cuestion es que el sensor es un sensor barato y de vez en cuando toma medidas que se van mucho de la medida y por tanto me arruina la media.

Os pongo el codigo y dos ejemplos:

void cal_media (void){
  media_calculada=0;
  for (Medida_actual =0; Medida_actual < Num_muestras; Medida_actual++)
  {
     Medidas[Medida_actual]=analogRead(A12);
     delay(30);
     Serial.println(Medidas[Medida_actual]);
     media = media + Medidas[Medida_actual];
  } 
     media = media/Num_muestras;
     Serial.print("Media =");
     Serial.println(media);

if (media<120){
  media=120.0;  // haciendo esto ignoramos los valores de fondo de escalar perdidos
}

     media_calculada = (4203.86*pow(media,-1.017)); //calculo en centimetros
     media_calculada = media_calculada*10; // lo paso a milimetros 
     Serial.println(media_calculada,8);

}

407.00
410.00
407.00
407.00
407.00
407.00
406.00
408.00
407.00
416.00
410.00
407.00
408.00
407.00
406.00
408.00
406.00
410.00
408.00
407.00
406.00
406.00
407.00
407.00
409.00
419.00
419.00
409.00
409.00
407.00
Media =408.57
92.89539337

406.00
406.00
405.00
406.00
406.00
406.00
407.00
406.00
407.00
408.00
407.00
408.00
407.00
406.00
418.00
407.00
408.00
407.00
409.00
405.00
405.00
408.00
406.00
407.00
407.00
407.00
407.00
408.00
406.00
418.00
Media =421.09
90.08732604

Como veis en el primer caso me aparecen dos valores de 419 que evidentemente no estan bien
y en el segundo aparecen un 418.

La idea es eliminar esos valores y calcular la media con el numero de valores que quede.

¿Pero como los cazo? Alguna idea

No se que estas midiendo, pero si sabes que no es posible que de un salto de 10 (o otro valor) respecto a la lectura anterior pues simplemente lo ignoras y puedes usar el valor anterior correcto para que no afecte a la media

Yo usaría un promedio móbil (ver promedio mobil Luis Llamas) y en todo caso no agregaría la nueva muestra si tuviera un dispersión determinada.
Ese sería un camino estadisticamente mas adecuado que descartar porque si.

Buenos días. Pues estoy midiendo la distancia hasta un objeto. El tema es que supongo que la medida es mala ya que difiere mucho del resto, simplemente por lógica. La pieza se mueve y mido otro punto. Entonces en cada punto tengo una serie de treinta valores que son la distancia del sensor a la pieza. Esta va en algunos puntos desde 800 aprox a 100 en otros. Dependiendo de la distancia

No se porque el sensor falla algunas medidas y eso es lo que me los un poco. Se supone que como mucho tarda 27ms entre medidas. Por eso yo le doy 30ms. Veremos lo que has puesto surbyte. Gracias

Algo vi pero he pensado quizás en ordenar valores y luego hacer un diferencial primero con segundo. Segundo con tercero...... Y si están en +-1 por ejemplo lo doy por bueno y sino me planteo descartarlo

Hola a mi me paso algo parecido en mi trabajo... Un sensor jodiendo asi en una maquina...la maquina no trabaja con arduino claro trabaja con un PLC pero ta la falla era parecida por eso dejo este comentario.

La solucion que encontre fue poner un trozo de papel celofan frente al sensor como filtro de luz y calibrar los valores despues xq cambian. Comento por las dudas que te sirva de algo...

Es bueno el dato de danielzubelza, porque luce mas como una posible perturbación que un fallo del sensor.
Los sensores pueden tener problemas de repetición pero no hacen mediciones tan dispares a menos que exista una verdadera perturbación. Apunta a lo sugerido por danielzubelza a ver que resulta.

Lo probaremos para ver qué sucede es una posible solución y además barata.