2016-04-26 46 views
0

我正在使用以下方法從灰塵傳感器獲取數據。但是,我從灰塵傳感器獲得的數據看起來並不穩定。它可以在很短的時間內從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, 

回答

1

如果您的測量值出現尖峯,您可以嘗試實施一個簡單的低通濾波器以將其移除。或者只是創建一些平均的最後X值,以使其更穩定。

+0

有沒有我可以參考的算法? –

+0

對於平均值:您可以將最後10個左右的值添加到緩衝區(數組),然後計算平均值。 對於低通:您可以嘗試爲arduino找到已有的低通濾波器代碼 –

+0

如果我的評論幫助您解決了問題,請將其標記爲答案! –

相關問題