WRX micro:bitを車両で使う その6 方位センサーの利用
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)の指定も出来ます。
上記は各条件から「方向」という変数に数値を代入して、最後にその変数による矢印の表示を行っています。上記の様な比較ではなく方位センサーから得られる角度の数値から、計算式でそれぞれ答えが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台のやり取りを無線機能で行う事にします。
上記は方位を測定して送信する側です。先ほどの変数を使用した場合のプログラムとほとんど同じですが、最後に無線で変数の数値を送信しています(この送信側の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 新バージョン「2.0」について
2020年11月25日より、Micro:bit本体の新バージョン「2.0」が発売になっています。従ってこれまでの古いmicro:bitを使用した記事(~その24)と新しいmicro:bitでは記事内容に相違がある場合があります。ただしこれまでのプログラムは基本的には新しいmicro:bitでも動作し、古いmicro:bitも引き続き使用する事が可能です(ハード的に新たに追加された機能は、拡張ボード等が必要ですが)。
なお新しいmicro:bitについては実際に1つ購入し、micro:bit関連記事「その25」から扱っています。
2022年4月追記
2021年12月にmicro:bit本体のバージョンが「2.2」になるとのアナウンスがありましたが、「2.0」との機能上の違いは無いとされています。
「micro:bit」関連記事
以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。
クリックで開きます
- WRX micro:bitを車両で使う その1 micro:bitの購入
- WRX micro:bitを車両で使う その2 Microsot MakeCodeとスマホ用アプリ
- WRX micro:bitを車両で使う その3 micro:bitの仕様と購入したブレイクアウトボード
- WRX micro:bitを車両で使う その4 本体ファームウェアの更新とWebUSB
- WRX micro:bitを車両で使う その5 無線機能の利用
- WRX micro:bitを車両で使う その6 方位センサーの利用
- WRX micro:bitを車両で使う その7 加速度センサーの利用
- WRX micro:bitを車両で使う その8 micro:bitからSIドライブのモード切替
- WRX micro:bitを車両で使う その9 サーボモーターの利用(準備編)
- WRX micro:bitを車両で使う その10 サーボモーターの利用(動作編)
- WRX micro:bitを車両で使う その11 可動式雲台を作る(2軸編)
- WRX micro:bitを車両で使う その12 可動式雲台を作る(1軸編)
- WRX micro:bitを車両で使う その13 連続回転サーボモーターの利用
- WRX micro:bitを車両で使う その14 Bluetoothでスマホから操作(データ受信)を行う
- WRX micro:bitを車両で使う その15 LCDパネル(I2C LCD1602・2004)の利用
- WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う
- WRX micro:bitを車両で使う その17 光センサーと温度センサーの利用
- WRX micro:bitを車両で使う その18 LEDのフォントとスクロールスピードを変える
- WRX micro:bitを車両で使う その19 ELM327の車両との通信を確認する
- WRX micro:bitを車両で使う その20 アスキーコード16進数から数値10進数への変換
- WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
- WRX micro:bitを車両で使う その22 7セグメントLEDの利用(TM1637ドライバ)
- WRX micro:bitを車両で使う その23 DCモーターを制御する(TB6612FNG・DRV8833)
- WRX micro:bitを車両で使う その24 ステッピングモーターを制御する(ULN2003ドライバ)
- WRX micro:bitを車両で使う その25 micro:bit バージョン2.0を購入(2021年12月 v2.2アナウンスあり)
- WRX micro:bitを車両で使う その26 バージョン2.0で追加されたMakeCodeブロック
- WRX micro:bitを車両で使う その27 バージョン2.0の初期状態と追加された機能
- WRX micro:bitを車両で使う その28 新バージョン(v2.0)のI2C通信
- WRX micro:bitを車両で使う その29 環境モニターを作る(気温・気圧・湿度編)
- WRX micro:bitを車両で使う その30 環境モニターを作る(二酸化炭素・有機化合物編)
- WRX micro:bitを車両で使う その31 環境モニターを作る(LCD表示・動作確認編)
- WRX micro:bitを車両で使う その32 環境モニターを作る(RTCモジュール追加編)
- WRX micro:bitを車両で使う その33 環境モニターを作る(ロギングモジュール追加編)
- WRX micro:bitを車両で使う その34 環境モニターを作る(ログデータ記録編)
- WRX micro:bitを車両で使う その35 車内のCO2濃度と換気について
- WRX micro:bitを車両で使う その36 新バージョン(v2.0)でのI2C通信の問題解決
- WRX micro:bitを車両で使う その37 Microsoft MakeCodeの新バージョン(v4)と新機能データロガー
- WRX micro:bitを車両で使う その38 mp3音声ファイルの再生(DFPlayer Mini)
- WRX micro:bitを車両で使う その39 車速パルス信号から速度を計算する
- WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る
- WRX micro:bitを車両で使う その41 フルカラーLEDマトリックス(WS2812B)で時計を作る
- WRX micro:bitを車両で使う その42 フルカラーLEDマトリックス(WS2812B)でピクセルアートアニメーションを作る
「micro:bit+プラレール」も始めました。
その他
FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。
注記
-
- このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
- 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
- micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。