パワーファンクション

ColorDistanceSensor は、赤外線信号を送信してパワーファンクションの赤外線レシーバーを制御できます。この技術を使って、中型、大型、特大、列車用モーターを制御できます。赤外線の到達距離は、角度や周囲の状況にもよりますが、約 30 cm が限界です。

../_images/pupdevice-pfmotor.png

図 3 Power Up ColorDistanceSensor (左)、パワーファンクションの赤外線レシーバー(中央)、パワーファンクションのモーター(右)。ここでは、レシーバーはチャンネル1を使用し、赤のポートにモーターを繋いでいます。

sensorpf motoronblue 1with forward
class PFMotor(sensor, channel, color, positive_direction=Direction.CLOCKWISE)

ColorDistanceSensor の赤外線機能でパワーファンクションのモーターを制御します。

パラメータ:
  • sensor (ColorDistanceSensor) -- Sensor オブジェクト。

  • channel (int) -- 受信機のチャンネル番号: 1, 2, 3, 4 のいずれか。

  • color (Color) -- 受信機のカラーマーカー: Color.BLUE または Color.RED

  • positive_direction (Direction) -- 正のデューティ比の値を与えたとき、モーターがどの方向に回転すべきかを示します。

pf motor50%power atduty cycle
awaitdc(duty)

指定のデューティ比(「パワー」とも言います)でモーターを回転させます。

パラメータ:

duty (Number, %) -- デューティ比 (-100.0 から 100 の間)。

pf motorcoaststop
awaitstop()

モーターを停止し、惰性で回転するままにします。

モーターは摩擦により徐々に停止します。

pf motorbrakestop
awaitbrake()

モータに受動的にブレーキをかけます。

摩擦による停止に加え、モータが動いている間に発生した電圧で停止します。

サンプルコード

パワーファンクションのモーターの制御

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

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

# チャンネル1、赤のポートに繋いだモーターを初期化。
motor = PFMotor(sensor, 1, Color.RED)

# 回転と停止。
motor.dc(100)
wait(1000)
motor.stop()
wait(1000)

# 逆向き、半分のスピードで回転して停止。
motor.dc(-50)
wait(1000)
motor.stop()

複数のパワーファンクションのモーターの制御

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

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

# 複数のモーターを別々のチャンネルに繋いで利用できる。
arm = PFMotor(sensor, 1, Color.BLUE)
wheel = PFMotor(sensor, 4, Color.RED, Direction.COUNTERCLOCKWISE)

# 両モーターを加速する。これらの値のみ利用可能。
# 他の値は切り捨てて、最も近い値になる。
for duty in [15, 30, 45, 60, 75, 90, 100]:
    arm.dc(duty)
    wheel.dc(duty)
    wait(1000)

# 信号をより確実にするために、コマンドとコマンドの間に
# 短い間がある。そのため、速度を変えたり、少しずらした
# タイミングで止まったりする。

# 両モーターにブレーキをかける。
arm.brake()
wheel.brake()