皆さん、Arduinoでプログラミングをしているときに、中央値とか最大値とかの「記述統計」をしたいと思ったことはないでしょうか。
私が軽く調べたところ、Arduino ideで記述統計をする方法を解説しているサイトは全然なく、私自信やり方がわからず苦労しましたので、今回ここにその方法を書いておこうと思います。
記述統計をしてくれるライブラリー
Arduino ideには簡単な統計をしてくれるライブラリーがあります。
それはずばり「QuickStats」ライブラリーです。
(公式の解説ページArduino Playground - QuickStats)
このライブラリーでは、平均、幾何平均、最大値、最小値、標準偏差、標準誤差、変動係数、絶対値、中央値などを求めることができます。
導入方法
まず、ここからライブラリーのデータをzip形式でダウンロードします。
そして、Arduino ideのメニューのスケッチ→ライブラリーをインクルード→zip形式のファイルをインストールからダウンロードしたファイルを選択します。ソフトを再起動させれば導入は完了です。
使い方
今回は私の情報量の関係で使い方を説明するのは、平均、最大値、最小値、中央値、絶対値のみとさせていただきます。
なお今回は、センサー等で取得した値についてこのライブラリーを使うといった場合で説明します。
#include "QuickStats.h"//ライブラリーをインクルード int numreadings = 10;//記述統計をしたい値を入れるための配列を作成 float readings[10]; float n;//センサー等の値代入用の変数を作成 void setup ( ) { Serial.begin(115200); } void loop ( ) { for (int i = 0; i <= 9; i++) { //ここらへんでセンサー等の値を取得して変数nに代入 readings[i] = n; //センサー等の値を配列に代入(このnをiに変えることでプログラムのテストを行うことができます) } QuickStats stats;//QuickStatsを初期化 Serial.print("平均値:"); Serial.println(stats.average(readings, numreadings));//平均値を表示 Serial.print("最小値:"); Serial.println(stats.minimum(readings, numreadings));//最小値を表示 Serial.print("最大値:"); Serial.println(stats.maximum(readings, numreadings));//最大値を表示 Serial.print("中央値:"); Serial.println(stats.median(readings, numreadings));//中央値を表示 }
ちなみに変数nをコメントの通りにiにかえると
平均値が4.5
最小値が0
最大値が9
中央値が4.5
といった値が返ってくると思います。
配列に代入した値が0~9なのでちゃんと計算されてますね。
使用例としては、複数の値の中央値や平均値をとることでセンサーの値のブレの軽減などに使えるかなと思います。
では、よいArduinoライフを!