Arduino 串口过滤库


Arduino 的串口过滤库可以帮助您对任何传入数据应用一些低通滤波器和中值滤波器,从而为您提供过滤后的输出。该库的 GitHub 仓库可以在这里找到这里,并且内容非常详细。

要安装该库,请从 GitHub 下载源代码,并将“Filter”文件夹放置在 Arduino 的 libraries 文件夹中(在 Windows 上,路径通常为:C:/Users/<YourUserName>/Documents/Arduino/libraries

完成此操作后,在 Arduino IDE 中,打开文件→示例→Filter,并选择您选择的示例(例如firFilter

如您所见,代码非常简单。

#include <firFilter.h>

firFilter Filter;

int value;
int filtered;

void setup()
{
   Serial.begin(115200);
   Filter.begin();
}

void loop()
{
   value = analogRead(A0);
   filtered= Filter.run(value);
   Serial.print("In: ");
   Serial.print(value);
   Serial.print(" - Out: ");
   Serial.println(filtered);
   delay(100);                // make it readable
}

它获取传入的analogRead值,对其应用滤波器,并返回输出值。

事实上,如果您没有可用的模拟源,我们可以使用random()函数测试滤波器。请查看下面的修改后的示例 -

#include <firFilter.h>

firFilter Filter;

int value;
int filtered;
int x = 0;

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

void loop()
{
   value = (sin(x*3.14/180) + random(100)*1.0/50)*100.0;
   filtered= Filter.run(value);
   //Serial.print("In: ");
   Serial.print(value);
   Serial.print(',');
   //Serial.print(" - Out: ");
   Serial.println(filtered);
   delay(50); //make it readable
   x = x+1;
}

我们已将噪声添加到正弦波中。如果我们查看串行绘图仪输出,它看起来像这样 -

蓝线表示原始信号,红线表示滤波后的信号。如您所见,蓝色信号比红色信号更嘈杂,这意味着滤波器似乎正在工作。

您可以试用此库附带的其他滤波器。

更新于: 2021年7月26日

1K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告