◆ Lego Mindstoms NXT - leJOS - (5) タッチセンサー
それでは、今度はタッチセンサーを使ってみましょう。
NXT には、つぎのセンサーがあります。ここに記述されているのは、
NXT ブロックにセンサーを取り付ける上での標準のポートです。
・タッチセンサー (ポート 1)
・音センサー (ポート 2)
・光センサー + ライト (ポート 3)
・超音波センサー (ポート 4)
・回転センサー (モーターA、B、C)
■ タッチセンサー
まずは、タッチセンサーの動きを確認するプログラムを作ります。
□ TouchSensor touchSensor = new TouchSensor(SensorPort.S1); // (1)
タッチセンサーオブジェクトをポート 1 で生成します。
Java なので、センサーなどもオブジェクトとして生成しないと使
えません。
TouchSensor クラスには次のようなコンストラクターやメソッドが
あります。
□ コンストラクター
---
TouchSensor(ADSensorPort port)
ポートを指定して、タッチセンサーのオブジェクトを生成しま
す。
---
□ メソッド
---
boolean isPressed()
センサーが押されたら true を返します。
---
なお、センサーポートは SensorPort クラスの定数で提供されてい
ます。
□ ポートを表す定数
---
static SensorPort[] PORTS センサーポートの定数が、S1, S2, S3,
S4 の順に入っている配列
static SensorPort S1 センサーポート 1
static SensorPort S2 センサーポート 2
static SensorPort S3 センサーポート 3
static SensorPort S4 センサーポート 4
---
PORTS は、配列で、S1 ~ S4 の値を持ちます。
□ while (!touchSensor.isPressed()); // (2)
タッチセンサーが押されたかどうかは、isPressed メソッドを使う
ことでわかります。この値が true のときにタッチされたことにな
るので、while ループで、false の間ループさせます。当然、この
間はモーターが動き続けることになります。
■ トライボットの「バンパー」のプログラム
これは、トライボットの 2 番目の工程で作った「バンパー (タッ
チセンサー)」のプログラムです。ただし、後退する時間は回転数
ではなく、0.5 秒という時間で行っています。
■ 前進した分だけ後退する
今度は、前進した分だけ後退するようにします。
これには、前進した分の時間を計測して、これを後退するときの待
ち時間に設定すればいいです。前進した分の時間は、
停止した時刻 - 前進を始めた時刻
で取得できます。この、時刻を取得するのが、System クラスの
currentTimeMillis メソッドです。
以上
それでは、今度はタッチセンサーを使ってみましょう。
NXT には、つぎのセンサーがあります。ここに記述されているのは、
NXT ブロックにセンサーを取り付ける上での標準のポートです。
・タッチセンサー (ポート 1)
・音センサー (ポート 2)
・光センサー + ライト (ポート 3)
・超音波センサー (ポート 4)
・回転センサー (モーターA、B、C)
■ タッチセンサー
まずは、タッチセンサーの動きを確認するプログラムを作ります。
------------------------------------------------------ import lejos.navigation.Pilot; import lejos.nxt.Motor; import lejos.nxt.SensorPort; import lejos.nxt.TouchSensor; /** * モーターを前進させた後、タッチしたら終了する。 * * @author marunomaruno * @version 1.0, 2008/06/04 * @since 1.0 */ public class TouchSensor01 { public static void main(String[] args) { // タッチセンサーオブジェクトをポート1で生成する TouchSensor touchSensor = new TouchSensor(SensorPort.S1); // (1) // パイロットのオブジェクトを生成する Pilot pilot = new Pilot(5.6f, 13f, Motor.C, Motor.B); // 前進回転する pilot.forward(); // 押されるまでループする while (!touchSensor.isPressed()) // (2) ; // 停止する pilot.stop(); } } ------------------------------------------------------
□ TouchSensor touchSensor = new TouchSensor(SensorPort.S1); // (1)
タッチセンサーオブジェクトをポート 1 で生成します。
Java なので、センサーなどもオブジェクトとして生成しないと使
えません。
TouchSensor クラスには次のようなコンストラクターやメソッドが
あります。
□ コンストラクター
---
TouchSensor(ADSensorPort port)
ポートを指定して、タッチセンサーのオブジェクトを生成しま
す。
---
□ メソッド
---
boolean isPressed()
センサーが押されたら true を返します。
---
なお、センサーポートは SensorPort クラスの定数で提供されてい
ます。
□ ポートを表す定数
---
static SensorPort[] PORTS センサーポートの定数が、S1, S2, S3,
S4 の順に入っている配列
static SensorPort S1 センサーポート 1
static SensorPort S2 センサーポート 2
static SensorPort S3 センサーポート 3
static SensorPort S4 センサーポート 4
---
PORTS は、配列で、S1 ~ S4 の値を持ちます。
□ while (!touchSensor.isPressed()); // (2)
タッチセンサーが押されたかどうかは、isPressed メソッドを使う
ことでわかります。この値が true のときにタッチされたことにな
るので、while ループで、false の間ループさせます。当然、この
間はモーターが動き続けることになります。
■ トライボットの「バンパー」のプログラム
これは、トライボットの 2 番目の工程で作った「バンパー (タッ
チセンサー)」のプログラムです。ただし、後退する時間は回転数
ではなく、0.5 秒という時間で行っています。
------------------------------------------------------ import lejos.navigation.Pilot; import lejos.nxt.Motor; import lejos.nxt.SensorPort; import lejos.nxt.TouchSensor; import u.NxtUtil; /** * 「トライボット」使用 * 前進し、そこでタッチしたものをつかみ、後退する。 * * @author marunomaruno * @version 1.0, 2008/06/04 * @since 1.0 */ public class Bumper01 { public static void main(String[] args) { // タッチセンサーオブジェクトをポート1で生成する。 TouchSensor touchSensor = new TouchSensor(SensorPort.S1); // パイロットのオブジェクトを生成する Pilot pilot = new Pilot(5.6f, 13f, Motor.C, Motor.B); // タッチするまで前進 pilot.forward(); while (!touchSensor.isPressed()) ; pilot.stop(); // アームを閉じる Motor.A.backward(); NxtUtil.pause(500); Motor.A.stop(); // 0.5 秒後退 pilot.backward(); NxtUtil.pause(500); pilot.stop(); } } ------------------------------------------------------
■ 前進した分だけ後退する
今度は、前進した分だけ後退するようにします。
これには、前進した分の時間を計測して、これを後退するときの待
ち時間に設定すればいいです。前進した分の時間は、
停止した時刻 - 前進を始めた時刻
で取得できます。この、時刻を取得するのが、System クラスの
currentTimeMillis メソッドです。
------------------------------------------------------ import lejos.navigation.Pilot; import lejos.nxt.Motor; import lejos.nxt.SensorPort; import lejos.nxt.TouchSensor; import u.NxtUtil; /** * 「トライボット」使用 * 前進し、そこでタッチしたものをつかみ、前進した分、後退する。 * * @author marunomaruno * @version 1.0, 2008/06/04 * @since 1.0 */ public class Bumper02 { public static void main(String[] args) { // タッチセンサーオブジェクトをポート1で生成する。 TouchSensor touchSensor = new TouchSensor(SensorPort.S1); // パイロットのオブジェクトを生成する Pilot pilot = new Pilot(5.6f, 13f, Motor.C, Motor.B); // タッチするまで前進 long startTime = System.currentTimeMillis(); // (1) pilot.forward(); while (!touchSensor.isPressed()) ; pilot.stop(); long forwardingTime = System.currentTimeMillis() - startTime; // (2) // アームを閉じる Motor.A.backward(); NxtUtil.pause(500); Motor.A.stop(); // 前進分後退 pilot.backward(); NxtUtil.pause(forwardingTime); pilot.stop(); } } ------------------------------------------------------
以上
※コメント投稿者のブログIDはブログ作成者のみに通知されます