ArduinoでSTEM教育​ 基礎編:センサのキャリブレーション

ArduinoでSTEM教育​ 基礎編:センサのキャリブレーション

センサはいろいろな種類がありますが、どんなものにも誤差が生じます。この誤差をできるだけ小さくするために、キャリブレーション(校正、調整)を行います。例えば、ライントレースカーの場合だと、床材が異なると反射率も異なるので、その環境下でデータを取って、制御閾値を調整する必要があります。このようなセンサデータを処理プログラムする方法を紹介します。

起動時にキャリブレーションする方法

起動時時に実行されるsetup関数内で、基準となるラインを計測して、それをもとに閾値やヒステリシスを設定します。

ヒステリシスについて、簡単に説明します。例えば、照度センサの閾値を500に設定して、500以下だとLEDを点灯、501以上だとLEDを消灯するプログラムを作るとします。照度センサから入力される値は、常に微小に上下しているため、500や501といった値が入ってきます。すると、LEDは点灯と消灯を高速に繰り返してしまいます。街灯はそのような事が起きませんよね?それは、LEDを点灯させる閾値を450、LEDを消灯させる閾値を550というように設定し、センサの値が451~549のときはLED制御をしないように不感帯を設けます。このように、状態によって異なる閾値を持つことをヒステリシスと言います。

1.平均値から決める

1秒間の平均値を計算し、その平均値を閾値とします。ヒステリシスは、0と閾値の距離の10%、または1023と閾値の距離の10%とします。

2.最小最大値から決める

5秒間の最小値と最大値を測定し、それを動作範囲の幅と考えます。例えば、ライントレースカーであれば、ユーザーが起動時に床とラインをセンスさせてあげます。閾値は、最小・最大の中央値とします。ヒステリシスは、閾値から最小または最大値までの距離の10%とします。

このキャリブレーションの場合は少し注意が必要です。ユーザーが起動時のキャリブレーション期間中に、動作範囲を設定してあげないと、正常な閾値設定ができず、動作がおかしくなってしまいます。その場合は、予め設定した値でどうさせたり、動作範囲が狭すぎる場合はキャリブレーションが失敗していることをユーザに音や光で知らせるようにすれば分かりやすいと思います。

一定時間ごとにキャリブレーションする方法

動作環境が一定であれば、起動時のキャリブレーションだけで問題有りませんが、動作環境が刻々と変化するような場合だと、問題が出てきます。例えば、屋外だと気温や照度は一定では有りませんよね?このような場合は、一定時間ごとにキャリブレーションを実行して、閾値やヒステリシスを更新する必要があります。

Arduino基礎編カテゴリの最新記事