カラー/距離センサー

../_images/pupdevice-colordistance.png

../_images/pybricks_variables_set_color_distance_sensor_colordistancesensor_default.svg

../_images/pybricks_variables_set_color_distance_sensor_colordistancesensor_detectable_colors.svg

class ColorDistanceSensor(port)

LEGO® Powered Up カラー/距離センサー

パラメータ:

port (Port) -- センサーが接続されているポート。

../_images/pybricks_blockColor_ColorDistanceSensor_color.svg

awaitcolor() Color

表面色のスキャン

検出する色は detectable_colors() メソッドで選択します。デフォルトでは Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE, Color.WHITE, Color.NONE を検出します。

戻り値:

検出した色。

../_images/pybricks_blockLightReflection_ColorDistanceSensor.svg

awaitreflection() int: %

センサーが照射した光を表面がどれだけ反射しているかを計測します。

戻り値:

0% (反射なし)から100% (高反射)までの反射率の計測値。

../_images/pybricks_blockLightAmbient_ColorDistanceSensor.svg

awaitambient() int: %

周囲光を計測します。

戻り値:

0%(暗い)から100%(明るい)までの範囲の周囲光の強さ。

../_images/pybricks_blockDistance_ColorDistanceSensor.svg

awaitdistance() int: %

センサーと対象物との相対距離を赤外線で計測します。

戻り値:

0% (最も近い)から100% (最も遠い)までの距離。

../_images/pybricks_blockColor_ColorDistanceSensor_hsv.svg

awaithsv() Color

表面色のスキャン

このメソッドは color() に似ていますが、検出可能な最も近い色に丸めるのではなく、色相、彩度、明度の全範囲の値を取得します。

戻り値:

計測した色。色は、色相(0--359)、彩度(0--100)、明度(0--100)の値で表現されます。

detectable_colors(colors)
detectable_colors() Collection[Color]

color() メソッドが検出する色を設定します。

アプリケーションで検出したい色のみを指定します。こうすると、フルカラーで計測した結果を最も近い希望する色に丸め、それ以外の色は無視されます。これにより、信頼性が向上します。

引数を与えない場合は、現在選択されている色が返されます。

When coding with blocks, this is configured in the sensor setup block.

パラメータ:

colors (list or tuple) -- 検出したい色(Color オブジェクト)のリスト。 Color.MAGENTA のような標準色を選ぶこともできますし、 Color(h=348, s=96, v=40)``のように独自色を用意すれば、さらによい結果を得ることができます。独自色は ``hsv() メソッドで計測します。

内蔵ライト

このセンサーはライトを内蔵しています。赤、緑、青にしたり、消したりできます。この後、センサーを使って何かを計測する場合、ライトは自動的にそのセンシング方法のデフォルトの色で点灯しなおします。

../_images/pybricks_blockLightOnColor_colordistancesensor_on.svg

awaitlight.on(color)

指定した色でライトを点灯します。

パラメータ:

color (Color) -- ライトの色。

../_images/pybricks_blockLightOnColor_colordistancesensor_off.svg

awaitlight.off()

ライトを消灯します。

サンプルコード

色の計測

from pybricks.pupdevices import ColorDistanceSensor
from pybricks.parameters import Port
from pybricks.tools import wait

# センサーを初期化。
sensor = ColorDistanceSensor(Port.A)

while True:
    # 色を読み取る。
    color = sensor.color()

    # 計測した色を表示。
    print(color)

    # センサーを動かして、どれだけ色を検出できるか
    # 試してみてください。

    # 値が読み取れたか分かるよう、少し待機。
    wait(100)

色の検出の待機

from pybricks.pupdevices import ColorDistanceSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait

# センサーを初期化。
sensor = ColorDistanceSensor(Port.A)


# 希望する色を待ち受ける関数。
def wait_for_color(desired_color):
    # 希望の色でなければ、待ち続ける。
    while sensor.color() != desired_color:
        wait(20)


# ここで、先に作成した関数を使う。
while True:

    # ここで、列車/車両を前進させたりする。

    print("Waiting for red ...")
    wait_for_color(Color.RED)

    # ここで、列車や車両を後進させたりする。

    print("Waiting for blue ...")
    wait_for_color(Color.BLUE)

距離の計測とライトの点滅

from pybricks.pupdevices import ColorDistanceSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait

# センサーを初期化。
sensor = ColorDistanceSensor(Port.A)

# 永久ループ。
while True:

    # センサーが近くに物体を発見した場合。
    if sensor.distance() <= 40:

        # 発見すると、ランプを赤/青に5回点滅させる。
        for i in range(5):
            sensor.light.on(Color.RED)
            wait(30)
            sensor.light.on(Color.BLUE)
            wait(30)
    else:
        # センサーが近くに何もないことを確認したら、
        # 少しだけ待機する。
        wait(10)

色相、彩度、明度の読取り

from pybricks.pupdevices import ColorDistanceSensor
from pybricks.parameters import Port
from pybricks.tools import wait

# センサーを初期化。
sensor = ColorDistanceSensor(Port.A)

while True:
    # 標準の color() メソッドは、計測値を常に
    #「全色」のうちの最も近い色に「丸める」。

    # しかし、以下のようにすれば、「丸め」なしで元の色相、
    # 彩度、明度を得られます。
    color = sensor.hsv()

    # 結果を表示。
    print(color)

    # 値が読み取れたか分かるよう待機。
    wait(500)

検出可能な色の変更

デフォルトでは、センサーは赤、黄、緑、青、白、または無色を検出するように設定されており、多くのアプリケーションに適合しています。

より良い結果を得るためには、事前に希望の色を測定し、その色だけを探すようにセンサーに指示できます。その際、必ず最終的なアプリケーションと同じ距離と光の条件で測定してください。そのようにすれば、検出が困難な色でも、非常に正確な結果が得られます。

from pybricks.pupdevices import ColorDistanceSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait

# センサーを初期化。
sensor = ColorDistanceSensor(Port.A)

# まず、検出したい物体を決めて、その HSV 値を測定する。
# これは先ほどの例のようにhsv()メソッドで可能。
#
# その測定結果をもとに、デフォルトの色を上書きや、新しい色の追加を行う。
Color.GREEN = Color(h=132, s=94, v=26)
Color.MAGENTA = Color(h=348, s=96, v=40)
Color.BROWN = Color(h=17, s=78, v=15)
Color.RED = Color(h=359, s=97, v=39)

# リストやタプルに検出する色を指定。
my_colors = (Color.GREEN, Color.MAGENTA, Color.BROWN, Color.RED, Color.NONE)

# 検出する色を設定。
sensor.detectable_colors(my_colors)

# 普通どおり color() を使うが、指定した色のどれかを返すようになっている。
while True:
    color = sensor.color()

    # 色を表示。
    print(color)

    # どの色かチェック。
    if color == Color.MAGENTA:
        print("It works!")

    # 値が読み取れたか分かるよう待機。
    wait(100)