0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EV3 カラーセンサー拡張ブロック

Posted at

EV3 カラーセンサー向けの拡張ブロックを公開しました。標準のカラーセンサーブロックでは取得できない RGBデータ や 生の反射光の強さ を取得できます。以下のリンクから入手できます。

技術的な解説

拡張ブロックを作成する過程で得られた知見を簡単にまとめておきます。

カラーセンサーのモードについて

LEGO公式では、EV3カラーセンサーのモードとして以下の3つが紹介されています。

  • 色モード(COL-COLOR)
  • 反射光モード(COL-REFLECT)
  • 周辺光モード(COL-AMBIENT)

しかし実際には、これらに加えて以下の3つのモードが存在しています。

  • キャリブレーションモード?(COL-CAL)
  • RGBモード(RGB-RAW)
  • 生の反射光モード(REF-RAW)

今回の拡張ブロックでは、このうち RGBモード と 生の反射光モード に対応しています。各モードの詳細な仕様については、センサーが出力するデータを解析することで知ることができます。

カラーセンサーが送信するデータ

EV3の標準センサーは、電源投入直後から UART(2400 bps)通信で自身の情報(センサーIDやモード構成など)を自動的に送信し始めます。この通信をマイコン等で受信・解析することで、センサーの内部仕様を詳細に把握することが可能です。

詳しい解析方法やプロトコルの内容については、別の記事で紹介する予定です。
ここでは、実際に解析して得られた結果を簡単にまとめておきます。

解析結果

  • センサーID:29
  • モード数:6
  • ポートビューで表示されるモード数(View数):3
  • 同期後の通信速度:57600 bps
モード番号 モード名 生の値の範囲 SI単位系での値の範囲 SI単位 データの数 データの型 表示桁数 小数桁
0 COL-REFLECT 0 ~ 100 0 ~ 100 pct 1 8bit 整数 3桁 0桁
1 COL-AMBIENT 0 ~ 100 0 ~ 100 pct 1 8bit 整数 3桁 0桁
2 COL-COLOR 0 ~ 8 0 ~ 8 col 1 8bit 整数 2桁 0桁
3 REF-RAW 0 ~ 1023 0 ~ 1024 なし 2 16bit 整数 4桁 0桁
4 RGB-RAW 0 ~ 1023 0 ~ 1024 なし 3 16bit 整数 4桁 0桁
5 COL-CAL 0 ~ 65535 0 ~ 65535 なし 4 16bit 整数 5桁 0桁

各モードの動作について

生の反射光モード(REF-RAW)

解析結果から、REF-RAWでは2つの値が送られていることがわかります。
このモードでは赤色LEDを高速にオン・オフし、それぞれの状態でフォトダイオードから取得したADC値を送信しています。LEDオフ時のADC値をambient、LEDオン時のADC値をredとした場合、反射光の強さreflectは以下の式で求められます。

reflect = red - ambient

ただし、黒い物体などで red < ambient となる場合があるため、拡張ブロックでは以下のような処理を行っています。

if red >= ambient:
    reflect = red - ambient
else:
    reflect = ambient - red

RGBモード(RGB-RAW)

RGBモードでは、赤・緑・青の3色LEDを高速に切り替えながら、以下の値を測定していると考えられます。

  • 赤色LEDオン時の値:red
  • 緑色LEDオン時の値:green
  • 青色LEDオン時の値:blue
  • 全てのLEDオフ時の値:ambient

しかし、RGBモードではambientは送られてこないことから、あらかじめambientを分が差し引かれた状態で値が送信されている気がします。

キャリブレーションモード(COL-CAL)では4つの値が送られるようなので、これがambientを含めた値なのでしょうか?この辺りはまだ詳しく調べていません。

EV3 拡張ブロックの構築

さて、各モードの動作がわかったので、これで拡張ブロックを作れそうです。

拡張ブロックは、EV3のサポートページにあるEV3 ブロックデベロッパーキットを使って作成できます。

EV3 LabはLabViewというグラフィカル・プログラミング環境がベースになっており、各ブロックの中身はLabVIEWのプログラムとして構成されています。例えば範囲ブロックは以下のような構成になっています。

範囲ブロックの中身
範囲ブロック.png

このように、LabVIEW上でロジックを組むことで、センサーの生データや独自の処理を含む拡張ブロックを自由に作成できます。

ただし、ブロックのアイコン設定やブロック名の定義、パラメータの構成など、細かい仕様が多く、慣れるまではやや複雑です。デベロッパーキットには簡単なチュートリアルも含まれていますが、情報が限られているため、実際の構築には多少の試行錯誤が必要になります。

こうした構築手順や注意点については、今後別記事で詳しく解説する予定です。


生の反射光モードとRGBモードのブロック構成は以下のとおりです。どちらも処理自体は非常にシンプルです。

生の反射光モードでは、redambient の値を比較し、差が正の値になるように大きいほうから小さいほうを引いて出力しています。
一方、RGBモードでは、取得した red、green、blue の各値をそのまま出力しています。

生の反射光モード
生の反射光モード.png

RGBモード
RGBモード.png

終わりに

かなり大雑把な紹介になってしまいました。元気があれば、もう少し詳しい解説記事も書いていくつもりです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?