
デジタル入出力を利用した反応時間の測定Part2 繰り返し処理とデータロギングを追加
こんにちはロック204チャンネルです。
このチャンネルではIT初心者のための動画を配信しています。
今回は「デジタル入出力を利用した反応時間の測定Part2 繰り返し処理とデータロギングを追加」をお送りします。
この記事「反応時間測定 Part2」では 前回の「デジタル入出力を利用した反応時間の測定値-1」の続編となりますので、初めてご覧になる方はそちらを最初にご覧になることをお勧めします。
今回の内容は、Part1に続き 今回は繰り返し反応時間の測定を行えるようにしました。また データのロギングと平均値・標準偏差も表示できるようにプログラムを追加しております。

今回の反応時間測定に用いた回路を示します。
P0端子にLEDを接続します。 こちらをデジタル出力として
P1端子に3ボルトをスイッチを介して接続するデジタ入力の接続例として回路を作成しています。
LEDは通常、小さな抵抗を介してマイクロビットに接続するのですが 今回は抵抗入りLEDを使用しました。

今回作成するプログラムではスライドに示す二つの拡張機能を 追加しして行きます。一つはデータロガー これは公式の メークコードで 拡張機能としてこう解されていますので そちらから取り込んでください。
BasicStatの方は 次のページ で説明します。

拡張機能の「BasicStat」の取り込み方法はMakeCodeの拡張機能より
こちらに示すURLをテキストボックスの中に貼り付けてください。
そして下に表示された 「基礎統計量2」のタイルを クリックしてください。

「最初だけ」ブロックに変数nを10にするで10回の測定を設定します。
次にdata Loggerの拡張機能より「mirror data serial」ブロックを追加しオフとします。
これは余計な表示を抑制するためです。
そして「set column」ブロックで項目RTを 追加します。
つぎは「ボタンAが押されたとき」のブロックの変更点です。
「rt_data」これは 反応時間を入れる配列です。 これを最初にからにします。
そして何回測定しているかを入れる変数kaisuをゼロとします。
次にデータロギングのファイルを{delete log full}ブロックで前のデータを削除します。

「ずっと」ブロック、関数「taiki」、関数「junbi」は 変更ありません。

次は関数{get_rt}の内容の変更点です。
ここでは 反応時間rtを表示した後に、この反応時間を配列rt_dataに追加します。
そしてkaisuを一だけ増やします。
その下に{log data}ブロックで反応時間をloggingします。
次に「もし」ブロックを追加し、 kaisuがnつまり、規定回数に達した時の論理式を書きます。
この条件が「真」であるとき、modeを999として測定を 終了しします。
そして コンソールに結果を表示する関数{print_result}を呼び出します。
またこの条件が 満たされない場合、「もしデジタルで読み取る端子P1が 1なら繰り返す」ブロックを実行します。
これはスイッチから 手が離れていない場合は このループを繰り返すということです。
手が離れた場合P1端子は0となりますので、それを確認した上でmodeを1として測定を再度実行します。

{print_result}関数では コンソールに結果を出力します。
最初にシリアル通信でresultと表示し、「変数カウンターを0からn-1にかえて繰り返す」で各データを コンソールに表示して行きます。
N-1は配列に0番目からデータが格納されているためこのようにしています。
そしてBasicStatのブロックを使用して平均値・標準偏差をrt_data配列より計算しています。
また「ボタンBが押されたとき」では平均値をマイクロビットのディスプレーに表示できるようにしました。

こちらがコンソールに表示された結果になります。
10回分の 反応時間の結果と 平均値 標準偏差を 示します。

こちらがロギングされた データとなります。
マイクロビットにロギングされたデータは my_data.HTM のファイルとして 保存されています。
こちらを開くと左のような表として表示することができます。
そしてプレビューすると右のようなグラフとしてデータを 表示することができます。

今回は、反応時間の測定Part2として繰り返し測定 とデータロギング、そして平均値と標準偏差を求める プログラムを作成しました。
これらを活用することによって疲労度や集中度の低下などを観察することが可能となりますのでご利用ください。
ご視聴ありがとうございました。
https://note.com/rock204/n/n65b04f0f5935