まいまい式光センサー測定方式の原理解説 その2です。
その1ではLED点灯時とLED消灯時の光センサー測定値の差分を取ることで外乱光の影響をキャンセルできると説明しました。しかし、実はこれだけの工夫では上手くいきません。
理想の光センサー
NXTの光センサーに使用されているフォトトランジスターは、より強い光を受けると、より大きな電流が流れる性質があります。NXT本体(のA/Dコンバーター)はフォトトランジスターの両極間の電流ではなく電圧を測定します。したがってセンサーに流れる電流量、すなわち光センサーが受けた光量(光の強さ)に反比例して、測定電圧値は下がります。
LEDの明滅による光量の変化量は床の反射率(色)が同一であれば(周囲から飛び込んでくる外乱光に関係なく)常に一定であるはずです。したがって、下のグラフのように光量(光の強さ)の変化量 δ が同じであれば、測定値の変化量 Δ も同じ、というのが理想的な光センサーの特性となります。
《グラフ1》理想の光センサー特性 |
---|
現実の光センサー
しかし現実の光センサー(フォトトランジスター)に無制限に大きな電流を流すわけにはいきません。そこで、一定量以上の電流をフォトトランジスターに流さない(=飽和する)ように電子回路を組みます。(たとえ電流制限を省略したとしても、無限に大きな電流が流れ続けることは物理的にありえませんが・・・ 😉 )
《グラフ2》現実の光センサー特性 |
---|
ということで上のグラフのようにバックグラウンドの外乱光の強弱(明暗)によって、光センサーの測定値は変化してしまいます。さて困りました・・・ 😥
実測定結果の補正
《グラフ3》実測定結果の補正方法の説明 |
---|
ところが現実の光センサーの特性を実験的に一つ一つ測定することで、理想の光センサーの特性との違い(補正係数)を知ることが出来ます。
この実験結果から理想のセンサー特性を導きだす、もっとも単純な方法は次のようになります。たとえば、1ミリボルト刻みに実測定値と補正係数をテーブルに保存しておきます。そして、LED消灯時の測定値が7600ミリボルトならば、LED明滅差に0.78の補正係数を掛ける、7620ミリボルトならば、LED明滅差に0.80の補正係数を掛ける、・・・と計算すれば現実の光センサーから理想的な特性をもった光センサーを仮想的に作り出すことができます。
このようなテーブルを一般にLUT (Look-up Table)と呼びます。しかしながら、巨大な LUT はメモリ(ROM)のサイズを圧迫します。
そこでメモリサイズを節約するために、実験的に求めたプロットデータを多項式で近似する、というテクニックを今回のまいまい式は採用しました。3次多項式で近似すればよいか?、4次多項式で近似すればよいか?、いやいや5次多項式で近似する必要があるのか?この辺の兼ね合いはグラフに描いた近似式と実験結果のプロットの外れ度合いを見比べて、大体こんなところでOKだなというところで手を打ちました。7次多項式、8次多項式と次数を増やしていけば、より正確な近似値を求めることができますが、浮動小数点乗算がどんどん増えて演算時間も伸びていきますから、どこか適当なところで妥協する必要があります。
ということで、2回シリーズで説明した内容が「まいまい式光センサー測定方式」の全てです。私のつたない説明で理解していただけましたでしょうか?感想、質問、チャチャ等々を下記のコメント投稿欄にてお待ちしています。 😀
制御初心者なのですがセンサ特性の合わせた関数を当てはめ理想的な測定グラフを作り出すという解釈で問題ないでしょうか。
また関数はどんな関数を用いても(三角関数、指数関数、対数関数など)いいのでしょうか。
無名さん、コメントありがとうございます。コメントをいただいたことに気づくのに遅くなり申し訳ありません。
簡易には Light = k / Vin で近似できます。
さらに Light = k * R1 / (R1 * Vin + R2) とすると回路に近くなります。
しかし、たとえば回路シミュレーションで近似式を突き詰めていくよりも、実測値をテーブル参照するのが実は一番簡単で確実だったりします。