2017年5月17日

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

TETRIXをJava(leJOS)で動かすには-180度サーボモータを動かす

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

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

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

◆ロボット
・サーボモーターコントローラーはEV3のセンサーポート1に接続します。
・サーボモーターコントローラーのChan.1に180度サーボモータを接続します。

◆サンプルプログラム
このプログラムは、サーボモータを指定した位置まで回転させます。

1import lejos.hardware.Button;
2import lejos.hardware.device.tetrix.TetrixControllerFactory;
3import lejos.hardware.device.tetrix.TetrixServo;
4import lejos.hardware.device.tetrix.TetrixServoController;
5import lejos.hardware.lcd.LCD;
6import lejos.hardware.port.SensorPort;
7import lejos.utility.Delay;
8
9public class ServoMotor {
10
11  public static void main(String[] args) {
12    // Servo Motor Controller
13    TetrixControllerFactory cf = new TetrixControllerFactory(SensorPort.S1);
14    TetrixServoController sc = cf.newServoController();
15
16    // Servo Motor
17    TetrixServo srv = sc.getServo(TetrixServoController.SERVO_1);
18
19    // 0度の位置まで回転
20    srv.setAngle(0);
21    Delay.msDelay(1000);
22
23    // 180度の位置まで回転
24    srv.setAngle(180);
25    Delay.msDelay(1000);
26
27    // 現在位置(角度)を表示
28    LCD.clear();
29    LCD.drawString("angle = " + srv.getAngle(), 0, 5);
30    Button.waitForAnyPress();
31    LCD.clear();
32    LCD.refresh();
33
34  }
35}

まずはTetrixControllerFactoryを生成します。(13行目)引数にはサーボモーターコントローラーが接続されているEV3のセンサーポートを指定します。 次にサーボモーターコントローラーを定義します。(14行目) 続いてサーボモータを定義します。(17行目)引数にはサーボモータが接続されているサーボモーターコントローラーのチャンネルを指定します。

setAngleメソッドでサーボモータを指定した位置まで回転させます。(20・24行目) setAngleメソッドはサーボモータの回転が完了する前に次の処理へ移るため、回転の完了を待つ処理が必要です。(21・25行目) 最後にサーボモータの位置(角度)をEV3の液晶画面に表示します。(29行目)

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

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

コンストラクタ:

public TetrixControllerFactory(Port port)

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

メソッド:

public TetrixServoController newServoController()

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

public TetrixServo getServo(int servoID)

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

public void setAngle(float angle)

指定した位置までサーボモータを回転させる。
引数の単位は「度」。

public float getAngle()

サーボモータの現在位置(度)を取得する。

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

http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixControllerFactory.html
http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixServoController.html
http://www.lejos.org/ev3/docs/lejos/hardware/device/tetrix/TetrixServo.html

(2017/05/09現在)

SPIKE