さて、R1350Nが使えて、NXTとのI2C接続ができたら・・・(復習しただけですけど・・・)
やりたかったのは、慣性センサーであるXG1300Lもどきを安価に作ることです。
現状で(個人輸入をせずに)普通に買えるのかは知りませんが、かつては10,000円程度していました。それを 1/3程度でできれば、大変リーズナブルなセンサーになるかと・・・
で、作業は結構簡単で、ちょっと前の2つの記事の内容を合体するだけです。
NXTとArduinoはI2C接続
ArduinoとR1350Nはシリアル接続
です。
XG1300Lに合わせて、NXTからのI2Cアドレスは 0x02 にしました。
その他も XG1300L に合わせて、角度を読む場合は 0x42 を指定します。
byte Wbuf[] = {0x02, 0x42 };
byte Rbuf[2];
int i=2;
I2CBytes(IN_1,Wbuf,i,Rbuf);
プログラムはこんな感じですね。
これで、Arduino から角度の数値 2byte を送付してもらいます。
Arduino 側では、アドレス 0x02 を監視していて、次の 1byte が 0x42 なら取得した角度の2byte を送り出します。
R1350Nからの読出しは良いとして、リセットはどうするのでしょうか・・・
本来であれば、シリアルでリセットコマンドを書き込むのが正しいようなのですが・・・私のプログラミング技術では無理なようなので、単純にRESET端子をOFF、ONにします。ONの立ち上がりの時にリセットがかかるようです。
まとめると
I2Cアドレス:0x02
角度の読み込み:0x42
加速度センサー(X軸):0x46
加速度センサー(Y軸):0x48
加速度センサー(Z軸):0x4A (使わないけど・・・)
リセット:0x60
これで、とりあえず XG1300L と似た動きができそうです。
プログラムを作って実行させると・・・
ちゃんとNXTにセンサーの値が表示されました。
ここまでは順調です。
Arduino NANO を使用しての実験は、とりあえず成功しました。
で・・・ここからが本題です。
ATMEGA168を使用した、簡易ArduinoでセンサーとNXTを接続してみます。
ブレッドボードに配線してNXTと接続します。
NXTのプログラムを実行すると ERROR になります。
なんで!?
いろいろ確認してみると・・・
単に、使用したブレッドボード用のケーブルの端子が(錆びていたのか)接触不良でした。
接触のよさそうなケーブルに変更して、実行してみると・・・
NXTに数字が表示されるのですが・・・おかしな値です。(4桁とか・・・)
センサーを回転させても、数字が変わったり変わらなかったり・・・ダメだ!!
そもそも、通信が遅いです。
いろいろやったけど、明確な原因は不明です。
いまのところの、想像では、8MHzのArduinoでは、シリアルの高速通信が追い付いていないのではないかと・・・
ということで、気が向いたら続きをやりたいと思います。