# 13. マイクロマックイーン プラス (micro:Maqueen Plus) 自動運転(超音波による障害物の回避)




# 13.1. 目標




超音波距離センサーを使って、前の障害物を検知し、マイクロマックイーン プラス (micro:Maqueen Plus)を自律的に運転させるためのプログラミング方法を把握します。


# 13.2. 必要な機材




# PC利用時に必要な機材

No. 名称 個数 HW/SW 用途
01 マイクロビット セレクト ベースキット (opens new window) 1 HW マイクロマックイーンのコントロール用とプログラミング
02 マイクロマックイーン プラス V2(micro:Maqueen Plus V2) (opens new window) 1 HW 車体本体
03 単3型乾電池 4 HW マイクロマックイーン プラスとmicro:bitへの電源供給
04 Chromebook、MacOS、WindowsのPC 1 HW MakeCode操作用
05 Google Chrome 1 SW MakeCodeアクセス用
06 赤外線リモコン (opens new window) 1 HW 赤外線信号発信用

# タブレット・スマートフォン利用時に必要な機材

No. 名称 個数 HW/SW 用途
01 マイクロビット セレクト ベースキット (opens new window) 1 HW マイクロマックイーンのコントロール用とプログラミング
02 マイクロマックイーン プラス V2(micro:Maqueen Plus V2) (opens new window) 1 HW 車体本体
03 単3型乾電池 4 HW マイクロマックイーン プラスとmicro:bitへの電源供給
04 タブレット・スマートフォン 1 HW micro:bitアプリ操作用
05 micro:bit アプリ 1 SW micro:bitプログラミング用
06 赤外線リモコン (opens new window) 1 HW 赤外線信号発信用



# 13.3. 動作イメージ




超音波センサーを使って、マイクロマックイーン プラス (micro:Maqueen Plus)と前方の障害物との距離を常に検出し、30cm以下になるとマイクロマックイーン プラス (micro:Maqueen Plus)は障害物を避けるためにランダムに左または右に曲がり、6cm以下になるとバックすることで、自動運転をさせます。

参考情報


  • 付属の超音波距離センサーを装着する必要があります。



# 13.4. プログラミング例




# MakeCodeプログラミング例(サンプルプログラムの画像)


PPDF-MBT0021-Micro-Maqueen-Plus-Tutorial-IR-Remote-Control

# MakeCodeプログラミング例(サンプルプログラムのリンク)

https://makecode.microbit.org/_gqdVbUaFJEet (opens new window)



# MakeCodeプログラミング例(JavaScript)

let direction_random = 0
let distance_to_obstacle_cm = 0
maqueenPlusV2.I2CInit()
basic.forever(function () {
    distance_to_obstacle_cm = maqueenPlusV2.readUltrasonic(DigitalPin.P13, DigitalPin.P14)
    if (distance_to_obstacle_cm <= 30 && distance_to_obstacle_cm >= 6) {
        direction_random = randint(0, 1)
        if (direction_random == 0) {
            basic.showLeds(`
                . . # . .
                . # . . .
                # # # # #
                . # . . .
                . . # . .
                `)
            maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.LeftMotor, maqueenPlusV2.MyEnumDir.Forward, 100)
            maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.RightMotor, maqueenPlusV2.MyEnumDir.Forward, 0)
            basic.pause(800)
        } else {
            basic.showLeds(`
                . . # . .
                . . . # .
                # # # # #
                . . . # .
                . . # . .
                `)
            maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.LeftMotor, maqueenPlusV2.MyEnumDir.Forward, 0)
            maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.RightMotor, maqueenPlusV2.MyEnumDir.Forward, 100)
            basic.pause(800)
        }
    } else if (distance_to_obstacle_cm < 6) {
        basic.showLeds(`
            . . # . .
            . . # . .
            # . # . #
            . # # # .
            . . # . .
            `)
        maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.AllMotor, maqueenPlusV2.MyEnumDir.Backward, 100)
        basic.pause(800)
    } else {
        basic.showLeds(`
            . . # . .
            . # # # .
            # . # . #
            . . # . .
            . . # . .
            `)
        maqueenPlusV2.controlMotor(maqueenPlusV2.MyEnumMotor.AllMotor, maqueenPlusV2.MyEnumDir.Forward, 100)
    }
})



# MakeCodeプログラミング例(python)

direction_random = 0
distance_to_obstacle_cm = 0
maqueenPlusV2.i2c_init()

def on_forever():
    global distance_to_obstacle_cm, direction_random
    distance_to_obstacle_cm = maqueenPlusV2.read_ultrasonic(DigitalPin.P13, DigitalPin.P14)
    if distance_to_obstacle_cm <= 30 and distance_to_obstacle_cm >= 6:
        direction_random = randint(0, 1)
        if direction_random == 0:
            basic.show_leds("""
                . . # . .
                                . # . . .
                                # # # # #
                                . # . . .
                                . . # . .
            """)
            maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.LEFT_MOTOR,
                maqueenPlusV2.MyEnumDir.FORWARD,
                100)
            maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.RIGHT_MOTOR,
                maqueenPlusV2.MyEnumDir.FORWARD,
                0)
            basic.pause(800)
        else:
            basic.show_leds("""
                . . # . .
                                . . . # .
                                # # # # #
                                . . . # .
                                . . # . .
            """)
            maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.LEFT_MOTOR,
                maqueenPlusV2.MyEnumDir.FORWARD,
                0)
            maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.RIGHT_MOTOR,
                maqueenPlusV2.MyEnumDir.FORWARD,
                100)
            basic.pause(800)
    elif distance_to_obstacle_cm < 6:
        basic.show_leds("""
            . . # . .
                        . . # . .
                        # . # . #
                        . # # # .
                        . . # . .
        """)
        maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.ALL_MOTOR,
            maqueenPlusV2.MyEnumDir.BACKWARD,
            100)
        basic.pause(800)
    else:
        basic.show_leds("""
            . . # . .
                        . # # # .
                        # . # . #
                        . . # . .
                        . . # . .
        """)
        maqueenPlusV2.control_motor(maqueenPlusV2.MyEnumMotor.ALL_MOTOR,
            maqueenPlusV2.MyEnumDir.FORWARD,
            100)
basic.forever(on_forever)



# MakeCodeプログラミング例のQRコード

マイクロマックイーン プラス (micro:Maqueen Plus)  自動運転(超音波による障害物の回避) プログラムサンプル QRコード





Last Updated: 9/15/2023, 12:18:39 PM