カラーセンサー

../_images/sensor_color_lights.png

../_images/pybricks_variables_set_color_sensor_colorsensor_default.svg

../_images/pybricks_variables_set_color_sensor_colorsensor_detectable_colors.svg

class ColorSensor(port)

LEGO® SPIKE カラーセンサー

パラメータ:

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

../_images/pybricks_blockColor_ColorSensor_color.svg

awaitcolor(surface=True) Color

表面または外部光源の色をスキャンします。

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

パラメータ:

surface (bool) -- 物体や表面の色をスキャンするには True を指定します。スクリーンやその他の外部光源の色をスキャンする場合は False を指定します。

戻り値:

検出した色

../_images/pybricks_blockLightReflection_ColorSensor.svg

awaitreflection() int: %

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

戻り値:

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

../_images/pybricks_blockLightAmbient_ColorSensor.svg

awaitambient() int: %

周囲光を計測します。

戻り値:

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

高度な色感知

../_images/pybricks_blockColor_ColorSensor_hsv.svg

awaithsv(surface=True) Color

表面または外部光源の色をスキャンします。

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

パラメータ:

surface (bool) -- 物体や表面の色をスキャンするには True を指定します。スクリーンやその他の外部光源の色をスキャンする場合は False を指定します。

戻り値:

計測した色。色は、色相(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() メソッドで計測します。

内蔵ライト

このセンサーは3つのライトを内蔵しています。それぞれのライトの明るさを調整できます。センサーを使って何かを測定する場合、測定に必要なライトの点灯・消灯が行われます。

../_images/pybricks_blockLightOn_colorsensor_on.svg

../_images/pybricks_blockLightOn_colorsensor_on_list.svg

awaitlights.on(brightness)

指定した明るさでライトを点灯します。

パラメータ:

brightness (Number or tuple, %) -- すべてのライトの明るさを1つの値(%)で同時に設定します。各ライトの明るさを個別に設定するには、3つの値のタプルを使います

../_images/pybricks_blockLightOn_colorsensor_off.svg

awaitlights.off()

すべてのライトを消灯します。

サンプルコード

色と反射光の計測

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

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

while True:
    # 色と反射光を読み取る。
    color = sensor.color()
    reflection = sensor.reflection()

    # 計測した色をと反射光を表示。
    print(color, reflection)

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

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

色の検出の待機

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

# センサーを初期化。
sensor = ColorSensor(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 ColorSensor
from pybricks.parameters import Port
from pybricks.tools import wait

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

while True:
    # 標準の color() メソッドは、計測値を常に
    #「全色」のうちの最も近い色に「丸める」。
    # これはほとんどのアプリケーションで有用。

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

    # 結果を表示。
    print(color)

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

検出可能な色の変更

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

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

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

# センサーを初期化。
sensor = ColorSensor(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)

周囲光 の色相、彩度、明度の読取り

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

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

# 永久ループ。
while True:

    # 周囲色の値を取得します。表面の色をスキャンする代わりに、
    # ランプやスクリーンなどの光源の色をスキャンできる。
    hsv = sensor.hsv(surface=False)
    color = sensor.color(surface=False)

    # 周囲光の強さを取得します。
    ambient = sensor.ambient()

    # 計測結果を表示。
    print(hsv, color, ambient)

    # センサーをコンピューターの画面や色のついた光に向ける。色を観察してください。
    # また、センサーを手で覆い、周囲の値を観察してください。

    # 何が表示されているかが分かるよう、少し待機。
    wait(100)

内蔵ライトの点滅

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

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

# 永久ループ。
while True:

    # 1灯ずつ、半分の明るさで点灯させる。
    # これを3つの照明すべてに行い、それを5回繰り返す。
    for i in range(5):
        sensor.lights.on([50, 0, 0])
        wait(100)
        sensor.lights.on([0, 50, 0])
        wait(100)
        sensor.lights.on([0, 0, 50])
        wait(100)

    # すべてのライトを最大照度で点灯させる。
    sensor.lights.on(100)
    wait(500)

    # すべてのライトを消灯する。
    sensor.lights.off()
    wait(500)

プログラム終了時の消灯

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

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


def main():
    # メインコードを実行。
    while True:
        print(sensor.color())
        wait(500)


# 例外が発生しても、プログラム終了時に必ずクリーンアップコードが実行されるように、
# メインコードを try/finally で囲む。
try:
    main()
finally:
    # ここでクリーンアップコードを実行。
    print("Cleaning up.")
    sensor.lights.off()