# 8.3 大声スクワット







# 学習目標

このコースでは、micro:bit(マイクロビット)、ロッカーモジュール(ジョイスティック)、ボタンモジュール、サーボ、ビルディングブロックを利用して、検知した声が大きほど、しゃがんだロボットが高く立ち上がる「大声スクワット」を製作します。




# プログラミング環境の準備


micro:bit(マイクロビット)のPythonのプログラミングは、Muエディターを利用します。
プログラミングを開始するにあたって、以下の準備を完了させる必要があります。

  • Muエディター(Mu Editor)のインストール
  • ワールド オブ モジュール(WOM)専用パッケージのインポート

※ Muエディターは、お使いのパソコンで一回インストールすると、以降継続して利用が可能です。





# サーボの事前校正




ビルディングブロックを組み立てる前に、サーボの校正プログラムをダウンロードし、それを使用してサーボの原点となる角度を調整する必要があります。これを校正と呼びます。

注意


- 使用前に校正を行わないと、使用中にサーボが詰まり、ステアリングギアがストールしてサーボが故障する可能性があります。




# サーボの校正プログラム


from microbit import *
import WOM_Sensor_Kit

while True:
    WOM_Sensor_Kit.WOM_servo360(pin1, 130)
    WOM_Sensor_Kit.WOM_servo360(pin2, 130)
    display.show(3)



# サーボの校正方法


サーボを拡張ボードに接続

  • 上記の図に合わせて、サーボをmicro:bit拡張ボードに接続します。(茶色、赤色、黄色のケーブルを黒、赤、黄のコネクターに合わせて接続してください)
  • 付属USBケーブルの二つのマイクロUSBコネクターをそれぞれmicro:bit本体と拡張ボードに接続します。
  • micro:bit本体を拡張ボードに挿入します。
  • Muエディターを使って、サーボの校正用プログラムをmicro:bitに書き込みます。
  • micro:bit本体のディスプレイに「3」が表示され、サーボが正常に校正されていることを確認します。

注意


  • 必ずmicro:bit本体と拡張ボードの両方にUSBを装着してください。
  • micro:bitのUSBポートは、micro:bitへのプログラムの書き込み(ダウンロード)で利用します。
  • 拡張ボードのUSBポートは電源供給で利用します。接続しないとモジュールやサーボへの電源供給が不足する可能性がございます。




# サーボとビルディングブロックの接続


  • ブロック組み立て説明書(PDF)に沿って、ビルディングブロックを組み立ててください。

サーボとビルディングブロックの接続方法

注意


  • 組み立て時は、サーボの取り付ける方向をご注意ください。
  • 方向が間違うとサーボが故障する恐れがあります。
  • 組み立て後、サーボのケーブル側が、上記の図と同じ方向に向いていることをご確認ください。




# モジュールの接続




モジュールを拡張ボードに接続

上記の図に合わせて、ロッカーモジュール(ジョイスティック)、ボタンモジュール、サーボをmicro:bit拡張ボードに接続します。


# プログラミング




# 実現内容

  • 製作したスクワットロボットは、何もしない状態ではしゃがんだ姿勢でいます。

以下の2パターンの動作を実現します。

  • パターン1:

    • ロッカーモジュール(ジョイスティック)を前方に押すと、ロボットが立ち上がり、何もしなければ、またしゃがんだ状態に戻ります。
  • パターン2:

    • ボタンを押すと、micro:bitの画面に「✔️」マークが表示され、オートモードになります。
    • オートモードでは、検知した音量が大きいほど、ロボットが高く立ち上がります。同時にmicro:bitのディスプレイに1〜9の音量スコアを表示されます。



# プログラミング例


# パターン1 ジョイスティック制御

# -*- coding: utf-8-*-# Encoding cookie added by Mu Editor
from microbit import *
import WOM_Sensor_Kit

display.off()
x = 120
y = 160

while True:
    WOM_Sensor_Kit.WOM_servo360(pin1, x)
    WOM_Sensor_Kit.WOM_servo360(pin2, y)
    if WOM_Sensor_Kit.WOM_rocker(pin3, pin4, WOM_Sensor_Kit.WOM_up):
        x = x - 4
        y = y + 4
    if WOM_Sensor_Kit.WOM_rocker(pin3, pin4, WOM_Sensor_Kit.WOM_down):
        x = x + 4
        y = y - 4
    if WOM_Sensor_Kit.WOM_rocker(pin3, pin4, WOM_Sensor_Kit.WOM_left):
        x = x - 4
        y = y + 4
    if WOM_Sensor_Kit.WOM_rocker(pin3, pin4, WOM_Sensor_Kit.WOM_right):
        x = x + 4
        y = y - 4
    if x < 120:
        x = 120
    if x > 270:
        x = 270
    if y < 10:
        y = 10
    if y > 160:
        y = 160
    print(x)
    print(y)



# パターン2 ボタン制御

# -*- coding: utf-8-*-# Encoding cookie added by Mu Editor
from microbit import *
import WOM_Sensor_Kit

score = 0
WOM_Sensor_Kit.WOM_servo360(pin1, 120)
WOM_Sensor_Kit.WOM_servo360(pin2, 160)

while True:
    # If the button is pressed, start the voice-activated jumping machine
    if WOM_Sensor_Kit.WOM_button(pin8) == 1:
        display.show(Image.YES)
        sleep(500)
        # Get the current environment sound size,
        # the range of the analog value of the sound is 0-255
        soundLevel = microphone.sound_level()
        print(soundLevel)
        # Determine the lifting height by sound value
        if soundLevel < 20:
            score = 0
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 120)
            WOM_Sensor_Kit.WOM_servo360(pin2, 160)
            sleep(2000)
        if soundLevel >= 20 and soundLevel < 60:
            score = 2
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 150)
            WOM_Sensor_Kit.WOM_servo360(pin2, 130)
            sleep(2000)
        if soundLevel >= 60 and soundLevel < 100:
            score = 4
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 180)
            WOM_Sensor_Kit.WOM_servo360(pin2, 100)
            sleep(2000)
        if soundLevel >= 100 and soundLevel < 140:
            score = 6
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 210)
            WOM_Sensor_Kit.WOM_servo360(pin2, 70)
            sleep(2000)
        if soundLevel >= 140 and soundLevel < 170:
            score = 8
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 240)
            WOM_Sensor_Kit.WOM_servo360(pin2, 40)
            sleep(2000)
        if soundLevel >= 170:
            score = 10
            display.show(score)
            WOM_Sensor_Kit.WOM_servo360(pin1, 270)
            WOM_Sensor_Kit.WOM_servo360(pin2, 10)
            sleep(2000)



Last Updated: 5/17/2023, 8:59:44 AM