◆ Lego Mindstoms NXT - leJOS - (16) 光センサーの調整 ================================================================================ ■光センサー調整を調整する 光センサーから取得する値は、ロボットを動かす回りの環境によって、異なります。 また、センサー一般にいえることですが、センサー自体の性能によっても、取れる値の範 囲が違ってきます。たとえば、NXT標準の光センサーは10ビットなので、0~1023までの値 を取得することができますが、8ビットのセンサーや、12ビットのセンサーの場合ですと、 取れる値の範囲は、それぞれ0~255、0~4095と、違う範囲の値になってしまいます。 もちろん、ハードウェアが違えば、プログラムも違ってきますが、このようなセンサーの 値などは標準的にパーセントで取得できると、どの環境、どのハードウェアでも同じしき い値でプログラミングできるようになります。 つぎのプログラムは、まず、暗いところと、明るいところの光量を取得し、それぞれを光 量の最小値、最大ととして設定します。そして、任意のところの光量を測定して表示しま す。 □calibrateLow()とcalibrateHigh()を使う これらのメソッドは、直前にreadValue()メソッドで読んだ光量をもとに、最小値、最大 値を設定します。これの後、readValue()メソッドを実行した結果は、0~100の間に収まる ようになります。 --- import lejos.nxt.Button; import lejos.nxt.LightSensor; import lejos.nxt.SensorPort; /** * 「トライボット」使用 * 光センサーを調整する。 * * @author marunomaruno * @version 1.0, 2010/03/15 * @since 1.0 */ public class LightSensor13 { public static void main(String[] args) throws Exception { // 光センサーオブジェクトをポート3で生成する。 LightSensor lightSensor = new LightSensor(SensorPort.S3); // センサーが安定するまで少し待つ Thread.sleep(100); // 最小値を設定する。 System.out.println("Press Button if dark."); Button.waitForPress(); int lowValue = lightSensor.readValue(); // (1) lightSensor.calibrateLow(); // (2) System.out.println(lowValue + " " + lightSensor.readValue() + " " + lightSensor.readNormalizedValue()); // 最大値を設定する。 System.out.println("Press Button if bright."); Button.waitForPress(); int highValue = lightSensor.readValue(); lightSensor.calibrateHigh(); // (3) System.out.println(highValue + " " + lightSensor.readValue() + " " + lightSensor.readNormalizedValue()); // 値を取得 System.out.println("Press Button."); Button.waitForPress(); System.out.println(lightSensor.readValue() + " " + lightSensor.readNormalizedValue()); // プログラムを終える System.out.println("Press Button to exit."); Button.waitForPress(); } } --- □ int lowValue = lightSensor.readValue(); // (1) readNormalizedValue()メソッドによって、実際の値を取得します。 このメソッドは、NXTの場合は、0~1023までの範囲の値を取得します。 APIによると、145 (暗い) から 890 (太陽光)の範囲とのことです。 □ lightSensor.calibrateLow(); // (2) calibrateLow()メソッドで、このメソッドの直前にreadValue()メソッドで読み取った値 を、次にreadValue()メソッドで読んだときに 0 と読めるように設定します。 □ lightSensor.calibrateHigh(); // (3) calibrateHigh()メソッドで、このメソッドの直前にreadValue()メソッドで読み取った値 を、次にreadValue()メソッドで読んだときに 100 と読めるように設定します。 ■setLow()とsetHigh()を使う これらのメソッドは、直前にreadNormalizedValue()メソッドで読んだ光量をもとに、最 小値、最大値を設定します。これの後、readValue()メソッドを実行した結果は、0~100の 間に収まるようになります。 --- import lejos.nxt.Button; import lejos.nxt.LightSensor; import lejos.nxt.SensorPort; /** * 「トライボット」使用 * 光センサーを調整する。 * * @author marunomaruno * @version 1.0, 2010/03/15 * @since 1.0 */ public class LightSensor13 { public static void main(String[] args) throws Exception { // 光センサーオブジェクトをポート3で生成する。 LightSensor lightSensor = new LightSensor(SensorPort.S3); // センサーが安定するまで少し待つ Thread.sleep(100); // 最小値を設定する。 System.out.println("Press Button if dark."); Button.waitForPress(); int lowValue = lightSensor.readNormalizedValue(); // (1) lightSensor.setLow(lowValue); // (2) System.out.println(lowValue + " " + lightSensor.readValue()); // 最大値を設定する。 System.out.println("Press Button if bright."); Button.waitForPress(); int highValue = lightSensor.readNormalizedValue(); lightSensor.setHigh(highValue); // (3) System.out.println(highValue + " " + lightSensor.readValue()); // 値を取得 System.out.println("Press Button."); Button.waitForPress(); System.out.println(lightSensor.readNormalizedValue() + " " + lightSensor.readValue()); // プログラムを終える System.out.println("Press Button to exit."); Button.waitForPress(); } } --- □ int lowValue = lightSensor.readNormalizedValue(); // (1) readNormalizedValue()メソッドによって、実際の値を取得します。 このメソッドは、NXTの場合は、0~1023までの範囲の値を取得します。 APIによると、145 (暗い) から 890 (太陽光)の範囲とのことです。 □ lightSensor.setLow(lowValue); // (2) setLow()メソッドで、readNormalizedValue()メソッドで読み取った値を、readValue()メ ソッドで読んだときに 0 と読めるように設定します。 □ lightSensor.setHigh(highValue); // (3) setHigh()メソッドで、readNormalizedValue()メソッドで読み取った値を、readValue() メソッドで読んだときに 100 と読めるように設定します。 ■光センサー調整ユーティリティ 光センサーを調整する部分をユーティリティ化します。 --- import lejos.nxt.Button; import lejos.nxt.LightSensor; /** * 「トライボット」使用 * 光センサーを調整するユーティリティ。 * * @author marunomaruno * @version 1.0, 2010/03/15 * @since 1.0 */ public class Calibrator01 { /** * 光センサーを調節する。 * 調節し終わったら、いずれかのボタンの押下をうながし、待ち状態になる。 * @param lightSensor 光センサー */ public static void calibrate(LightSensor lightSensor) { // (1) // 最小値を設定する。 System.out.println("Press Button if dark."); Button.waitForPress(); int lowValue = lightSensor.readNormalizedValue(); lightSensor.setLow(lowValue); System.out.println(lowValue + " " + lightSensor.readValue()); // 最大値を設定する。 System.out.println("Press Button if bright."); Button.waitForPress(); int highValue = lightSensor.readNormalizedValue(); lightSensor.setHigh(highValue); System.out.println(highValue + " " + lightSensor.readValue()); // スタートする。 System.out.println("Press Button to start."); Button.waitForPress(); } } --- □ public static void calibrate(LightSensor lightSensor) { // (1) 光センサを調整するメソッドです。 ■このユーティリティを使うプログラム --- import lejos.nxt.Button; import lejos.nxt.LightSensor; import lejos.nxt.SensorPort; /** * 「トライボット」使用 * 光センサーを調整する。このとき、光センサー調整クラスを使う。 * * @author marunomaruno * @version 1.0, 2010/03/15 * @since 1.0 */ public class LightSensor14 { public static void main(String[] args) throws Exception { // 光センサーオブジェクトをポート3で生成する。 LightSensor lightSensor = new LightSensor(SensorPort.S3); // センサーが安定するまで少し待つ Thread.sleep(100); // 光センサーを調整する Calibrator01.calibrate(lightSensor); // (1) // 値を取得 System.out.println(lightSensor.readNormalizedValue() + " " + lightSensor.readValue()); // プログラムを終える System.out.println("Press Button to exit."); Button.waitForPress(); } } --- □ Calibrator01.calibrate(lightSensor); // (1) 光センサを調整するユーティリティを使います。staticメソッドなので、クラス名.メソ ッド名で呼び出します。 以上
最新の画像[もっと見る]
-
あけましておめでとうございます 12年前
-
今年もよろしくお願いいたします 13年前
-
あけましておめでとうございます 14年前
-
あけましておめでとうございます 17年前
※コメント投稿者のブログIDはブログ作成者のみに通知されます