2016年8月9日火曜日

Johnny-Fiveでマイコン制御21 - コンパス・ジャイロ・GPS

○Compassオブジェクトを作成する
 電子コンパスのデータを取得するには、Compassオブジェクトを使います。Compassオブジェクトは、物理的なボードに接続された単一の電子コンパスや磁力計を表すオブジェクトです。Compassオブジェクトを作成するには、Compassクラスのコンストラクタを使います。「controller」プロパティにデバイス名を指定します。
new five.Compass({
  controller: デバイス名
});
 Johnny-Fiveのサポートする電子コンパス・デバイスは、「HMC5883L」「HMC6352(生産中止)」「BNO055」「MAG3110」の4つです。


電子コンパスの測定データを取得する
電子コンパスの測定データを取得するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。
on("イベント", ハンドラ)

 Compassオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
change
方位が変更されたときに発生する
data
25ミリ秒(freq」プロパティで変更可)間隔で発生する

取得した値は、次のプロパティで参照することができます。
プロパティ
プロパティ
heading
北を基準にした方位(0360)
bearing
関連するベアリング情報のプロパティのオブジェクト

bearingオブジェクト
プロパティ
説明
name
方位名(例:「North」「South」「Wast」「Eest)
abbr
短縮した方位名(例:「N」「S」「E」「W)
low
32方位(方位間隔11.15)での現在の方角の最小角度
mid
32方位(方位間隔11.15)での現在の方角の中間角度
high
32方位(方位間隔11.15)での現在の方角の最大角度

 たとえば、HMC5883L電子コンパスの方位と方位名を取得するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Compassオブジェクトを作成
  var compass = new five.Compass({
                  controller: "HMC5883L"
                });

  // データ取得
  compass.on("data", function() {
    console.log("  heading : ", Math.floor(this.heading));
    console.log("  bearing : ", this.bearing.name);
    console.log("--------------------------------------");
  });
});

・配線図
 

電子コンパスのデータの読み取り間隔を設定する
 電子コンパスのデータの読み取り間隔(data」イベントの間隔)を設定するには、オプションの「freq」プロパティを使います。値にはミリ秒単位の時間を指定します。たとえば、5000ミリ秒(5)間隔でデータを読み取るには、次のように書きます。
  var compass = new five.Compass({
                  controller: "HMC5883L"
                 freq: 5000
                });

○Gyroオブジェクトを作成する
 ジャイロセンサーの測定データを取得するには、Gyroオブジェクトを使います。Gyroオブジェクトは、物理的なボードに接続された単一のジャイロセンサーを表すオブジェクトです。Gyroオブジェクトを作成するには、Gyroクラスのコンストラクタを使います。
 Johnny-Fiveのサポートするジャイロセンサーは、アナログインターフェイスの「LPR5150」と、I2Cインターフェイスの「MPU6050」と「BNO055」です。
 アナログインターフェイスのジャイロセンサーを使用するためのGyroオブジェクトを作成するには、オプションの「pins」プロパティにジャイロセンサーのXY、およびZ(オプション)出力を接続するアナログピンの名前を配列で指定します。
new five.Gyro ({
  pins: [x, y, z]
});

I2Cインターフェイスのジャイロセンサー場合は、「controller」プロパティに使用するジャイロセンサーのデバイス名を指定します。たとえば、MPU6050を使用する場合は、次のように書きます。
new five.Gyro({
  controller: "MPU6050"
});

・配線図















オプションを指定してGyroオブジェクトを作成する
 Gyroオブジェクトは、次のオプションを指定して作成することができます。

・アナログオプション(controller: "ANALOG")
プロパティ
タイプ
/説明
既定値
sensitivity
数値
感度

resolution
数値
分解能(デバイスにより異なる)
4.88

MPU6050オプション(controller: "MPU6050")
プロパティ
タイプ
/説明
既定値
sensitivity
数値
感度(±250の範囲)
131

ジャイロセンサーの測定データを取得する
ジャイロセンサーの測定データを取得するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。
on("イベント", ハンドラ)

 Gyroオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
change
ジャイロの値が変更されたときに発生する
data
25ミリ秒間隔で発生する

取得した値は、次のプロパティで参照することができます。
プロパティ
説明
isCalibrated
デバイスのキャリブレーション状態
pitch
ピッチ角を含むオブジェクト
roll
ロール角を含むオブジェクト
yaw
ヨーレートの値を含むオブジェクト
rate
XY、およびZの速度値を含むオブジェクト.
x
x方向加速度
y
y方向加速度
z
z方向加速度

 たとえば、MPU6050のジャイロセンサーのデータを取得するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // gyroオブジェクトを作成
  var gyro = new five.Gyro({
               controller: "MPU6050"
             })

  // データ取得
  gyro.on("change", function() {
    console.log("gyro");
    console.log("  x            : ", this.x);
    console.log("  y            : ", this.y);
    console.log("  z            : ", this.z);
    console.log("  pitch        : ", this.pitch);
    console.log("  roll         : ", this.roll);
    console.log("  yaw          : ", this.yaw);
    console.log("  isCalibrated : ", this.isCalibrated);
    console.log("--------------------------------------");
  });
});

