2024年11月12日
002-3.エレキ入門-第3回「光センサ」
レゴマインドストームを「電気」という視点で紹介するというコーナー、名付けて「エレキ入門」です。電気の知恵をロボット作りに生かしてみましょう。 今回はライントレースロボットではおなじみの部品、光センサ(ライトセンサ)について紹介します。 (文/松原拓也)

こちらが言わずと知れた、レゴマインドストームNXT用の光センサ(ライトセンサ)です。光の明るさを測定するために使います。

この光センサの中には、「LED」と「フォトトランジスタ」という部品が入っています。
「LED」は電気を流すと発光する部品です。このセンサには赤色のLEDが使われています。
「フォトトランジスタ」は光を感じ取ることのできる半導体部品(センサ)です。 フォトトランジスタにはさまざまな種類が存在するのですが、このセンサでは可視光線(目で見える光)に反応するタイプが使われています。
(フォトトランジスタの構造については説明が難しくなってしまうので、ここでは省略します。)

フォトトランジスタは光を受け取ると、そのぶんだけ電流を流すという特性があります。これを「水道管」にたとえると、イラストのようになります。「蛇口」に相当するのがセンサで、「水」に相当するのが電気です。電気は一定の方向にだけ流れます。
つまり、ロボットが「光」を感じ取るということは、「電気の流れ」を感じ取るということになるのです。

「抵抗」という部品を使って、LEDとフォトトランジスタを電池につないでみました。
LEDに電池をつなぐと光りました。
フォトトランジスタに電池をつなぐと、見た目の変化はありませんが、しっかり光を受け取っています。

実際にレゴマインドストームで使われている光センサの回路は、もっともっと複雑です。
LEGO社の公式webサイトのHDK(ハードウェアデベロップメントキット)で公開している光センサの回路図です(文字を書き加えています)。
小中学校や高校に通っている皆さんには、回路を読むことは難しいかもしれませんが(難しいと思ったら、読み飛ばして頂いてかまいません)簡単に説明しておきます。 LEDが自由に点灯できるようにインテリジェントブロックから信号線がつながっています。明るさはフォトトランジスタが受け取って電流を流します。 この電流は非常に弱いので、「トランジスタ」という部品を4個使って、増幅しています。増幅した電流はインテリジェントブロックに伝えられます。
◆ 色によるセンサの反応

専用のシートを床に敷いて、光センサを搭載したロボットを置きます。それから、「View - Light Sensor」をメニュー選択して、センサの値を測定してみました。

画面にはセンサの値が0~100の範囲で表示されます。 床面が「黒」の時はおよそ32を示し、床面が「白」の時はおよそ62を示しました。 この特性をグラフを表すと、このようになります。紙に描かれた「白」と「黒」よりも「ずっと明るい白」や「ずっと暗い黒」を測定できるということが分かります。

この場合、光センサは「白色」を読み取っているかのように思えますが、実際にはLEDの赤い光にはね返ってきた明るさを読み取ってます。

つまり光センサは白い光ではなく、「赤い光」を読み取っているのです。光センサは、赤い波長の色を含んだ物体を読み取ることに向いていますが、そうでない物体は読み取ることに向いていません。

色のついたボールに光センサを当ててみると、写真のようになりました。
「赤いボール」と「青いボール」でそれぞれ見える明るさが違っています。赤いボールに赤色の光を当てると普通に反射しますが、青いボールに赤色の光を当てると反射が弱まってしまいます。
どれくらい光センサの反応が弱まるかについては、皆さんで実際に試してみてください。ちなみに、教育用レゴマインドストームに付属するランプ(豆電球ブロック)は少し黄色い光を放ちます。それで照らしてセンサの値を観察しても面白いと思います。
◆ 距離による光センサの変化第3回「光センサ」

次に距離における光センサの変化を観察してみたいと思います。
光センサを白い箱に向け、センサの値(0~100カウント)を読み取っていきます。

光センサが読み取っている様子です。センサと箱の距離は「ノギス」というものさしを使って測ります。

距離とセンサ値の関係を記録すると、このようなグラフになりました。
グラフの線が直線ではなくカーブを描いています。センサとの距離は均一に近付けていますが、値は急激に増えているためです。 この場合、「距離に対して値が比例していない」と言います(「比例」は中学校の数学で習う内容です)。
そして、0~5mmの部分で急激にセンサ値が落ちていることにも注目です。これはLEDの光がさえぎられてしまって、正しく測定できない状態になってしまうためです。 つまり、「センサを5mmよりも近付けて使ってはいけない」ということになります。グラフを見た限りでは、センサの近付ける距離は最短で1cm程度におさえておいたほうがよさそうです。
◆ 光センサで距離を求める

おまけとして、光センサの値から対象までの距離を求めるプログラムを作ってみました。 NXTソフトウェアで動きます。
[ダウンロード]距離を求めるプログラム(NXTソフトウェア用)

プログラムでは光センサの値(0~100)を読み取って、次の数式に当てはめて液晶画面に表示しています。
「(38000÷(センサ値の2乗))-6」
38000や6という数字は実際に測定して得た値に近付けるために割り出したものです。「2乗」(中学校で習います)は、先に紹介したグラフのカーブを再現するためのものです。

実際にプログラムを実行してみました。センサと壁の距離は50mmにしてみました。

実行結果です。液晶に画面に距離がミリ単位で表示されます。ちょっと見づらいのですが、 54~56mmと表示されています。実際の距離と5mmくらいズレていますが、、、まあ誤差の範囲だと思います。
このプログラムを使えば、超音波センサのように壁を検出することもできると思いますが、壁の反射率に大きく影響されてしまうという欠点があります。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。