[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バスパワーと電源が衝突しないように注意してください。
接続例