
「金庫」を改良して「安全な金庫」を作りました
前回の「金庫」はこちら

【レゴエデュケーション SPIKE プライム】金庫
「金庫」を作りましたモーターを使って鍵をかけます。ダイアルを合わせることで鍵を開けることができます公式の教員向けレッスンプランはこちらです正面から見たところです。右のモーターが鍵をかけるためのもの。左のモーターは鍵を開くためのものです金庫が...
公式の教員向けのレッスンプランはこちらです

セキュリティを強化しよう。
複雑な条件を使って、金庫の暗号パターンを強化しましょう。
死神の持っている草刈り鎌のようなパーツが今回追加したものです

使っていなかったモーターも利用します

開始と同時にダイヤルカバーが徐々に降りてきます。時間以内に解除しないと、ダイヤルがカバーに覆われてしまう仕組み。ちょっとアナログな感じのセキュリティ対策です

無事解除できました

プログラムです。タイマーを利用して、解除できる時間を制限しています


Pythonだとこうなります
from spike import PrimeHub, App, Motor
from spike.control import Timer, wait_for_seconds
hub = PrimeHub()
app = App()
dial = Motor('B') # ダイヤル用モーター
lock = Motor('C') # ロック用モーター
dial_cover = Motor('E') # ダイアルを隠すカバー用モーター
timer = Timer()
dial.set_default_speed(75)
lock.set_default_speed(75)
dial_cover.set_default_speed(75)
def unlock():
# 左ボタンが押されていない かつ ダイアルが180°より小さい 間ループが繰り返される
while not hub.left_button.is_pressed() and dial.get_degrees_counted() < 180:
hub.speaker.beep(60)
dial_cover.run_for_degrees(15)
wait_for_seconds(0.8)
if timer.now() > 5:
app.play_sound('Bonk')
return
# ロック解除
hub.light_matrix.show_image('NO')
wait_for_seconds(2)
hub.light_matrix.show_image('YES')
dial_cover.run_to_position(0)
lock.run_for_seconds(1)
app.play_sound('Wand')
wait_for_seconds(5)
# ドアをロックし、別の防犯メカニズムを作動させます。
hub.speaker.beep(60)
hub.speaker.beep(72)
lock.run_for_seconds(1, -50) # ロックする
dial.run_to_position(0)
dial_cover.run_to_position(0)
dial.set_degrees_counted(0)
dial.set_stop_action('coast')
hub.light_matrix.show_image('NO')
timer.reset()
unlock()
[lego-spike]

