Skip to content

An Arduino library that allows smoothing of a sensor input using various methods. Uses a template class to ensure sensor readings in any numerical data type can be handled. This makes it both lightweight and flexible.

License

Notifications You must be signed in to change notification settings

MattFryer/Smoothed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arduino IDE GitHub version GitHub Release Date GitHub download GitHub stars GitHub issues Codacy grade GitHub license

Smoothed

An Arduino library to store and smooth sensor inputs using various methods including:

  • a simple moving average of the last x sensor readings
  • a simple linear recursive exponential filter

Unlike many other smoothing/filtering libraries, Smoothed uses a template class to ensure sensor readings in any numerical data type can be handled. This makes it both lightweight and flexible.

How to Install

Smoothed can be installed from the Arduino IDE Library Manager. For more details on how to install libraries in the Arduino IDE, please see the Arduino website.

How to Use

A full example of using each smoothing method is provided with the library and can be found in the Arduino IDE under "File->Examples->Smoothed".

Firstly, you must include the library in your sketch:

#include <Smoothed.h>

Next, create an instance of the class defining what data type to use. The example below uses a type of float:

Smoothed <float> mySensor;

You can replace float with any numeric data type to suit your sensor readings and desired accuracy. See the included library example for a full list of supported data types.

Within the setup function, initialize the instance, defining the smoothing method and accuracy:

mySensor.begin(SMOOTHED_AVERAGE, 10);

In the above example we are using a simple average of the last 10 sensor readings.

And finally, write in a new sensor value and read the smoothed result:

// Read a sensor value from analogue pin 0
mySensor.add(analogRead(SENSOR_PIN));

// Output the smoothed sensor value to the serial
Serial.println(mySensor.get());

Planned Improvements/Changes

  1. Add a multi-sample method. Calls a passed function to obtain the sensor value x times and averages out.
  2. Add a Savitzky Golay filter.
  3. Add a running median filter. Best method to eliminate random spikes in an otherwise stable signal. Need to work out how to handle different data types. Rounding maybe??
  4. Publishing to the Arduino IDE Library list.

About

An Arduino library that allows smoothing of a sensor input using various methods. Uses a template class to ensure sensor readings in any numerical data type can be handled. This makes it both lightweight and flexible.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages