Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その66 もういちどR1350N

2015-02-18 | Arduinoねた

以前に購入した R1350N ですが・・・

サンプルプログラムが動作することを確認して、それ以降放置していました。

 

先日、「ハイテク、ロ-テク」の記事を書いた後に・・・

そういえば、M&Yも高価なジャイロセンサーを使っていたなぁ

というのを思い出して、その技術を安価に実現できないか研究をしてみようと考えました。

 

まず・・・M&Yのロボットに搭載していたジャイロセンサーは CruizCore® XG1300L というものです。発売当時は、結構話題になりました。日本でも普通に買えていたのですが・・・いつのまにか簡単には購入できなくなったようです。正確には購入できなくなったわけではなく「簡単に購入ができない」です。

XG1300L は MICROINFINITY という会社(韓国の会社!?)の製品ですが、日本支社をクローズしてしまったのが原因のようです。

で、今、普通に買うとしたら、本社(韓国!?)から個人輸入するしかなさそうです。

CruizCore® XG1300L

ここで購入すると、価格85USD+送料25USDで合計110USDなのですが・・・

今は円安なので、結構な値段ですよね。(以前は 9,000円位で購入したような記憶が・・・)

 

で・・・その XG1300L の中身と思われるモジュールも売られています。

それが、R1350Nです。

CruizCore® R1350N

X1300Lに比べて、こちらの方が安いと思うのですが・・・価格は 170USD もします。

 

しかし・・・何故か・・・この R1350N は、スイッチサイエンスで 3,394円 で販売されています。

この価格のからくりが、良く分かりません。

でも、とにかく、私たちはスイッチサイエンスで購入しました。

 

ここまでで、長い前置きが終了です。(苦笑)

 

これまで、スイッチサイエンスのHPにあった(リンクされていた)記事のサンプルプログラムを動作させて「動いた、動いた」と満足していたのですが・・・そろそろ、ちゃんと動作を理解しようと重い腰を上げました。

 

R1350NとArduinoはシリアル通信で接続します。

接続は簡単で、R1350Nには、VCCとGND、そして TX を Arduino の RX0 に接続します。

つまり、電源とGND以外には、配線は1本だけです。

ただし、この1本が曲者で、この線(RX0に接続した線)を外さないと、Arduinoへの書き込みができません。

ですから、Arduinoへの書き込みの度に、RX0への配線を外します。(面倒くさい・・・です)

 

R1350Nは 115200bps のシリアル通信をします。

一組のデータは15バイトです。

1-2: 信号の始まり 0x00AA

3: インデックス

4-5: 角度(0.01度単位で100倍した値)

6-7: 角速度(0.01度/秒単位で100倍した値)

8-9: x軸加速度(1mg単位)

10-11: y軸加速度(1mg単位)

12-13: z軸加速度(1mg単位)

14: 予約

15: チェックサム(3-14バイトのデータの合計の下位バイト)

となります。

 

サンプルプログラムを解析(するほどでもないけど)した結果・・・

・シリアル通信で、データの受信を待ち

・最初の2バイトが 0xaa,0x00 であることを確認して

・残りの13バイトを取り込む

・最後にチェックサムを確認して取り込んだ13バイトが正しい場合に、LCDに値を表示する

単純に書くとこのような動きですね。

 

これを、自分なりに整理して簡略化したのが、以下のプログラムです。

 

#include < LiquidCrystal.h >
byte buffer[15];
LiquidCrystal lcd(6,7,8,9,10,11,12);

void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
}

void loop() {
  byte data;
  int sum,i;
  static int state = 0;
  static int index = 0;
  while(Serial.available() == 0);
  data = Serial.read();
  if(state == 0) {
    if(data == 0xaa)
      state++;
  }
  else if(state == 1) {
    if (data == 0x00)
      state++;
    else {
      state = 0;
      index = 0;
    } 
  }
  else {
    buffer[index++] = data;
    if (index >= 13) {
      sum = 0;
      for (i = 0; i < 11; i++)
        sum += buffer[i];
      if ((sum & 0xff) == buffer[12]) {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("A:");
        lcd.print((buffer[2] << 8) | buffer[1],DEC);
        delay(100);
        Serial.flush();
      }
      state = 0;
      index = 0;
    }
  }
}

 

これで、角度(×100の値)がLCDに表示されます。

ただし、上に書いたように、Arduinoへの書き込みの時には RX0 の配線を外して、書き込みが終わったら RX0 を接続します。その後に R1350N の電源を入れなおすと、やっと正しく動作します。

 

で、実際に動作しているところを見てみると・・・このセンサーは優秀ですよね。

普通のジャイロセンサーなら、見ていると少しづつ値がズレていきます。(ドリフトと言うのでしたっけ!?)

でも、R1350Nは、時間が経過しても、ほとんどズレません。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Rescue Line 2015 2.4 Inspec... | トップ | Rescue Line 2015 2.5 Violat... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Arduinoねた」カテゴリの最新記事