img_technologyTop01

製品をもっと詳しく知りたい方へ
技術研究所

EV3 Direct Commands for Android

EV3Command API操作方法(Android – EV3)

1 必要なもの 

EV3 とAndroid のBluetooth 通信を行うために以下のライブラリを作成しました。このライブラリはAndroid アプリを作成する際に利用してください。
EV3Command

必要な機材は以下のとおりです。
・ LEGO MINDSTORMS EV3
-モーター
-各種センサー
・Android 端末
-Bluetooth 内蔵

2 準備

2.1 ライブラリの取り込み

まずは,このライブラリを使用するプロジェクトA を作成します。そして,プロジェクトA にEV3Command のjar ファイル
を取り込む必要です。Eclipse での開発であれば,EV3Command をインポートし,プロジェクトA の「プロパティ>Android」
のLibrary の項目で「Add…」ボタンを押してEV3Command を追加します。(図1).

図1: ライブラリの追加

                                                図1: ライブラリの追加

2.2 Manifest への追加項目

プロジェクトA のAndroidManifest.xml にBluetooth を使用するために以下のコードを書きます。

                                 リスト1: AndroidManifest.xml への追加項目

<uses -permission android:name=”android.permission.BLUETOOTH” />
<uses -permission android:name=”android.permission.BLUETOOTH_ADMIN” />

2.3 ペアリング

Android とEV3 はBluetooth のペアリングをしておく必要があります。

3 使用手順

3.1 接続

接続にはEV3 のMAC アドレスを使い,BluetoothAdapter インスタンスのgetRemoteDevice(String) を用いて, BluetoothDevice
インスタンスを用意します。このインスタンスをライブラリに渡し,open() メソッドを用いると接続が完了します。概要を以下に示しました。

                                                                      リスト2: 接続

private BluetoothAdapter mBtAdapter = null;

// — —-

// Get default adapter
mBtAdapter = BluetoothAdapter.getDefaultAdapter();

// — —-

// Get the device MAC address
String address = hoge();
// Get the BluetoothDevice object
BluetoothDevice device = mBtAdapter.getRemoteDevice(address);

AndroidComm.getInstance().setDevice(device); // Set device

// Connect to EV3
try {
             EV3Command.open();
}
catch (Exception e) {
          // This exception also occurs when this device hasn’t
          // finished paring
          foo();
}

3.2 モーターの利用

モーターの利用の際には,Motor クラスを利用します。Motor クラスは,A~D のポートに対応して,Motor クラスでA~D が用意されています。
以下のようにMotor.A~Motor.D を使用できます。

                                                           リスト3: モーターのインスタンス

private Motor mLeftMotor = Motor.B;
private Motor mRightMotor = Motor.C;

接続を行った後に使用できるメソッドは以下のとおりです。

                                                                      リスト4: モーター

/**
 * Get the ID of the motor. One of ‘A’, ‘B’, ‘C’ or ‘D’.
 */
public final char getId()
/**
 * Causes motor to rotate forward.
 * @return Error value. 0x02 means success. 0x04 means fail.
 */
public int forward()
/**
 * Causes motor to rotate backward.
 * @return Error value. 0x02 means success. 0x04 means fail. 
 */
public int backward()
/**
 * Sets the motor speed.
 * NOTE: this method doesn’t send commands to EV3. To update the speed ,
 * use forward or backward method following this.
 * @param speed (0 ~ 100 %)
 */
public void setSpeed(int speed)
/**
 * Gets the current motor speed.
 * @return speed (0 ~ 100 %)
 */
public int getSpeed()
/**
 * Stops the motor using brakes.
 *
 * @return Error value. 0x02 means success. 0x04 means fail.
 */
public int stop()

3.3 センサーの利用

カラーセンサーやタッチセンサーなどのセンサーの種類をタイプといい,各センサーにはいくつかのモードがあります。例えば,カラー
センサーならば反射光の強さを受けるモード,何色か判断するモードなどです。現在用意しているセンサのタイプとモードは
以下のとおりです。

  • 共通

    -UnidentifiedSensor
     *センサーのパーセント値
     *センサーのSI 単位の値

  • NXT 用

    -LightSensor
     *反射したパーセント値(SI 値も同じ)(NOT TESTED)
    -SoundSensor
     *DB 値(NOT TESTED)
     *DBA 値(NOT TESTED)

  • EV3 用

    -TouchSensor
     *今おされているか(TESTED)
     *何回押されたか(TESTED)
    -ColorSensor
     *反射した光のパーセント値(SI 値も同じ)(TESTED)
     *周囲の明るさのパーセント値(TESTED)
     *色(9 色に判断できるようだが何色がどの数値に対応するかは未調査)(TESTED)

※センサーは,初めに取得した値が正しくない場合があります。そのため,モードを変更した際などは空読みを行っておくことをお勧めします。
センサーは1~4 のポートに対応して,SensorPort クラスでS1~S4 が定義されています。センサーを作成する際に,以下のように
S1~S4 を指定します。

                                        リスト5: センサーのインスタンス

private UnidentifiedSensor mUnidentifiedSensor = new UnidentifiedSensor(SensorPort.S1);
private TouchSensor mTouchSensor = new TouchSensor(SensorPort.S2);

 

