【丁寧に解説】マイクロビットで超音波センサープログラムを作る方法

【丁寧に解説】マイクロビットで超音波センサープログラムを作る方法

※当サイトには広告が掲載されています。ご了承くださいm(_ _)m

ハロー・ワールド!おもちゃ大好きエンジニアの大之助( @daivoy_x)です!

マイコンロボット工作セットの超音波センサーをプログラミングしようと思ったのですが、公式サイトの解説が難しかったので本記事で丁寧に解説します。

本記事の内容
  • マイコンロボット工作セットの超音波センサープログラムの作り方

実際にプログラミングして、超音波センサーで距離を測れるようになったので最後までご覧くださいm(_ _)m

スポンサーリンク

まずは超音波センサーで距離を測定する理論の確認

まずは、超音波センサーで障害物までの距離を測定する仕組みについて確認しましょう。概要は次のとおりです。

1[ms](ミリ秒)は1,000分の1[s](秒)です。
1[μs](マイクロ秒)は1,000分の1[ms]です。
つまり、1[μs]は1,000,000分の1[s]です。

超音波センサーは超音波を送信してから障害物にぶつかり、跳ね返ってくるまでの時間を計測することができます。

超音波の速度(音の速度)は大気中では340[m/s]ですが、サンプルプログラムでは315[m/s](=0.315[μ/s])で計算してあります。(理由はわかりません。)

時間と速度がわかれば距離が計算できますね。なので、ロボットと障害物の距離は次の式で計算することができます。

反射時間Tは往復の時間なので、超音波センサーから障害物までの片道の時間はその半分(T/2)です。

ただし、サンプルプログラムを見ると反射時間T[μ/s]から160[μ/s]を引いてあります(理由はわかりません)ので、計算式を改めると次のようになります。

これで、超音波センサーを使って障害物までの距離を計算する理屈はわかりました。

次は実際にそれをプログラミングする方法を解説します。

次はプログラムのアルゴリズムを確認

まずは、プログラムのアルゴリズムを確認しましょう。

すみません、具体的なプログラムはまだです。どういうものを作るのか考えてからプログラムを書き出すことが大事ですからね。

大まかな流れは次のとおりです。

  1. 超音波センサーで反射時間T[μs]を取得する
  2. 反射時間T[μs]をもとに距離D[mm]を計算する

1.超音波センサーで反射時間T[μs]を取得する

まずは、「1.超音波センサーで反射時間T[μs]を取得する」方法を確認しましょう。

考え方

構成図を見てみると超音波センサーとmicro:bitはI2Cという方法で通信を行います。通信を行うとはmicro:bitと超音波センサーがデータのやり取りを行うということです。マイコンロボット工作セットの構成図

データのやり取りを図にしたものがこちらです。

ちょっと、ややこしいですね。micro:bitから測定値の取得を指示すると、この超音波センサーは測定値を分割して送り返してきます。

具体例

分割されたデータをそれぞれ取得し、元のデータに戻す方法を具体例で解説します。

これは2進法を知らないと理解が難しいです。理屈よりも具体的なプログラミング方法を知りたい方は「いよいよプログラムを書こう!」へ進んでください。

反射時間Tが500[μs]の場合で説明します。

まず、500[μs]は10進数なので2進数に変換すると理解しやすいです。500を取り扱うには2[byte]必要です。このデータは超音波センサーが計測したデータです。

2進法については「【初心者向け】パソコンのビットとバイトをエンジニアが丁寧に解説」で解説しているので興味があればご覧ください。

次に、超音波センサーが分割したデータをmicro:bitは上位桁と下位桁にわけて変数に保存します。

変数については「Scratchの「変数」とは?考え方から使い方まで丁寧に解説」の記事を見てもらえれば理解できると思います。

micro:bitは1[byte]ずつのデータを基に元の2[byte]データに戻したいので、各データを2[byte]に変換します。

上位桁の値と下位桁の値を使って元の値に戻すには次のように計算します。

上位桁を8[bit]左シフト(×256と同じ)して下位桁と足す(論理和をとる)

これで、micro:bit側で元の測定データ500[μs]を取得できました。

上記の内容を理解するには2進法やビット演算の知識がひつようですね~。

2.反射時間T[μs]をもとに距離D[mm]を計算する

これは簡単です。計算式に当てはめればいいだけです。

おさらいすると距離Dを求める計算式は次のとおりです。

先程の例ではT=500[μs]でした。それで、計算すると距離Dは53.55[mm](5.355[cm])です。

これで超音波センサーを使って距離を算出することができます!

では、以上の内容をプログラミングしてみましょう!

いよいよプログラムを書こう!

さあ、いよいよプログラムを書く作業です。

まずは、プログラムを読みやすいように変数にコマンドの設定値を代入します。

これは私のやり方なのでI2Cブロックに直接44などの数値を書いてもいいですよ。

次は測定開始指示を出す部分です。I2C通信の命令を使用します。

次は測定値を分割して取得する部分です。

最後に取得した上位桁と下位桁を基に反射時間を計算する部分です。

これで実現できます。

一応、私が作ったプログラムを置いておきます。

まとめ:超音波センサーのプログラミングを楽しもう!

作ったプログラムが考えたとおりに動いたら嬉しいですよね。

少しでもプログラミングのお役に立てたら幸いです。

では、マイコンロボット工作セットを楽しんでください(^^)/~~~

タイトルとURLをコピーしました