我使用以下方法从灰尘传感器获取数据。但是,我从灰尘传感器获得的数据似乎根本不稳定。它可以在很短的时间内从 400 跃升至 5000。我做错了什么吗?
static void dsm501a_timeout_handler_array( void* arg )
{
dsm501a_context_t *_context = arg;
_context->ratio = (float)_context->all_low_time /sampletime_ms * 100;
_context->value =1.1*pow((_context->ratio),3)-3.8*pow((_context->ratio),2)+520*(_context->ratio)+0.62;
_context->all_low_time = 0;
// dsm501a_log(" ratio %f ,_context->value %f n",_context->ratio,_context->value);
}
_context->all_low_time
_context->value =1.1*pow((_context->ratio),3)-3.8*pow((_context- >ratio),2)+520*(_context->ratio)+0.62;
pm25val = value * pm25coef *10; // 10 to transform 0.01 cf to 0.1 ft
251, 74 , 83 , 79 , 88 , 59 ,59,74,
如果你在测量中得到尖峰,你可以尝试实现一个简单的低通滤波器来消除它们。或者只是创建最后 X 值的某种平均值以使其更稳定。