Changes between Initial Version and Version 1 of R1350N


Ignore:
Timestamp:
Jul 18, 2012 2:51:14 PM (10 years ago)
Author:
maki
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • R1350N

    v1 v1  
     1= R1350Nジャイロセンサで遊んでみる =
     2
     3スイッチサイエンスでは2012年の7月からマイクロインフィニティ社製のジャイロセンサR1350Nの取り扱いをはじめました。
     4R1350Nジャイロセンサはシリアル接続なので、データを読むだけならとても簡単です。
     5Arduinoに繋いでデータを読み込んでみました。
     6
     7== Arduinoに接続するには ==
     8このジャイロセンサは2mmピッチです。しかも、接続する部分がスルーホールを真ん中で割ったような形になっています。
     9そのため、ブレッドボードにさしたり、Arduinoに接続したりするには、ちょっと工夫が必要です。
     10スイッチサイエンスで実験をするときは、足を伸ばしてみたり、別のピッチ変換基板を使ってみたり、多少工夫をしました。
     11どのようにするかはお任せしますが、ピッチを変更したり足を伸ばしたりしないと使いにくいのでご注意ください。
     12
     13== Arduinoに繋いでデータを読み込んでみる ==
     14今回はArduino Unoを使って試してみました。
     15データを読み込むだけなら、R1350NのVDD,GND,TxDの3つをArduino Unoの対応するピンに繋ぐだけです。
     16 * Arduinoの5VとR1350NのVDD(1番ピン)を繋ぐ。
     17 * ArduinoのGNDとR1350NのGND(2番ピン)を繋ぐ。
     18 * ArduinoのD0(RX)とR1350NのTxD(11番ピン)を繋ぐ。
     19
     20Serialの速度は出荷時状態では115200bpsとなっています。
     21115200bpsだとハードウエアシリアルを使ったほうが安全なのでD0(RX)と接続しました。
     22D0を使うとIDEに付属しているシリアルモニタが使えないので表示にはLCDを使用します。
     23LCDの制御はArduinoの標準ライブラリLiquidCrystalを使用し、
     24rwをGNDに接続、データ転送4bitモードで接続しました。
     25
     26シリアルで読み込めるデータは以下の通りです。
     27
     28{{{
     291:HEADER(0xaa固定値)
     302:HEARER(0x00固定値)
     313:index(0x00〜0xffのカウンター)
     324:ANGLE(Low)
     335:ANGLE(High)
     346:RATE(Low)
     357:RATE(High)
     368:X-axis(Low)
     379:X-axis(High)
     3810:Y-axis(Low)
     3911:Y-axis(High)
     4012:Z-axis(Low)
     4113:Z-axis(High)
     4214:Reserved(?)
     4315:Checksum(3〜14までの値を足した8bit)
     44}}}
     45
     46
     47以下が今回作成したスケッチです。
     48
     49{{{
     50#!C
     51
     52#include <LiquidCrystal.h>
     53
     54#define RS_PIN 12
     55#define ENABLE_PIN 11
     56#define D4_PIN 5
     57#define D5_PIN 4
     58#define D6_PIN 3
     59#define D7_PIN 2
     60
     61int state, counter;
     62byte buffer[15];
     63LiquidCrystal lcd(RS_PIN, ENABLE_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);
     64
     65void setup() {
     66  Serial.begin(115200);
     67  lcd.begin(16, 2);
     68  state = 0;
     69  counter = 0;
     70}
     71
     72void loop() {
     73  if (Serial.available() > 0) {
     74    byte data = Serial.read();
     75    switch (state) {
     76      case 0:
     77        if (data == 0xaa) state++;
     78        break;
     79      case 1:
     80        if (data == 0x00) state++;
     81        else {
     82          counter = 0;
     83          state = 0;
     84        }
     85        break;
     86      case 2:
     87        buffer[counter++] = data;
     88        if (counter >= 13) {
     89          int sum = 0;
     90          for (int i = 0;i < 11;i++) sum += buffer[i];
     91          if ((sum & 0xff) == buffer[12]) {
     92            lcd.clear();
     93            disp5(0, 0, "A:", (buffer[2] << 8) | buffer[1]);  // angle
     94            disp5(0, 1, "X:", (buffer[6] << 8) | buffer[5]);  // accX
     95            disp5(9, 1, "Y:", (buffer[8] << 8) | buffer[7]);  // accY
     96            disp5(9, 0, "Z:", (buffer[10] << 8) | buffer[9]);  // accZ
     97            delay(100);
     98            Serial.flush();
     99          }
     100          state = 0;
     101          counter = 0;
     102        }
     103        break;
     104    }
     105  }
     106}
     107
     108void disp5(int posX, int posY, String str, int num) {
     109  lcd.setCursor(posX, posY);
     110  lcd.print(str);
     111  posX += 6;
     112  if (abs(num) >= 10000) posX -= 4;
     113  else if (abs(num) >= 1000) posX -= 3;
     114  else if (abs(num) >= 100) posX -= 2;
     115  else if (abs(num) >= 10) posX--;
     116  if (num < 0) posX--;
     117  lcd.setCursor(posX, posY);
     118  lcd.print(num, DEC);
     119}
     120
     121}}}
     122
     123== LCDモニタに表示されるパラメタ ==
     124 * A:Z軸に対する回転角(-18000〜18000、1周で36000)
     125 * X、Y、Z:それぞれの加速度(重力加速度含む:1G=1000)
     126  * 平面に置いた場合、X = 0、Y = 0、Z = 1000(Z軸が下向きに1Gかかっている為)
     127
     128== やってみて ==
     129内部補正がきちんとされている為か、机の上に置いておくと値は±1〜2しかぶれませんでした。ぜひぜひお試しください。