2024年11月19日
005-2.カラーセンサ入門-第1回「カラーセンサの基本的な性能」
教育用レゴ マインドストームNXT用センサの一つ、「カラーセンサ」を使ったロボットの作り方を紹介します(文/松原拓也)。

こちらが「カラーセンサ」です。「HiTechnic社製カラーセンサ」と区別するために「レゴ社製カラーセンサ」と呼んだりしています。カラーセンサは、登場した時期が比較的新しいので、「教育用レゴ マインドストームNXT」の基本セットには付属していません。単品でも販売されています。
3つの丸い窓が付いていますが、そのうち2つはフルカラーLEDと光センサです。LEDから出た3色(赤・緑・青)の光が対象物に当たって、戻ったきた量によって色を判別しています。
なお、カラーセンサは動作モードを切り替えることによって、「光センサ」や「色ランプ」として使うことができます。

では、動作を確認してみましょう。
カラーセンサをインテリジェントブロックNXTのポート1に接続します。

インテリジェントブロックNXTの電源を入れて、「VIEW」→「Color」を選択します。すると、センサの検出した色の名前をLCDに表示します。

カラーセンサは全部で6通りの色を検出することができます。色には1~6の番号が付いています。たとえば、緑色を検出した場合には、「3.Green」と表示されます。

場合によって、カラーセンサが思い通りの色を検出できないということがあります。
たとえば、「赤色」と「緑色」のブロックの中間を測定すると、「Yellow(黄色)」と表示されてしまいます。
これは「赤」と「緑」の反射量が増えたことによって、「黄色」と誤認識をしたわけです。「可色法」というルールでは「赤+緑=黄」となります。

同じく、「黄色」と「青色」のブロックの中間を測定すると、「White(白色)」と表示されてしまいます。「可色法」によると、「黄+青」は「白」になってしまうのです。
赤・緑・青の3原色があれば、理論的にはどんな色も作りだすことができます。たとえば、テレビ画面の色も赤・緑・青の3原色で作られています。
◆ カラーセンサを使ったプログラム

では、カラーセンサを使ったプログラムを作ってみましょう。
NXTソフトウェアでカラーセンサを使うためには、「色センサー」というブロックが必要です。

「色センサー」のブロックがない場合には、 NXTソフトウェアの機能を拡張する必要があります。
拡張する場合には、 レゴ エデュケーションの公式サイトのダウンロードページ を開いてから、「Colour Sensor Block」という部分をクリックして、「ColorSensor.zip」というファイルをダウンロードしてください(すでに「色センサー」ブロックが存在する場合には、ダウンロードは不要です)。

ファイル「ColorSensor.zip」を展開して、その中から「Japanese Color Sensor 2_x.zip」を取り出します。さらにそれを展開しておきます(Zipファイルを展開するには、Lhaplusなどを使います。Windows7なら右クリックすれば展開できます)。
それから、NXTソフトウェアを起動して、「ブロックのインポートとエクスポートのウイザード」をメニュー選択して、展開したファイルの存在するディレクトリを指定します。
インポートが成功すると、パレットの中に「色センサー」のブロックが追加されます。

「色センサー」ブロックを使った、最も簡単なプログラムを作ってみました(Program-1.rbt)。ポート1に接続したカラーセンサで色を読み取って、LCDに表示します。測定した結果は1~6の数値で返します。

表示結果が数値だと分かりにくいので、改良版を作ってみました(Program-2.rbt)。こちらは数値ではなく、文字で色を表示します。
◆ センサと対象物との距離

カラーセンサと対象となる物体との距離と測定結果の関係を調べてみました。写真の状態で、「View」を実行すると、当然ながら「5.Red」と表示されます。 この状態で、1ポッチずつブロックをセンサから遠ざけていきます。

センサの距離が28mmに達したあたりで、「Red」だった表示が「Black」になったり、結果が不安定になりました。

ちょっとした環境の変化で、測定結果が変わってしまうこともあります。
たとえば、蛍光灯のライトを近づけてみると、「Red」だった表示が「Black」になってしまいました。

センサの周りを手でおおうと、「Red」に戻りました。センサが不安定になるのはLED以外の光が原因のようです。
◆ カラーセンサの測定範囲

さらに、カラーセンサが色を検出している範囲を調べてみます。
2cmほど床から浮かせた状態で、LEDの照らす範囲を物差しで測ります。赤・緑・青で位置が若干ズレてますが、およそ照らされる範囲は直径3cmのようです。

つまり、LEDの照らしている範囲は約70度ということになります。この範囲にピッタリと対象物が収まっていたほうが、LEDの光をセンサに伝えることができるわるわけです。センサの2cm手前を測定する場合、対象物のサイズは3cmくらい。対象物が小さかったり、センサから離れていると、色を正しく検出できないわけです。
以上をまとまめると、ブロック1個ぶんのサイズの色を検出したいという場合には、対象物をセンサの1cmくらい手前に近づけたほうがよさそうです。そして、センサの周りはできるだけ遮光して、外部からの光が入らないようにしたほうがいいみたいです。
◆ カラーセンサの実行速度
最後に、カラーセンサで検出するさいにかかる時間を測ってみたいと思います。なぜ時間を測るのかというと、ロボット競技でセンサを使うさいにはスピードが命だからです。

作成したプログラムです(Program-3.rbt)。ループブロックを使って、1000回ほど実行させて、最後にタイマの時間を1000で割っています。これによって、ループ1回ぶんの時間が求まるはずです。

実行すると、LCDには「1.096 msec(単位はミリ秒)」と表示されました。これが1回あたりの測定時間です。
1000÷1.096=912.40…、つまり、「1秒間に912回測定できる」ということになります。
これによって、カラーセンサは超音波センサにくらべて何倍も高速だということが分かりました。
今回はカラーセンサの基本的な性能について紹介しました。次回には、ロボット作りにおいての活用方法について具体的に紹介します。
[DOWNLOAD]今回作成したプログラム(教育用レゴマインドストームNXT2.0以上推奨)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。