2024年11月19日

005-2.カラーセンサ入門-第2回「カラーセンサの光センサモード」

教育用レゴ マインドストームNXT用センサの一つ、「カラーセンサ」を使ったロボットの作り方を紹介します。(文/松原拓也)

こちらが「レゴ社製カラーセンサ」。前回に引き続いての登場です。
3つの丸い窓が付いていますが、そのうち2つはフルカラーLEDと光センサです。LEDから出た3色(赤・緑・青)の光が対象物に当たって、戻ってきた量によって色を判別しています。 カラーセンサは、登場した時期が比較的新しいので、「教育用レゴ マインドストームNXT」の基本セットには付属していません。単品でも販売されています。
なお、カラーセンサは光センサの上位互換になっていて、光センサの代わりとして使うことができます。そのため、一般用(玩具用)のレゴ マインドストームNXT2.0のセットには、光センサが付属せず、代わりにカラーセンサが付属しています。

今回は、カラーセンサを光センサとして使う方法を紹介します。
前回のプログラムでは設定内の「動作」の項目が「色センサー」になっていましたが、、、

、、、これを「光センサー」に変更します。
これだけで、もう光センサとして使うことができます。
さらに、照明の色を3つ中から選ぶことができるのですが、 ここでは赤色を選択します。赤色は従来の光センサと同じ照明の色です。

こちらが完成したプログラム(Program-1.rbt)。「光センサ」モードで測定した結果を画面に表示するだけのプログラムです。測定できる値の範囲は0~100です。

インテリジェントブロックNXTのポート1にカラーセンサを接続します。

横から見た様子です。 H型のペグにブロックを挿し込むと、そのブロックの色をセンサが読み取ります。ブロックとセンサとの距離は、およそ1ポッチぶんです。

プログラムを実行すると、このように液晶画面にセンサの測定値が表示されます。写真は「緑色」のブロックを測った場合の値です。

ブロックを付け替えて、6種類(黒、白、赤、緑、青、黄)の 色のブロックで測定を行ってみました。測定した結果は次のとおりです。

反応が悪かった色
・緑色のブロック→31
・黒色のブロック→22
・青色のブロック→25

反応が良かった色
・白色のブロック→51
・赤色のブロック→45
・黄色のブロック→47

測定値は反応が良かった場合(45~51)と、反応が悪かった場合(22~31)の2種類に分かれました。
ブロックのサイズも距離も同じですが、色によって光センサの測定値は変わってしまうのです。

では、どうしてこうなるのか? 例を挙げて仕組みを紹介しましょう。

たとえば、青色の光しか出せない懐中電灯を持っていたとします。 そして、真っ暗闇の中で、赤いリンゴにその懐中電灯を当てたとします。すると、リンゴはどう見えるでしょうか? 答えは「真っ黒」です。青い光は、赤色の物体に反射せず、その結果、リンゴは黒く見えるのです。

つまり、光センサは、「照明の色を反射しないと反応しない」ということになります。
先ほどのプログラムでは、照明は赤色ですので、対象となる物体は赤い色を反射しないと反応しません。緑色や青色のブロックの反応が悪かったのはこのためです。

◆ 光センサモードで色を読み取るプログラム

今度は「ブロックの色」ではなくて「照明の色」を変化させて、 光センサの反応を比較してみたいと思います。
作成したプログラムはこちらです(Program-2.rbt)。このカラーセンサブロックには、赤色・緑色・青色の照明を選択できますので、それをすべて切り替えながら測定しています。そして、測定結果は数値ではなく、棒グラフとして表示します。

棒グラフとしての表示方法ですが、表示ブロックを使って、動作を「図」、タイプを「線」に設定します。

このプログラムの動作手順を図にしてみました。
プログラムを実行すると、赤→緑→青の順番で、照明の色が変わって、明るさを測定します。3つの色ごとに、1回ずつ(合計3回)測定します。

プログラムを実行した様子です。 写真ではうまく写ってませんが。それぞれ0.1秒くらいの処理時間で照明の色が切り替わって、測定を行っています。照明の色は、最後に切り替える必要がないので、LEDは青色のままになります。

黒のブロックを測定した場合です。画面には、赤・緑・青の3色の棒グラフが表示されます。この棒グラフの高さがセンサの反応している値です。

白のブロックを測定した場合です。赤・緑・青の3色の棒グラフが全部、黒色の時より上がりました。この微妙な棒グラフの高さを見比べれば、反応があったかなかったのかが分かります。

今度は、赤色のブロックを測定してみました。
赤色だけグラフが飛び出しています。

緑色のブロックを測定してみました。
緑色に反応があります。

青色のブロックを測定した場合です。
この青い色の場合だけ、反応がよくなくて、少ししかグラフが上がってくれませでした。おそらく、青色LEDの発色の性能的な問題だと思います。

黄色のブロックを測定した場合です。
赤色と緑色が反応しました。可色法では「赤+緑=黄」ですから、理論通りの結果です。

以上のように「色センサ」のモードでなくても、「光センサ」のモードでも色を見分けることができることが分かりました。欠点としては、LEDがピカピカして目に悪そうなところと、測定に時間がかかってしまうところでしょうか。 光センサモードは0~100の範囲で値を読み取れますので、 色センサ(全6色)では判別できないような、色も識別できるかもしれません。ただし、識別するためのプログラムは自作しないといけません。
[DOWNLOAD]今回作成したプログラム(教育用レゴマインドストームNXT2.0以上推奨)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。