# マイクロマックイーン ライト(micro:Maqueen Lite)自動運転(超音波による障害物の回避)
# 11.1. 目標
超音波距離センサーを使って、前の障害物を検知し、マイクロマックイーン (micro:Maqueen)を自律的に運転させるためのプログラミング方法を把握します。
# 11.2. 必要な機材
# PC利用時に必要な機材
No. | 名称 | 個数 | HW/SW | 用途 | 補足 |
---|---|---|---|---|---|
01 | micro:bit(v2)本体 | 1 | HW | マイクロマックイーンのコントロール用とプログラミング | - |
02 | micro:bit保護ケース | 1 | HW | micro:bit保護 | - |
03 | micro:bit用 USBケーブル | 1 | HW | micro:bitとPCの接続 | - |
03 | マイクロマックイーン ライト(micro:Maqueen Lite) | 1 | HW | 車体本体 | - |
04 | 単4型乾電池 | 3 | HW | マイクロマックイーンとmicro:bitへの電源供給 | - |
05 | Chromebook、MacOS、WindowsのPC | 1 | HW | MakeCode操作用 | - |
06 | Google Chrome | 1 | SW | MakeCodeアクセス用 | - |
07 | USB変換アダプタ | 1 | HW | PC接続用 | PCのUSBポートがType-Cのみの場合、TypeC ⇄ TypeA変換アダプタが必要 |
# タブレット・スマートフォン利用時に必要な機材
No. | 名称 | 個数 | HW/SW | 用途 | 補足 |
---|---|---|---|---|---|
01 | micro:bit(v2)本体 | 1 | HW | マイクロマックイーンのコントロール用とプログラミング | - |
02 | micro:bit保護ケース | 1 | HW | micro:bit保護 | - |
03 | マイクロマックイーン ライト(micro:Maqueen Lite) | 1 | HW | 車体本体 | - |
04 | 単4型乾電池 | 3 | HW | マイクロマックイーンとmicro:bitへの電源供給 | - |
05 | タブレット・スマートフォン | 1 | HW | micro:bitアプリ操作用 | - |
06 | micro:bit アプリ | 1 | SW | micro:bitプログラミング用 | - |
# 11.3. 動作イメージ
超音波センサーを使って、マイクロマックイーン ライト(micro:Maqueen Lite)と前方の障害物との距離を常に検出し、30cm以下になるとMaqueenは障害物を避けるためにランダムに左または右に曲がり、6cm以下になるとバックすることで、自動運転をさせます。
参考情報
- 付属の超音波距離センサーを装着する必要があります。
# 11.4. プログラミング例
# MakeCodeプログラミング例(ブロック)
# MakeCodeプログラミング例(JavaScript)
let turn = false
basic.forever(function () {
if (maqueen.Ultrasonic(PingUnit.Centimeters) < 30 && maqueen.Ultrasonic(PingUnit.Centimeters) > 6) {
turn = Math.randomBoolean()
if (turn == true) {
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 255)
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 0)
basic.pause(800)
}
if (turn == false) {
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 0)
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 255)
basic.pause(800)
}
} else if (maqueen.Ultrasonic(PingUnit.Centimeters) <= 6 && maqueen.Ultrasonic(PingUnit.Centimeters) != 0) {
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CCW, 255)
basic.pause(800)
} else {
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 255)
}
})
# MakeCodeプログラミング例(python)
turn = False
def on_forever():
global turn
if maqueen.ultrasonic(PingUnit.CENTIMETERS) < 30 and maqueen.ultrasonic(PingUnit.CENTIMETERS) > 6:
turn = Math.random_boolean()
if turn == True:
maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 255)
maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 0)
basic.pause(800)
if turn == False:
maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 0)
maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 255)
basic.pause(800)
elif maqueen.ultrasonic(PingUnit.CENTIMETERS) <= 6 and maqueen.ultrasonic(PingUnit.CENTIMETERS) != 0:
maqueen.motor_run(maqueen.Motors.ALL, maqueen.Dir.CCW, 255)
basic.pause(800)
else:
maqueen.motor_run(maqueen.Motors.ALL, maqueen.Dir.CW, 255)
basic.forever(on_forever)
# MakeCodeプログラミング例のQRコード