【レゴエデュケーション SPIKE プライム】安全な金庫

「金庫」を改良して「安全な金庫」を作りました

前回の「金庫」はこちら

【レゴエデュケーション 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()
[PR]
タイトルとURLをコピーしました