2017年5月17日

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

TETRIXをJava(leJOS)で動かすには-DCモータを動かす

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

 

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

 

※ここでは、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モータを2つ用いた車型とします。
・DCモーターコントローラーはEV3のセンサーポート1に接続します。
・DCモーターコントローラーのMotor1には右タイヤのDCモータを、Motor2には左タイヤのDCモータを接続します。

 

◆サンプルプログラム
このプログラムは、パワー20で2秒間前進した後、パワー10で2秒後退します。

1import lejos.hardware.device.tetrix.TetrixControllerFactory;
2import lejos.hardware.device.tetrix.TetrixMotor;
3import lejos.hardware.device.tetrix.TetrixMotorController;
4import lejos.hardware.port.SensorPort;
5import lejos.utility.Delay;
6
7public class DcMotor {
8
9  public static void main(String[] args) {
10    // DC Motor Controller
11    TetrixControllerFactory cf = new TetrixControllerFactory(SensorPort.S1);
12    TetrixMotorController mc = cf.newMotorController();
13
14    // DC Motor
15    TetrixMotor mot1 = mc.getBasicMotor(TetrixMotorController.MOTOR_1); // right
16    TetrixMotor mot2 = mc.getBasicMotor(TetrixMotorController.MOTOR_2); // left
17
18    // MOTOR2の回転方向を反転
19    mot2.setReverse(true);
20
21    // Set Power
22    mot1.setPower(20);
23    mot2.setPower(20);
24
25    // 前進
26    mot1.forward();
27    mot2.forward();
28    Delay.msDelay(2000);
29
30    // 停止
31    mot1.stop();
32    mot2.stop();
33
34    // Set Power
35    mot1.setPower(10);
36    mot2.setPower(10);
37
38    // 後退
39    mot1.backward();
40    mot2.backward();
41    Delay.msDelay(2000);
42
43    // 停止
44    mot1.stop();
45    mot2.stop();
46  }
47}

 

まずはTetrixControllerFactoryを生成します。(11行目)引数にはDCモーターコントローラーが接続されているEV3のセンサーポートを指定します。
次にDCモーターコントローラーを定義します。(12行目)
続いてDCモータを定義します。(15・16行目)引数にはDCモータが接続されているDCモーターコントローラーのチャンネルを指定します。
左タイヤのDCモータは、回転方向のプラスマイナスを逆に設定します。(19行目)
こうすることによって、forwardメソッドでDCモータをプラス方向に回転させた際、左タイヤのDCモータは通常のプラス方向と反対方向に回転し、ロボットは前進します。(27行目)

 

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

 

◆メソッド・コンストラクタ サンプルプログラムの中で使用している主なTETRIX関連のメソッド・コンストラクタは以下のとおりです。

 

コンストラクタ:

public TetrixControllerFactory(Port port)

TetrixControllerFactoryを生成する。
引数にはDCモーターコントローラーまたはサーボモーターコントローラーが接続されているインテリジェントブロックEV3のセンサーポートを指定する。

 

メソッド:

public TetrixMotorController newMotorController()

DCモーターコントローラーを定義する。

public TetrixMotor getBasicMotor(int motorID)

DCモータを定義する。
引数にはDCモータが接続されているDCモーターコントローラーのチャンネルを指定する。

public void setReverse(boolean reverse)

DCモータの回転方向のプラスマイナスを逆に設定する。
引数がtrueの場合、回転方向のプラスマイナスが本来と逆方向に設定される。

public void setPower(int power)

DCモータのパワーを設定する。パワーの範囲は0~100。

public void forward()

DCモータをプラス方向に回転させる。

public void backward()

DCモータをマイナス方向に回転させる。

public void stop()

DCモータの回転を停止させる。

 

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

http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixControllerFactory.html
http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixMotorController.html
http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixMotor.html

(2017/05/09現在)