WRX micro:bitを車両で使う その6 方位センサーの利用

2019年12月18日micro:bit, 社外部品・DIY

micro:bitでは搭載されている方位センサーから0~359度の範囲で数値を取得する事が可能で、Microsot MakeCodeにも「方角(°)」というブロックも既に用意されています。micro:bitの基本チュートリアルとしても既にありそうですが、方位センサーを利用して簡単に出来る事はコンパス(方位計)しか思い付かないので、今回はコンパスを作成してみます。

スポンサーリンク

方位センサーの数値

上記の様に「数を表示」のブロックに「方角(°)」のブロックを入れるだけで、シミュレーション画面のLEDに角度の数値が表示されます。方位センサーはmicro:bit本体の上部を「0」としてその時の北方向の角度を数値で表しています。シミュレーション画面の場合は上記矢印のマークをクリックしながらグリグリと回転させる事で、疑似的に方向を変える事が可能で右側に表示されている角度(90°)も変化します。同時にLEDの数値も変化しますが、LEDの数値は右から左にスクロールしながら繰り返し表示されています。

数値の指針化

コンパスといえば数値ではなく方位磁石の様に「針」による表示のイメージが強いので、LEDに矢印で北方向を示す様にします。Microsot MakeCodeでは「矢印を表示」のブロックも既にありますが、LEDの数(5*5)の都合上、8方向にしか表現出来ません(任意に作る事も可能ですが)。従って方位センサーから得られる角度の数値を8つ(8方向)に分割して矢印を表示する必要があります。

上記は最も簡単に角度の数値を8つに分割して、それぞれに対応する矢印の表示を行うプログラムです。単純に条件で範囲を分けて矢印を表示しています。

また矢印表示は任意に方向を選択出来ますが、数値としても指定が可能になっています。通常の「矢印を表示」は上向きや下向きとなっていますが、ここに数値入力のブロックを入れる事で0を上向きとして右回転で8方向(0~7)の指定も出来ます。

Microsot MakeCodeで開く

上記は各条件から「方向」という変数に数値を代入して、最後にその変数による矢印の表示を行っています。上記の様な比較ではなく方位センサーから得られる角度の数値から、計算式でそれぞれ答えが0~7となる様にプログラムを組めば、もっと少ないブロックで済みます。いずれの場合もmicro:bitでの動作は同じですが、プログラムの組み方は様々あります。

またMicroPython向けのドキュメンテーションには、矢印ではなくLEDで実際に針を描く様なコンパスのサンプルも掲載されています。・・・それでもやはり見易くはありませんが(上記)。

方位センサーのキャリブレーション

方位センサーを利用する前にはセンサーの調整作業を行う様にとドキュメンテーションに記載されています。Microsot MakeCodeでの方法は先に掲載したプログラムにも入っていますが、「入力」の「その他」の中にある「コンパスを調整する」のブロックを使用します。調整はmicro:bitに電源を入れるとLEDに「TILT TO FILL SCREEN」と文字が流れて表示された後に、25個のLEDの内の1つが点滅した状態になります。点滅しているLEDはmicro:bitを傾ける事で移動し、通過したLEDの箇所は点灯していくので(上記左)、25個全てのLEDが点灯する様にします。全てのLEDが点灯すると笑顔マークが表示されて(上記右)、調整は完了します。

調整後は記憶されるので、先のプログラムの様に毎回行う必要はありません。ドキュメンテーションではUSB経由でプログラムを書き込むとメモリがクリアされるので、再調整が必要とあります。

車内で使う

ここからは私の場合のみですが、今回のコンパスを車内で利用してみる事を想定します。コンパスはmicro:bitを水平にした状態でないと正しい方位は取得出来ません。従って車内のダッシュボード上などで見える様に立ててしまうと使えない事になってしまいます。そこで前回記事で書いた様に2台のMicro:bitを使用して、方位を測定するmicro:bitとLEDに表示するmicro:bitを分けて使い、2台のやり取りを無線機能で行う事にします。

Microsot MakeCodeで開く

上記は方位を測定して送信する側です。先ほどの変数を使用した場合のプログラムとほとんど同じですが、最後に無線で変数の数値を送信しています(この送信側のLEDにも矢印は表示させています)。また最初に無線のグループも設定しています。

変わって上記は受信する側で、LEDに方位の矢印を表示します。受信する数値は既に矢印表示の数値に対応しているので、そのまま「矢印を表示」ブロックで表示させるだけです。また無線のグループを送信側と同じ値に設定しています。これで送信側を水平に保った状態で方向を変化させれば、受信側がどの様な状態でもLEDに表示される矢印は同じになります(最初の写真)。ただし無線機能では多少時間差があります。

動画

その後、実際に車内で試してみました。スマホ同様に運転中はmicro:bitを注視する事は出来ないので、3Dプリンターで部品を作ってハンドルに取り付けています(今後、他の予定もあり)。ただしこの時は矢印表示の数値を間違えていて、送信側に対して受信側の表示が逆になっていました。

その他

Microsot MakeCodeには「磁力(μT)」という数値ブロックもあります(入力-その他)。Micro:bitでの磁力とは地球による地磁気で北極が「S」、南極が「N」となります。方位センサーで方向を検出する為にも利用されていますが、数値として磁力の大きさも利用出来る形です。単位はμT(マイクロテスラ)で赤道(経度0度)における磁力の大きさは31μT、経度50度で58μTとなっています(wiki)。

数値的にはほとんど変化しそうになく、その利用方法も思い付きません。また現在の所、Microsot MakeCodeでのシミュレーション画面ではサポートしていない様です。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。

その他

「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。