Sie können dies mit einem Tiefpassfilter digital filtern:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Ändern Sie 0,99, um die Grenzfrequenz zu ändern (näher an 1,0 liegt die niedrigere Frequenz). Der tatsächliche Ausdruck für diesen Wert ist exp (-2 * pi * f / fs), wobei f die gewünschte Grenzfrequenz und fs die Frequenz ist, mit der die Daten abgetastet werden.
Ein anderer Typ eines "digitalen Filters" ist ein Ereignisfilter. Es funktioniert gut bei Daten mit Ausreißern. zB 9,9,8,10,9,25,9. Ein Ereignisfilter gibt den häufigsten Wert zurück. Statistisch gesehen ist dies der Modus.
Statistische Mittelwerte wie Mittelwert, Modus usw. können mithilfe der Arduino Average Library berechnet werden .
Ein Beispiel aus der Arduino-Bibliothek bezieht sich auf:
#include <Average.h>
#define CNT 600
int d[CNT];
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i;
for(i=0; i<CNT; i++)
{
d[i] = random(500);
}
Serial.print("Mean: ");
Serial.print(mean(d,CNT),DEC);
Serial.print(" Mode: ");
Serial.print(mode(d,CNT),DEC);
Serial.print(" Max: ");
Serial.print(maximum(d,CNT),DEC);
Serial.print(" Min: ");
Serial.print(minimum(d,CNT),DEC);
Serial.print(" Standard deviation: ");
Serial.print(stddev(d,CNT),4);
Serial.println("");
Serial.println("");
delay(5000);
}