Julkaistu

Arduino ADC Suodatin

img

Arduino kirjasto lukujen suodattamiseen.

Kuinka suodatin toimii?

Tässä suodattimessa on juokseva keskiarvoistus raaka arvoille ADC:stä ja exponential smoothing raaka arvojen summan keskiarvolle.

Visuaaliset arvot suodattimesta

Muutamia kuvia kuinka hyvin suodatin suoriutuu.

Testissä minulla on lineaarinen hall-effect sensori (A1324) 4.7uF erotuskondensaattorilla ja Arduino nano. Uusi arvo printataan joka 10ms (115200 baud rate). Sininen viiva on korkein arvo ja punainen on alin saatu arvo Arduinosta.

Muista että sinun tulokset voivat olla erilaiset.

Raaka

img

Tässä käyrässä on raaka arvot ilman suodatinta. Arvo vaihtelee 793-791 välillä, joten erotus on 2.

Exponential smoothing alpha = 0.9

img

Arvo vaihtelee ~791.65-790.65 välillä, joten erotus on 1.

Exponential smoothing alpha = 0.1

Arvo vaihtelee ~791.3-790.8 välillä, joten erotus on 0.5.

img

Esimerkki

C++
#include <ADCFilter.h>

#define ANALOG_PIN A0
#define MS 10

//Filter has 16 channels and 6 samples by default
//To change channel count and sample count edit ADCFilter.h file
ADCFilter filter;

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

    //Alpha must be 0 < a < 1, default value is 0.1
    //The lower alpha value, the higher smoothing
    //This is not required but, to set new alpha value use:
    filter.setAlpha(0.2f);
}

void loop() {
    //Update channel 0 with new value
    filter.update(0, analogRead(ANALOG_PIN));
    //Get smoothed value from channel 0 and print it
    Serial.println(filter.get(0));

    delay(MS);
}