【レゴエデュケーション SPIKE プライム】自動配送システム

「自動配送システム」を作りました。距離センサーを使った車です

こちらが公式の教員向けのレッスンプランです

自動配送システム
配送カートが意図した通り動くよう、プログラムの不具合を見つけて修正(デバッグ)する力を育成します。

進行方向に距離センサーがついています

裏側です。前進・後退用のモーター2つとハンドル操作用のモーター1つを搭載しています

こちらがプログラム。左ボタンを押した場合と、右ボタンを押した場合で異なる動きをします

Pythonだとこうなります。このプログラムだと、左ボタンの操作した後じゃないと、右ボタンの操作はできないので、厳密には上記のブロックプログラムと同じではありません

from spike import PrimeHub, DistanceSensor, Motor, MotorPair
from spike.control import wait_for_seconds

hub = PrimeHub()
# 距離センサー
distance_sensor = DistanceSensor('B')
# 前進・後退用のモーター
drive_motors = MotorPair('A', 'E')
# ハンドル操作用モーター
small_wheel_motor = Motor('C')

# モーターのスピードを設定
small_wheel_motor.set_default_speed(100)
drive_motors.set_default_speed(50)

# ----- 左ボタンを押した場合 -----
hub.left_button.wait_until_pressed()
small_wheel_motor.run_to_position(0)
drive_motors.start()
distance_sensor.wait_for_distance_closer_than(15, DistanceSensor.CM)
drive_motors.stop()

# ----- 右ボタンを押した場合 -----
hub.right_button.wait_until_pressed()
small_wheel_motor.run_to_position(0)
drive_motors.start()
distance_sensor.wait_for_distance_closer_than(15, DistanceSensor.CM)
drive_motors.stop()

# ハンドル操作用のモーターを動かす
small_wheel_motor.run_to_position(20)
wait_for_seconds(1)

# 後ろに進む
drive_motors.move(-50, DistanceSensor.CM)
drive_motors.stop()

# ハンドル操作用のモーターを動かす(戻す)
small_wheel_motor.run_to_position(0)
wait_for_seconds(1)

# 前に進む
drive_motors.move(50, DistanceSensor.CM)
drive_motors.stop()

ちょっと改造

距離センサーを下向きに付けてみました。段差があると止まる車です

プログラムはこちら。障害物で停止するのではなく、障害物がある限り進む・・・という考え方ですね

[PR]
タイトルとURLをコピーしました