2016-04-26 9 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

私のコメントがあなたの問題解決に役立った場合、それを答えとしてマークしてください! –

関連する問題