1. Du er her:  
  2. Hjem
  3. Arduino
  4. Viktige prinsipper
  5. Glidende gjennomsnitt
Lilleholt.no
  • Hjem
  • Lenker
  • Webkamera
  • Målestasjoner
  • Arduino
    • Kom i gang
      • Hva er Arduino
      • Flere Arduino-versjoner og utbygging
      • Installere Arduino IDE og drivere
      • Utviklingsmiljøet Arduino IDE
    • Hello World
      • Det første programmet
      • Programmet, bit for bit
    • Programmering av Arduino
      • Variabler
      • Operatorer
      • Valg-setninger
      • Løkker
      • Funksjoner
    • Viktige prinsipper
      • Skrive digitale verdier
      • Lese digitale verdier
      • Lese analoge verdier
      • Skrive analoge verdier
      • Serial Monitor
      • Serial plotter
      • Glidende gjennomsnitt
      • Tilstandsmaskin
      • Bitfikling og registere
    • Tilkobling av komponenter og moduler
      • Ultralydsensor HC-SR04
      • LCD-display
      • DHT22
      • LED-ring med WS2812B RGB-lysdioder
      • Opp- og utlading av kondensator
    • Introduksjon til objektorientering og klasser
    • Internet of Things - et lite eksempel
    • Generell elektronikk
  • Planteblogg
  • Logg inn

Glidende gjennomsnitt

Dette er et eksempel på kode for å lage et glidende gjennomsnitt av måleverdier. Dette kan være nyttig hvis du har sensorer som ikke er veldig nøyaktig, hvis du skal bruke verdiene til å styre noe annet som du ikke vil skal ha så "brå" bevegelser, eller hvis du bare vil ha ekstra fine grafer.

Eksempelet bruker ultralydsensoren HC-SR04, som vi har beskrevet på en annen side. Biblioteket som er brukt heter "Ultrasonic Simple",  skrevet av Erick Simões. Har fjernet de fleste kommentarer for å spare litt plass.

Måleverdiene lagres i et array med en størrelse definert av "antallVerdier". Biblioteket returnerer målinger i antall cm, så vi har brukt heltallsverdier over alt.

Verdiene skrives til serieporten, og både den "momentane" avstanden og gjennomsnittet skrives ut. Hvis du bruker Serial Plotter vil du derfor få opp en kurve for hver av disse.

/* * Basert på eksempel fra biblioteket Ultrasonic Simple av Erick Simões * */
#include <Ultrasonic.h>

#define antallVerdier 10

Ultrasonic ultrasonic(12, 13); // Trigger-pinne 12 og Echo-pinne 13
int avstand;

void setup() {
Serial.begin(9600);
pinMode(8,OUTPUT);
digitalWrite(8,LOW);
}

int verdier[antallVerdier];
long teller=0;
int sum, snitt;
void loop() {
avstand = ultrasonic.read();
//Her lager vi et "glidende gjennomsnitt" av verdiene
verdier[teller%antallVerdier]=avstand;
if(teller>=antallVerdier){
sum=0;
for(int x=0;x<antallVerdier;x++) sum+=verdier[x];
snitt=sum/antallVerdier;
}
teller++;
// Serial.print("Avstand i CM: ");
Serial.print(avstand); //Den siste målte avstanden
Serial.print(",");
Serial.println(snitt); //Gjennomsnittet
if(avstand<50) {
digitalWrite(8,HIGH);
delay(avstand*4);
digitalWrite(8,LOW);
}
delay(100);
}

 

Detaljer
Skrevet av: Per Sigbjørn
Kategori: Glidende gjennomsnitt
Sist oppdatert 15. oktober 2024
Treff: 3729

Søk


Avansert søk