3.3.1 接続されているセンサーがわからない場合

UnidentifiedSensor クラスを用います。使用できるメソッドは以下のとおりです。

                                                           リスト6: 不明なセンサー(共通)

/**
 * An unidentified sensor.
 * @param sensor
 * e.g. SensorPort.S1
 */
public UnidentifiedSensor(SensorPort sensor)
/**
 * Sets the type and mode of the sensor.
 * @param type
 * @param mode
 */
public void setTypeAndMode(int type , int mode)
/**
 * Gets the name of the sensor.
 * @return
 */
public String getName()
/**
 * Gets the SI unit value of the sensor.
 * @return
 */
public float getSiValue()
/**
 * Gets the percent value of the sensor.
 * @return
 */
public int getPercentValue()

3.4 LightSensor(NXT)

使用できるメソッドは以下のとおりです。

                                                           リスト7: 光センサー(NXT)

/**
* LightSensor.
 * NXT lights sensor.
 * @param sensor
 * e.g. SensorPort.S1
 */
public LightSensor(SensorPort sensor)

/**
 * Returns light reading as a percentage.
 *
 * @return 0 to 100 (0 = dark , 100 = bright)
 */
public int getLightPercent()

/**
 * Returns ambient light reading as a percentage.
 *
 * @return 0 to 100 (0 = dark , 100 = bright)
 */
public int getAmbientLightPercent()

3.5 SoundSensor(NXT)

使用できるメソッドは以下のとおりです。

                                                           リスト8: サウンドセンサー(NXT)

/**
* Used to detect the loudness of sounds in the environment.
 * NXT sound sensor.
 * @param sensor
 * e.g. SensorPort.S1
 */
public SoundSensor(SensorPort sensor)

/**
 * Returns the decibels measured by the sound sensor.
 *
 * @return dB – decibels
 */
public float getdB()

/**
 * Returns sound within the human hearing frequency range , normalized by
 * A-weighting. Extremely high frequency or low frequency sounds are not
 * detected with this filtering (regardless of loudness).
 *
 * @return dB(A) – decibels with A-weighting
 */
public float getdBA()

3.6 TouchSensor(EV3)

使用できるメソッドは以下のとおりです。

                                                          リスト9: タッチセンサー(EV3)

/**

 * EV3 touch sensor.
 * @param sensor
 * e.g. SensorPort.S1
 */
public TouchSensor(SensorPort sensor)

/**
 *
 * @return true if sensor is pressed.

 */
public boolean isPressed()

/**
 *
 * @return the number of bumped.
 */
public float getBumps()

3.7 ColorSensor(EV3)

使用できるメソッドは以下のとおりです。

                                                          リスト10: カラーセンサー(EV3)

/**
 * EV3 color sensor.
 * @param sensor
 * e.g. SensorPort.S1
 */
public ColorSensor(SensorPort sensor)

/**
 * Returns light reading as a percentage.
 *
 * @return 0 to 100 (0 = dark , 100 = bright)
 */
public int getLightPercent()

/**
 * Returns ambient light reading as a percentage.
 *
 * @return 0 to 100 (0 = dark , 100 = bright)
 */
public int getAmbientLightPercent()

/**
 * Returns color as a percentage.
 *
 * @return 0 to 100
 */
public int getColorPercent()

 /**
 * Returns color.
 *
 * @return 0 to 8
 * 4 – yellow ,
 * TODO investigation
 */
public float getColor()

4 既知の問題

接続の解除が正しく動作していません。接続解除は以下のように行います。

                                                               リスト11: 接続解除

// Close the connection
try {
            EV3Command.close();
}
catch (RuntimeException e) {
}

これは,内部でBluetoothSocket のclose() メソッドを使っているが,これを行うと次の接続時に失敗します。現在は,EV3 の
Bluetooth 機能を一旦立ち上げなおすことで解決しています。

 

Creative Commons License
LEGO Mindstorms Education technical information byAfrel. Co. Ltd. is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.

お問い合わせ

CONTACT

株式会社アフレル

本社/カスタマーセンター

〒918-8231 福井市問屋町3-111
TEL.0776-25-0303 FAX.0776-25-0309 info@afrel.co.jp
カスタマーセンター電話受付  9:30-17:30 (土日・祝日・年末年始を除く) MAP

東京支社

〒103-0001
東京都中央区日本橋小伝馬町2-8 新小伝馬町ビル5F
TEL.03-6661-9251 FAX.03-3249-3741 MAP

大阪事業所

〒532-0011
大阪府大阪市淀川区西中島3-7-8 NLC新大阪17号館302
TEL.06-4805-8788 FAX.06-4805-8789 MAP
  • 正規代理店

    LEGO education logo

  • PITSCO logo

  • NI logo

  • virtual robotics toolkit logo

資料内容の無断転載、複製を禁じます。
製作・著作 株式会社アフレル

Copyright 2017 Afrel Co.,Ltd. All Rights Reserved.

© LEGO, the LEGO logo, MINDSTORMS and the MINDSTROMS logo are trademarks of the LEGO Group.
© 2017 The LEGO Group.
レゴ、レゴのロゴマーク、レゴ マインドストームは、 レゴグループの登録商標です。