| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|---|
カラーセンサー¶
- class ColorSensor(port)¶
LEGO® SPIKE カラーセンサー
- パラメータ:
port (Port) -- センサーが接続されているポート。
- awaitcolor(surface=True) Color¶
表面または外部光源の色をスキャンします。
検出する色は
detectable_colors()メソッドで選択します。デフォルトではColor.RED,Color.YELLOW,Color.GREEN,Color.BLUE,Color.WHITE,Color.NONEを検出します。- パラメータ:
surface (bool) -- 物体や表面の色をスキャンするには
Trueを指定します。スクリーンやその他の外部光源の色をスキャンする場合はFalseを指定します。- 戻り値:
検出した色
高度な色感知
- awaithsv(surface=True) Color¶
表面または外部光源の色をスキャンします。
このメソッドは
color()に似ていますが、検出可能な最も近い色に丸めるのではなく、色相、彩度、明度の全範囲の値を取得します。- パラメータ:
surface (bool) -- 物体や表面の色をスキャンするには
Trueを指定します。スクリーンやその他の外部光源の色をスキャンする場合はFalseを指定します。- 戻り値:
計測した色。色は、色相(0--359)、彩度(0--100)、明度(0--100)の値で表現されます。
- detectable_colors(colors)¶
- detectable_colors() Collection[Color]
color()メソッドが検出する色を設定します。アプリケーションで検出したい色のみを指定します。こうすると、フルカラーで計測した結果を最も近い希望する色に丸め、それ以外の色は無視されます。これにより、信頼性が向上します。
引数を与えない場合は、現在選択されている色が返されます。
ブロックでのプログラミングの場合、これはセンサー設定ブロックで行います。
内蔵ライト
このセンサーは3つのライトを内蔵しています。それぞれのライトの明るさを調整できます。センサーを使って何かを測定する場合、測定に必要なライトの点灯・消灯が行われます。
サンプルコード¶
色と反射光の計測¶
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()