テクノロジー

img_technologyTop01

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

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

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

 

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

 

※ここでは、TETRIXをEV3と接続して制御する方法を紹介します。
※EV3のJava言語プログラミング環境については、「教育版EV3 Javaプログラミングガイド」をご参照ください。
※ここで紹介する内容は、leJOS EV3 バージョン 0.9.1-betaを用いて動作を確認したものです。

 

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

 

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

1 import lejos.hardware.Button;
2 import lejos.hardware.device.tetrix.TetrixControllerFactory;
3 import lejos.hardware.device.tetrix.TetrixEncoderMotor;
4 import lejos.hardware.device.tetrix.TetrixMotorController;
5 import lejos.hardware.lcd.LCD;
6 import lejos.hardware.port.SensorPort;
7 import lejos.utility.Delay;
8
9 public 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現在)

お問い合わせ

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
  • 正規代理店

    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.
レゴ、レゴのロゴマーク、レゴ マインドストームは、 レゴグループの登録商標です。