2013年6月29日土曜日

NXShield-Mx を試してみました。あと、Arduino for Visual Studioも。

 今日のガラクタは、 NXShield-Mx です。


 以前、Mindstorms NXT を始めた時に、まず、最初にケーブルをちょん切って、ArduinoとのI2C通信とRS485通信を試してみました。どうやらI2C通信はソフトウェアで行なっているようで、通常の100k/300kbpsの通信速度ではなく、9600bpsくらいで行なっているようでした。RS485は115200bpsでも通信出来ましたが、おそらくNXT側はもっと高速なレートでもいけるんじゃないでしょうか。
 さて、RS485でのNXTコントローラとArduinoの通信が出来れば、Arduino側にI2Cやアナログ入力、デジタル入出力のセンサやデバイス類を接続して、RS485での通信でNXTコントローラからのやり取りも可能になるわけですが、「簡単な内容ならいっそArduinoから直接モータとかセンサを制御しちゃってもいいんじゃない?」っていう発想もでてきます。実際、ネットで検索するとそういうことをされている方もいて、シールドなんかも自作しているんですが、今回は上記の市販のシールドを見つけたので、試してみようと思います。ライブラリも提供されているので、自分でMindstormsの仕様(オープンになっている)を見て、ゴニョゴニョする手間が省けます。
 何よりも、今回、これを試してみようと思ったきっかけは、NXTのBluetoothと自分?の相性があまりにも悪いので、いっそ、Arduinoでやるか?BluetoothにしてもArduinoならUART-Bluetoothアダプタ使えば実績あるし・・・。っていうのがありました。


 通常のArduinoのシールドと比べると非常に大きなものです。裏返してみると、こんな感じです。


 Arduinoにかぶさるようにして、Mindstorms のモジュラージャックが配置されています。また、ラジコンサーボなどを接続するためのピンヘッダもあります。


 NXShieldの基板は5mmくらの厚みがあり、実際には2枚の基板のサンドイッチになっていて内部に回路が実装されているようです。基板の数カ所にLEGOのシャフトに合わせた十字の穴が開いているので、これを利用してブロックに固定することができます。


 とりあえず、モータを動かすサンプルプロジェクトを動かしてみました。


 普段Arduinoでのプログラミングに慣れている人にはいいかも。シールドをスタックしたり、アナログ入力でセンサを使ったりも自由度が高いし。

 それと、今回、Arduinoのプログラミングの環境として、Arduino for Visual Studio (Visual Micro)というのを偶然見つけたので試してみました。フリーで利用できる(有料ライセンスキーを購入するとデバッグ機能が使えるらしい。ソフトモニタみたいなものかな?)ようなので、普段、Visual Studioに慣れている自分にはありがたいものを見つけました。コード補完もしてくれるし。(ちなみに自分の環境では、Arduino-IDE1.0.5ではコンパイルでエラーが出てしまい、1.0.4にしたらうまくいきました。)


 30日間は、評価版としてデバッグ機能も試せるみたいなので、今度試してみよう。