じぶんでつくったプログラムでロボットやパソコンをそうさしよう! (mBotをそうさするプログラムをつくろう)

# はじめに

この記事(きじ)では，mBotを操作(そうさ)するプログラムをつくってみます。この記事で紹介(しょうかい)するプログラムを作成(さくせい)するためには，mBotとmBlockが必要(ひつよう)になります。mBotは，Amazonや家電量販店(かでんりょうはんてん)でも購入(こうにゅう)することができます。mBotとmBlockを準備(じゅんび)するときには，[この記事](https://qiita.com/kenhigashi/items/ad86e4fc0a01106a754d)も読んでみてください。

# この記事でできること
この記事を読んでできることは，mBotが目の前(めのまえ)の障害物(しょうがいぶつ)を回避(かいひ)できるようになります。

# プログラムを作成する前(まえ)に

何(なに)も考えずにプログラムを作り始める(つくりはじめる)ことが悪い(わるい)わけではありませんが，プログラムを作り始める前に，どのようなプログラムを作りたいのか，考えておくことは重要(じゅうよう)です。mBotに対して目の前の障害物を回避するために，どのような命令(めいれい)をすればよいでしょうか？少し(すこし)考えてみましょう。

私たち人間は無意識(むいしき)のうちにできているので普段(ふだん)はあまり気(き)にしていないかもしれませんが，人間がどのように障害物を回避しているか考えてみると，いいかもしれません。人によって少し違う(ちがう)かもしれませんが，以下(いか)のように考えて(かんがえて)いるのではないでしょうか？

```
　1. 目の前に障害物があるか把握(はあく)する
　2. 目の前に障害物があるか確認(かくにん)する
    - 障害物がない場合
        - 前に進む(まえにすすむ)
        - 1.の処理(しょり)に戻る(もどる)
    - 障害物がある場合
        - 止まる(とまる)
        - 方向(ほうこう)を変える(かえる)
        - 前に進む(まえにすすむ)
        - 1.の処理(しょり)に戻る(もどる)
```

目的(もくてき)は「障害物を回避すること」なので，上と同じ(おなじ)考え方でないといけないとか，そういうことはありません。自分で考えて試して(ためして)みることが大切(たいせつ)なので，人と違っても大丈夫(だいじょうぶ)です。また，まずはプログラムの練習(れんしゅう)をしたいということであれば，上の内容(ないよう)に沿って(そって)プログラムをつくってみましょう。

# プログラミングの作り方(つくりかた)

1 はじめに，mBlockを起動(きどう)します。いつものように，パンダのアイコンをクリックして起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/06d42389-0abe-2261-44ea-33bb5a4f73cf.png)

2 mBotの電源(でんげん)を入(い)れる
mBotの電源を入れます。mBotの電源の場所が分からない場合は，[この記事](https://qiita.com/kenhigashi/items/ad86e4fc0a01106a754d#mbot%E3%81%A8%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%82%92%E3%81%A4%E3%81%AA%E3%81%92%E3%82%8B-mbot%E3%81%8C%E3%81%82%E3%82%8B%E3%81%B0%E3%81%82%E3%81%84%E3%81%AE%E3%81%BF%E3%81%95%E3%81%8E%E3%82%87%E3%81%86%E3%81%97%E3%81%BE%E3%81%99)を参考(さんこう)にしてください。

3 mBotとパソコンを接続(せつぞく)する
mBlockを起動した後(のち)，以下(いか)のように接続ボタンをクリックします。

![alt](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F492296%2F4f97aeb4-ec64-3baa-5809-2f9f84fa940b.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=ec80d7280e2c62d3f4a510a43d380ae0)

次(つぎ)に，Bluetoothを選択(せんたく)し，Makeblock...からはじまるmBotと接続します。

![alt](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F492296%2Fb947e5f7-2c0b-779a-a260-087450347b41.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=ab9ac0e893efae8fd2774ca701698da6)

4 イベントの選択(せんたく)
ブロックパレットから，「イベント」を選択(せんたく)します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/097b85e0-e92f-f077-0c1e-76f07a46075e.png)

5 [緑(みどり)の旗(はた)が押されたとき]というブロックを，スクリプトエリアにドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/92858ed9-cea4-77d3-3fd9-9cbf48cb70e9.png)

6 処理(しょり)を繰り返す(くりかえす)制御(せいぎょ)を設定(せってい)する
目の前に障害物がないか確認し，前に動くか向きを変えるか...という命令を繰り返す必要があります。繰り返しの処理は，以下のように[制御]-[ずっと]というブロックを使います。このブロックの中に，mBotが障害物を回避するブロックを入れてくことになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/b788ff5b-c5d2-d13c-0957-b91be9bd8ff4.png)

7 目の前に障害物があるか確認する
目の前に障害物があるか確認するために，今回は[もし<>なら　でなければ]というブロックを使います。この記事のはじめに「もし<目の前に障害物なかったら>前に進み，<目の前に障害物がなかったら>でなければ，方向を変える」という処理をこのブロックで実現(じつげん)します。このような処理のことを条件分岐(じょうけんぶんき)といいます。プログラミングの世界では，とても大切な考え方です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/3686be39-ecd3-9c55-262c-633a8f6fa28b.png)

8 <目の前に障害物がなかったら>という条件を決めます
ブロックパレットの[演算]から，<() > 50>というブロックを，[もし<>なら　でなければ]の<>に入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/eec1f501-00fd-95d8-60a8-29f7a7ffbcd2.png)

次に，[もし<>なら　でなければ]の<>に対して，<目の前に障害物がなかったら>という条件をいれる必要があります。

[センサー]-[超音波センサー[ポート3]の値(cm)]を<() > 50>の()にドラッグ＆ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/433495f8-b6d1-0dcb-c628-e204082e6cbc.png)

mBotの目は[超音波(ちょうおんぱ)](https://ja.wikipedia.org/wiki/%E8%B6%85%E9%9F%B3%E6%B3%A2)センサーになっていて，目の前の物(もの)までの距離(きょり)を測って(はかって)います。人間には聞こえない音(おと)を使って(つかって)，目の前に障害物がないか確認します。

次に，どのぐらいの距離(きょり)で方向を変えるか指定(してい)します。mBotから障害物の距離が20cm(センチメートル)の時に方向を変えるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/b5d8d6eb-6903-9637-e9c8-7439e31b93bf.png)

なお，「(超音波センサー[ポート3]の値(cm)) > 20」の > の意味(いみ)は，超音波センサー[ポート3]の値(cm)が20(cm)よりも大きいという意味です。
つまり，mBotが測った自分と物体との距離が20cmよりも大きい場合は，まだ目の前に障害物がないと判断し前に進みます。この条件にあてはまらない場合は，目の前に障害物があると判断し，動きを止めて方向を変える命令を実行します。

9 各条件で動きを変える
ブロックパレットの[動き]から，各条件にあったブロックを下記のように入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492296/12a48c15-79a6-92b0-4b4d-cdde5bdca63f.png)

10 緑の旗(はた)を押す

どうなりましたか？目の前の壁が近づくと，右に方向を変えて前進するようになったと思います。