Buenas a todos!
Estoy escribiendo el código para una estación meteorológica. El caso es que necesito aplicar un filtro de media móvil para eliminar en la medida de lo posible los valores atípicos tanto en las tomas de temperatura como en las de humedad. El problema viene en que no acabo de entender muy bien qué es lo que me devuelve el filtro pues esperaba que me devolviese una media aproximada de los valores que se iban obteniendo tamto de la humedad como de la temperatura pero el resultado que obtengo no sé cómo interpretarlo.
Os muestro el código que tengo hasta ahora.
#include <DHT.h>
#define PIN_DHT_DATA 2
int sensorValue=0;
float sensorValueMedio;
DHT _dht(PIN_DHT_DATA,DHT11);
void setup() {
-
// put your setup code here, to run once:*
-
Serial.begin(9600);*
-
_dht.begin();*
}
/*
float RECTA (float x, float x0, float y0, float x1, float y1)
{
float y;
y= ((x-x0)/(x1-x0)) (y1-y0)+y0; _
return y;
}
_/
void loop() { -
// put your main code here, to run repeatedly:*
-
char txt[80];*
-
float h,t;*
-
float valor;*
-
h = _dht.readHumidity();*
-
t = _dht.readTemperature();*
-
strcpy(txt,"READING DHT11, ");*
-
if (! isnan(h))*
-
strcat(txt,"Humedad: "); dtostrf(h,6,1,txt+strlen(txt));*
-
if (! isnan(t))*
-
strcat(txt,", Temperatura: "); dtostrf(t,6,1,txt+strlen(txt));*
-
Serial.println(txt);*
-
sensorValue = analogRead(PIN_DHT_DATA);*
-
//valor=RECTA(sensorValue,0,0, 1023, 5000);*
_ sensorValueMedio=sensorValueMedio * 0.95 + sensorValue *0.05 ; // 0.95 + 0.05 =1_ -
Serial.print("Segnale = ");*
-
Serial.print(sensorValue);*
-
Serial.print("\t");*
-
Serial.print("medio = ");*
-
Serial.println(sensorValueMedio);*
-
delay(500);*
}
Como se puede ver en los resultados el ruido parece aumentar según aumenta también el número de valores almacenados.
La función RECTA fue un intento de lograr un valor medio del filtro lo más parecido al valor de la temperatura en grados.
PD: comento que no tengo demasiada idea del tema e igual mis expresiones no son de lo más correctas.