オムニホイールを使ったこんなのを、
動かしてみたのですが、センサに関しては、結局NXTのタッチセンサをアナログ入力で拾えた以外は、全然ダメでした。EV3のセンサ類はタッチセンサを除いてUART接続なのではじめから諦めていたのですが、NXTの超音波センサはI2Cという噂?を聞いていたので期待していたのですが、通信速度やプロトコルの仕様が特殊なのか動作させることができませんでした。
そこで今回は、Mindsensor社の EV3 Sensor Adapter for NXT というのをためしてみることにしました。この EV3 Sensor Adapter for NXT はEV3のUART接続方式のセンサをNXTやArduinoで使えるようにするもので、内部的にはUARTとI2C通信の変換を行うアダプタと思われます。
当初 Mindsensor社のドキュメントに記述されたI2CアドレスでIchigoJamからI2C通信を試みたのですが、反応がなかったため、一旦Raspberry Pi(BrickPi)に接続して、i2cdetectで調べたところ、I2Cアドレスがドキュメントの記述とは違い、0x19になっていました。改めてIchigoJamで0x19に対して通信を行ったところ、無事データの取得ができました。今回調べたのはEV3用ジャイロセンサとEV3用超音波センサで、ジャイロセンサでは2byteのデータで-32768~32767くらいの範囲の値が、超音波センサでは1byteで30~250くらいの範囲の値が取得できました。超音波センサは本当は2bytで0~2550の範囲で値が取れるという資料があるので、ちょっとその辺と合わないのですが、今回1byteで取得できた30~250の値がちょうどmm単位(10で割ってcm単位)と考えると実際のセンサと障害物の距離に近かったので、これで良しとします。
今回はIchigoStorm type2 と EV3 Sensor Adapter for NXT と EV3超音波センサの組み合わせでタンクを動かしました。
プログラムは以下の感じ。行番号が不揃いなのは他のプログラムを流用して作ったためです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 CLT:CLV:A=#64:B=#65:C=#67:D=#68:E=0:F=0:S=#19 | |
20 L=0:R=0:gosub 110 | |
99 goto 410 | |
100 ' Set motor speed. | |
110 E=-L:F=-R | |
150 if E<0 then O=1 else O=2 | |
160 if E=0 then O=0 | |
170 O=O+(ABS(E)-5)<<2 | |
180 if F<0 then P=1 else P=2 | |
190 if F=0 then P=0 | |
200 P=P+(ABS(F)-5)<<2 | |
270 poke #700, 0, O, P | |
280 I=i2cw(A,#700,1,#701,1) | |
290 I=i2cw(B,#700,1,#702,1) | |
320 return | |
400 ' | |
410 wait(180) | |
420 L=100:R=100:gosub 110 | |
430 poke #705,#54 | |
440 I=i2cr(S,#705,1,#706,1) | |
450 J=peek(#706) | |
460 if J<200 then goto 490 | |
470 L=100:R=100:gosub 110 | |
480 wait(5):goto 440 | |
490 L=50:R=-50:gosub 110 | |
500 goto 440 |
EV3 Sensor Adaptor for NXT の中身はマイコンが入っていると思うのですが、同様なIchigoJamのI2Cに接続してUARTを拡張できるようなICや安価なマイコンがあれば、UARTの無い(コンソール用にはあるけど)IchigoJamに色々つなぐのに便利なんですが、そういうのは無いのかな?
0 件のコメント:
コメントを投稿