[Mindstorms]EV3 nicosensor

LEGO MINDSTORMS NXT/EV3用の自作センサです。nicosensorと呼んでいます。

いままではNXTでしか動作しませんでしたがEV3に対応させました。Arduinoで動作します。

ポートからのA/D変換やデジタルデータの入力などが可能です。

材料

作り方

回路図どおりにシールドを作って、Arduino対応基板に接続します。

Arduino対応基板にプログラム"nicosensor.ino"を書き込みます。

動作原理

このセンサではI2Cを使った通信方式を採用しています。

プログラム内のI2C通信はハードウェアの機能を使わず、すべてソフトウェアで制御しています。このためI2Cのポートの割り付けを自由に変更できます。

I2C通信は常にマスター側(インテリジェントブロック側)に主導権があります。最初はマスター→スレーブに送信します。送信データの1バイト目の値がスレーブアドレスです。これが適合しないと返信しないという決まりがあります。NXT超音波センサのスレーブアドレスは0x02です。送信データの2バイト目がコマンドです。

センサを接続すると、最初にインテリジェントブロックからセンサに対して2つのコマンドが送られます。

Product ID(0x08)とRead Sensor Type(0x10)です。

そこで、NXT超音波センサと同じ内容を返します。

Product ID(0x08)→"LEGO"(0x4C, 0x45, 0x47, 0x4F, 0x00)

Read Sensor Type(0x10)→"Sonar"(0x53, 0x6F, 0x6E, 0x61, 0x72, 0x00)

Product IDが正しい場合、インテリジェントブロックからはNXT超音波センサ「NXT-US-CM」として認識されます。

Product IDが不明だと「IIC-BYTE」となります。I2C通信そのものに失敗すると「UNKNOWN」となり、以後、通信をしてくれません。

NXTは接続にProduct IDなどの問い合わせがありません。過去に製作したnicosensorは、このコマンドの応答機能を実装していませんでした。この機能を追加するとEV3へ対応できます。

距離測定のコマンドはRead Measurement Byte 0(0x42)です。測定値は1バイト(0~255)です。有効範囲は1~254となります。

コマンドについては「LEGO MINDSTORMS NXT Hardware Developer Kit」の「Appendix 7-LEGO MINDSTORMS NXT Ultrasonic Sensor I2C communication protocol.pdf」が参考になります。

動画

回路図

モジュラージャックとマイコンを直結して、プルアップするだけです。

A/D変換はポートC0から入力します。

センサ動作時はインテリジェントブロックから給電します。USBシリアル変換基板を接続するさいには、USBバスパワーと電源が衝突しないように注意してください。

接続例