mBotの超音波センサーとは?

ロボットプログラミングの教材は多数ありますが、かなりの確率で搭載されているセンサーの一つが、距離を測定する超音波センサーです。mBotにも、もちろんついています。お馴染みの外観の一番目立つ「目」の部分が超音波センサーです。

mBot 超音波センサー 正面画像

 超音波センサーの仕組みは、簡単に言うと、右目から超音波が出力され、何かの障害物にあたって跳ね返ってくる音波を、左目で受信します。ちなみに、障害物は、透明であっても認識され跳ね返ってきます。

 この原理でどのように距離を検出するかというと、送信してから受信するまでの時間を計っているのです。mBotの超音波センサーは、3㎝~400㎝の距離を計ることが出来ます。

mBot超音波センサー原理の説明画像

 超音波センサーでの距離測定は誤差・タイムラグが大きく、正確な距離測定や、リアルタイム性を求める場合には向いていないので、プログラミングする時も、気をつけましょう。

 因みに、距離を測るセンサーには、超音波センサーのほかに、光学式センサーがあります。参考までに、光学式センサと超音波式センサを比較した場合のメリット・デメリットは以下の表を参照してください。。

項目 光学式(反射型) 超音波式
検出対象物 材質や色の影響を受ける 材質や色の影響を受けない
検出距離 ~1000mm ~10m
精度 高い 低い
応答速度 速い 遅い
ホコリ・水 弱い 強い
測定範囲 小さい 大きい

準備その1 mBotの組み立てからPC接続まで
準備その2 ファームウェア更新からログイン設定
基本1 mBotのLEDを光らせてみよう
基本2 mBotのブザーを鳴らせてみよう
基本3 動きブロックを使ってmBotを自在に動かそう
基本4 ライントレースセンサーの基本と使い方
基本5 光センサーの基本と使い方

説明の際の使用環境

・mBot_v1.1 日本国内正規品 Bluetooth版 購入時期は2019年8月
(新型Bluetoothモジュール)
・mBlock_v5.1 (ローカル版)
・オンラインのファームウェアバージョン_06.01.107
・Windows10
・アップロードモードオフ(USBケーブルが邪魔な場合は、PC内蔵Bluetoothか、Makeblock社のBluetooth変換のUSBドングルで接続をお勧めします)

超音波センサーのデータをmBlock5で確認する

 まずは、超音波センサーの値を確認してみましょう。
 超音波センサーの値は、3~400㎝です。それをmBlock5で表示させるには、「センサー」ブロックパレットの中(なか)にある、「超音波センサーの値ブロック」の横にある、チェックボックスにチェックを入れると、確認できます。

 チェックボックスにチェックを入れると、スプライトエリアに、超音波センサーの値が表示されます。
 その状態で、mBotの超音波センサーの所に、手のひらを近づけたり、離したりしてみましょう。
 超音波センサーの数字が変わっていくのが分かります。超音波センサーの前に何もないと、「400」の数字で止まります。

mBlock5_超音波センサーデータの確認方法

  尚、mBlock3では、センサーデータをパンダに言わせるというのが、結構簡単にできました。
 一方、mBlock5では、スプライト(パンダ)とデバイス(mBot)が、別々のオブジェクト(スプライト)として扱われるので、センサーデータをスプライトに送信する場合は、「グローバル変数」か、mBotのmBlock5の拡張機能である、「アップロードメッセージ」というものを使う必要があります。その辺りの連携は、また別のページで説明いたします。 

超音波センサーの値に応じてLEDの明るさを変える

上のように超音波センサーの値が、連続的に変わっていくのを確認したら、その値(距離)に応じて、mBotのLEDの光らせ方を変えるというプログラムを作ってみましょう。

上で確認したように、「超音波センサーの値」ブロックの中には、常に、検出した3~400の数字(値=距離データ)が入っています。そのブロックを、LED点灯するブロックの〇部分入れてみましょう。

mBlock5_超音波センサーの距離に応じてLEDの明るさを変えるサンプルプログラム

このプログラムを実行して、超音波センサーの前に手を近づけたり離したりすると、その距離に応じて、超音波センサーの値が変わり、その値が、LEDの明るさの数字(0~255)として認識され、mBotのLEDが手を近づけると暗くになり、遠ざけると明るくなります。

重要なポイントは、丸いブロックには、値が入り、LEDの明るさや、演算ブロックなど条件を設定するブロックに入れることが出来るという点です。これは、変数を取り入れたプログラムを考える時に重要なことなので、しっかり理解しておきましょう。

超音波センサーで先方の障害物を検知する

mBotの超音波センサーは、3cm~400cm前のモノを検知できますが、検出距離の精度はそこまで高くないので、正確な距離測定には向いていません。但し、凡そ●●㎝の距離にモノがあったら、動きを変えるなどのプログラムには向いています。

mBotが走行中に、15cm前に障害物があったら、止まる

このページでは、一番基本的な、前に障害物があったら止まるというプログラムを作る際の考え方についての例を解説します。

1、プログラミング前に、処理を整理してみる。
いきなり、mBlock5でプログラミングする前に、まずは、どういう手順で、処理していけばよいか、考えてみましょう。

①mBotが走行中=「mBotが前向きに動いている」

②15cm前に障害物があったら=「もし超音波センサーの距離(値)が、15cmより小さいなら、

2、条件を決めるブロックを作る

 「もし超音波センサーの距離(値)が、15cmより小さいならという、条件ブロックを作る時は、演算ブロックを使います。演算ブロックの解説は光センサーの解説ページもご参照ください。

mBlock5_超音波センサーの条件ブロック画像

2、下のブロックを組み合わせて、プログラムを作ってみましょう。

mBlock5_衝突回避プログラムの為のブロック画像

3、プログラムを作ったら、実行して、思い通りに動くかを試してみましょう

mBlock5_超音波センサー衝突回避サンプルプログラム画像

ティンカリング 

・障害物を検知したら、ブザーを鳴らして止めてみよう

・障害物を検知したら、LEDを光らせて止めてみよう

・障害物を検知したら、障害物をよけて、また元の道に戻るプログラムを作ってみよう

超音波センサー課題画像

ここがポイント:センサーの値は常に動いている

障害物回避プログラムで、こんなプログラムを考えた人はいないでしょうか?

mBlock5_超音波センサーサンプルプログラム画像2

「超音波センサー値=15cm」の時に、動きを止めるという事であれば、このプログラムでも間違いではありません。

 ですが、最初にセンサーデータを確認したように、センサーの値は、常に揺れ動いていて、一つの数字にピタッと、止まっている事はありません。

 上のプログラムでは、超音波センサーの値が、15センチで「ぴったり定まった時」じゃないと、mBotは止まらない、というプログラムです。

ロボットプログラミングで、センサーデータを使うときは、値をぴったりに条件設定するのではなく、より大きい・小さいといった条件で設定する所がポイントです。