温度センサーLM35DZを移動平均で処理する2017年09月26日 11時12分50秒


ADCからのセンサーデータをそのまま使うと様々な要因により値がふらつきます。
それを平滑化させるために移動平均という手法があります。

■移動平均の考え方
同じセンサーデータをある程度の数だけ格納してその数の平均値を求めるのですが、次々に新しい観測データを採用して古いデータを捨てていくという処理が移動平均です。

■移動平均に必要な処理構造
(1) センサーデータを一定数配列に保管します
(2) 一定数のセンサーデータの合計値を求めます
(3) センサーデータの合計値を格納数で割ると平均が求められます
(4) 配列に新しいデータを格納する時には一番古いデータを捨てます
(5) 一番古いデータを捨てる前にそのデータを合計値から引きます
(6) 合計値に新しいデータを加えます
(7) センサーデータ単体で平均値を求める代わりに最終的な換算時に加味することもできます

■サンプルプログラム
以前の記事のプログラムをベースに修正しています。
以下の部分が変わっています。
(1) 換算用のマクロの変更
(2) 配列へのADCデータ格納と合計処理の追加
(3) 配列インデックスをLED点滅に流用
(4) シリアル出力に合計値出力を追加
(5) 温度換算時に使うデータはADC出力の合計値を使う
移動平均版LM35DZ処理スケッチ

出力結果は以下のようになります。

移動平均版でのLM35DZ処理出力

■注意点
今回のサンプルではサンプリング周期と表示周期を同じ1秒としていますので室温測定には問題ありませんが、もっと早い応答性が必要な場合にはサンプリング周期をもっと短い間隔にして、表示や出力間隔とは分ける必要があります。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このブログでは「組込み」と「組み込み」のどちらを使っている?

コメント:

トラックバック

このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2017/09/26/8684222/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。