2017年5月17日

  • EV3技術情報
  • Java
  • TETRIX技術情報
  • ソフトウェア
  • ソフトウェア

TETRIXをJava(leJOS)で動かすには-エンコーダー付きDCモータを動かす

Java(leJOS)で作成したプログラムで、TETRIXのエンコーダー付きDCモータを制御する方法を紹介します。

 

なお、DCモータの基本的な制御方法はこちらを、 180度サーボモータの制御方法はこちらご覧ください。
エンコーダーの取り付け方法はこちらをご覧ください。

 

※ここでは、TETRIXをEV3と接続して制御する方法を紹介します。
※EV3のJava言語プログラミング環境については、「教育版EV3 Javaプログラミングガイド」をご参照ください。
※ここで紹介する内容は、leJOS EV3 バージョン 0.9.1-betaを用いて動作を確認したものです。
※ここで紹介する内容は、仕様変更前のDCモーターコントローラー(商品型番:PI-W34303)とDCギアモーター(商品型番:PI-W39530)を使用したものです。仕様変更後のTETRIX MAX DC Motor Expansion Controller(商品型番:PI-W44354)とTETRIX TorqueNADOモーター(商品型番:PI-W44260)では動作しませんのでご注意ください。
仕様変更前後の製品についてはこちらをご覧ください

 

◆ロボット
・DCモーターコントローラーはEV3のセンサーポート1に接続します。
・DCモーターコントローラーのMotor1にDCモータを接続します。
・エンコーダーのコネクターケーブルは、DCモーターコントローラーのEnc.1に接続します。

 

◆サンプルプログラム
このプログラムは、DCモータを角度を指定して制御します。

1import lejos.hardware.Button;
2import lejos.hardware.device.tetrix.TetrixControllerFactory;
3import lejos.hardware.device.tetrix.TetrixEncoderMotor;
4import lejos.hardware.device.tetrix.TetrixMotorController;
5import lejos.hardware.lcd.LCD;
6import lejos.hardware.port.SensorPort;
7import lejos.utility.Delay;
8
9public class Encoder {
10
11  public static void main(String[] args) {
12
13    // DC Motor Controller
14    TetrixControllerFactory cf = new TetrixControllerFactory(SensorPort.S1);
15    TetrixMotorController mc = cf.newMotorController();
16
17    // DCモータ(エンコーダー付き)
18    TetrixEncoderMotor mot1 = mc.getEncoderMotor(TetrixMotorController.MOTOR_1);
19
20    // リセット
21    mot1.resetTachoCount();
22
23    // 正転
24    mot1.setPower(50);
25    mot1.forward();
26    Delay.msDelay(1000);
27    mot1.stop();
28
29    // 回転角度を表示
30    LCD.clear();
31    LCD.drawString("tacho = " + mot1.getTachoCount(), 0, 5);
32    Button.waitForAnyPress();
33    LCD.clear();
34    LCD.refresh();
35
36    // 0度(スタート時)の位置まで回転
37    mot1.setPower(10);
38    mot1.rotateTo(0, false);
39
40    // 720度の位置まで回転
41    mot1.rotateTo(720, false);
42    // 360度回転
43    mot1.rotate(360, false);
44
45    // 回転角度を表示
46    LCD.drawString("tacho = " + mot1.getTachoCount(), 0, 5);
47    Button.waitForAnyPress();
48    LCD.clear();
49    LCD.refresh();
50  }
51}

 

最初にエンコーダーのカウントをリセットしています。(21行目)

 

DCモータをパワー50でプラス方向に1秒間回転させ(24~27行目)、それによって回転した角度をEV3の液晶画面に表示します。(31行目)
次にDCモーターコントローラーを0度(1秒間回転する前)の位置までパワー10で回転させます。(37・38行目)ここでDCモータは0度の位置まで回転するため、マイナス方向に回転します。

 

続いてDCモータを720度の位置まで回転させます。(41行目)回転する前のDCモータは0度の位置にあるため、プラス方向に720度回転します。
最後にDCモータを360度回転させ(43行目)、現在の回転角度をEV3の液晶画面に表示します。(46行目)
rotateToメソッドは、回転量を0度の位置からの絶対値で指定しますが(41行目)、rotateメソッドは回転量を現在地からの相対値で指定します。(43行目)

 

※サンプルプログラムは一例として紹介しています。誤り等が含まれていた場合はご了承ください。

 

◆メソッド サンプルプログラムの中で使用している主なエンコーダー付きDCモータ関連のメソッドは以下のとおりです。

 

public void resetTachoCount()

エンコーダーの値をリセットする。

public int getTachoCount()

エンコーダーの値を取得する。

public void rotateTo(int limitAngle, boolean immediateReturn)

DCモータを指定した位置(角度)まで回転させます。

 

引数limitAngleにはどの位置(角度)まで回転させるかを指定します。角度はエンコーダーの0度の位置からの絶対値で指定します。単位は「度」です。

 

引数immediateReturnは、trueを指定した場合DCモータの回転完了を待たず次の処理へ移ります。falseを指定した場合DCモータの回転完了を待って次の処理へ移ります。

public void rotate(int degrees, boolean immediateReturn)

DCモータを指定した角度だけ回転させます。

 

引数degreesには回転させる角度を指定します。角度は現在位置からの相対値で指定します。単位は「度」です。

 

引数immediateReturnは、trueを指定した場合DCモータの回転完了を待たず次の処理へ移ります。falseを指定した場合DCモータの回転完了を待って次の処理へ移ります。

 

詳しくは以下のページをご覧ください。

http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixEncoderMotor.html

(2017/05/09現在)