・配線図

○GPSオブジェクトを作成する
 GPS(Global Positioning System:全地球測位システム))受信機のデータを取得するには、GPSオブジェクトを使います。GPSオブジェクトは、物理的なボードに接続された単一のGPSを表すオブジェクトです。
Johnny-FiveのサポートするGPSデバイスは、次のとおりです。
MediaTek MT3339
G-Top LadyBird 1 (PA6H)

GPSオブジェクトを作成するには、GPSクラスのコンストラクタを使います。引数には、シリアル通信の「RX」ピンと「TX」に使用するピンの番号を指定します。
new five.GPS([RX, TX]);

 たとえば、Arduino11ピンをRX10ピンをTXに使用する場合は、次のように指定します。
new five.GPS([11, 10]);

 オプションの「pins」プロパティでピン番号を指定する場合は、次のように書きます。
new five.GPS({
  pins: {rx: 11, tx: 10}
})

Adafruit Ultimate GPS Breakoutを使用する場合は、「breakout」オプションに「ADAFRUIT_ULTIMATE_GPS」を指定します。
new five.GPS({
  pins: {rx: 11, tx: 10},
  breakout: "ADAFRUIT_ULTIMATE_GPS"
});

・配線図
GPSArduinoTXRXはクロス接続になることに注意してください。

○GPSの測定データを取得する
GPSの測定データを取得するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。
on("イベント", ハンドラ)

 GPSオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
message
有効なメッセージ(NMEAセンテンス)を受信したときに発生する
operations
衛星オペレーションの詳細を受信したときに発生する
acknowledge
acknowledge」メッセージを受信したときに発生する
unknown
有効ですが、認識されないメッセージを受信したときに発生する
change
位置が変更されたときに発生する
navigation
速度や方向が変更されたときに発生する

取得した値は、次のプロパティで参照することができます。
プロパティ
説明
latitude
現在の緯度
longitude
現在の経度
altitude
現在の高度
sat
衛星オペレーションの詳細{PDOPHDOPVDOP}
course
現在のコース
speed
現在の対地速度
time
最後の修正の時間

 たとえば、経度と緯度を取得するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {

  // GPSオブジェクトを作成
  var gps = new five.GPS([11, 10]);

  // 経度、緯度を取得
  gps.on("change", function() {
    console.log("position");
    console.log("  latitude   : ", this.latitude);
    console.log("  longitude  : ", this.longitude);
    console.log("--------------------------------------");
  });
});

○GPS測位の更新頻度を設定する
 GPS測位の更新頻度は、オプションの「frequency」プロパティで設定します。値には周波数をHz単位で指定します。既定値は「1」です。たとえば、更新頻度を10Hzに設定するには、次のように書きます。
  var gps = new five.GPS(
               pins: {rx: 11, tx: 10},
               frequency :10
            });

○GPS測位データの小数点以下の桁数を設定する
 GPS測位データの小数点以下の桁数は、オプションの「fixed」で設定します。既定値は、「6」です。たとえば、GPS測位データの小数点以下の桁数を2桁に設定するには、次のように書きます。
  var gps = new five.GPS({
               pins: {rx: 11, tx: 10},
               fixed :2
            });

○GPSをハードウェアシリアルポートに接続して使用する
 GPSは通常、ソフトウェアシリアルを使って、ボーレート9600bpsで通信を行います。これ以外の通信速度で通信したい場合は、ハードウェアシリアルポートを使用します。ハードウェアシリアルポートを使用するには、オプションの「port」プロパティにシリアルポート名を、「baud」にボーレートを指定します。
 たとえば、Arduino MEGA 2560のハードウェアシリアルポート3を使って、4800bpsで通信するには、次のように書きます。
  var gps = new five.GPS({
               port: this.io.SERIAL_PORT_IDs.HW_SERIAL3,
               baud :4800
            });

○GPSのチップセットにコマンドを送信する
 GPSのチップセットにコマンド(NMEAコマンド)を送信するには、「sendCommand」メソッドを使います。引数には送信するコマンドを文字列で指定します。チェックサムと改行コード(CRLF)は自動的に追加されます。
sendCommand(コマンド文字列)

NMEAコマンドについては、次のWebページを参考にしてください。



0 件のコメント:

コメントを投稿