
「自動配送システム」を作りました。距離センサーを使った車です
こちらが公式の教員向けのレッスンプランです

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

裏側です。前進・後退用のモーター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()
ちょっと改造
距離センサーを下向きに付けてみました。段差があると止まる車です

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

[lego-spike]


