LoginSignup
3
3

More than 5 years have passed since last update.

【leJOS】JavaでEV3のモーターを制御しよう

Last updated at Posted at 2017-03-13

はじめに

この記事はleJOSの開発環境が整っていることが前提にしています。
詳しくはこちらの記事を参考にして下さい。

【leJOS】mindstorm-EV3をJavaでプログラミングしよう【環境構築前編】

【leJOS】mindstorm-EV3をJavaでプログラミングしよう【環境構築後編】

概要

leJOSでEV3のモーターを制御するAPIの一部を紹介します。
基本的なモーター制御は紹介するメソッドだけ抑えておけば実現できるでしょう。
また、具体的にどのようにAPIを利用すればいいのかを簡単なサンプルプログラムで示したいと思います。

API

LモーターをEV3本体のポートAに接続しましょう。
(Lモーター)

EV3LargeRegulatedMotorクラス

Lモーターの制御にはEV3LargeRegulatedMotorクラスが利用できます。

RegulatedMotor m = new EV3LargeRegulatedMotor(MotorPort.A);

メソッド

主に利用するメソッドを紹介します。

addListener

public void addListener(RegulatedMotorListener listener)

モーターの回転開始、停止のイベントを登録できます。

removeListener

public void removeListener()

イベントを削除します。

forward

public void forward();

モーターを正回転させます。
stopが呼ばれるまで停止しません。

backward

public void backward()

モーターを逆回転させます。
stopが呼ばれるまで停止しません。

stop

public void stop()

モーターを停止させます。

rotate

public void rotate(int angle)

現在位置から相対的に、引数に指定した角度分回転します。

rotateTo

public void rotateTo(int limitAngle)

引数に指定した絶対角度まで回転します。

close

public void close()

モーターへのアクセスを閉じ、リソースを解放します。

flt

public void flt()

モーターをフロートモードに設定します。
制動なしでモーターが停止するため、モーターの位置は維持されません。

getSpeed

public int getSpeed()

現在の回転速度を返します。

getRotationSpeed

public int getRotationSpeed()

現在の加速度を返します。

getAcceleration

public int getAcceleration()

現在の角速度(degree/s/s)を返します。

getPosition

public float getPosition()

モーターの現在位置の角度を返します。

getLimitAngle

public int getLimitAngle()

モーターが回転する最大位置角度を返します。

getMaxSpeed

public float getMaxSpeed()

モーターに設定できる最大の回転速度を返す。

isMoving

public boolean isMoving()

モーターが回転しているなら真を返します。

isStalled

public boolean isStalled()

モーターが停止しているなら真を返します。

lock

public void lock(int power)

モータはfltメソッドを使用してフロートモードに設定されていない限り、ポジションを保持しようとします。
引数に保持する力の強さを1〜100の間で設定します。

setSpeed

public void setSpeed(int speed)

モーターの回転速度を設定します。

setAcceleration

public void setAcceleration(int acceleration)

引数に渡したモーターの角速度を設定します。
デフォルトでは(6000degree/s/s)になっています。

Mモーター

Mモーターの制御にはEV3MediumRegulatedMotorクラスを利用します。
使えるメソッドはEV3LargeRegulatedMotorクラスと基本的に殆ど変わりはないので説明は割愛します。
(Mモーター)

サンプルプログラム

回転速度などを変化させてモーターを動かすだけの簡単なサンプルプログラムです。

Ev3MotorSample.java
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.robotics.RegulatedMotor;
import lejos.utility.Delay;

public class Ev3MotorSample {

    public static void main(String[] args) {
        RegulatedMotor m = new EV3LargeRegulatedMotor(MotorPort.A);

        m.forward();
        Delay.msDelay(2000);
        m.stop();

        m.backward();
        Delay.msDelay(2000);
        m.stop();

        m.setSpeed((int) m.getMaxSpeed());

        m.forward();
        Delay.msDelay(2000);
        m.stop();

        m.backward();
        Delay.msDelay(2000);
        m.stop();

        m.setAcceleration(3000);
        m.rotate(720);
        m.setAcceleration(6000);
        m.rotate(-720);
    }

}

クリックで動画再生
YouTube

参考

紹介したAPIは一部のみです。より詳しい情報を知りたい方は公式ドキュメントを参考にしましょう。

https://sourceforge.net/p/lejos/wiki/Motors/

http://www.lejos.org/ev3/docs/

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3