見出し画像

microbitプログラミング デジタルだいたいコンパスを作る!

microbitでプログラミングを楽しんでいるでしょうか?

今回はmicrobitでコンパスを作ってみようと思います。
microbitは方角を検知できます。
compassモジュールを使うことで方角の角度を取得できます。
この取得した方角によってmicrobitで方角をアルファベットで表示します。

コンパスのドキュメントは以下のサイトからサンプルコードがございます。
サンプルコードは北の方角だけ指し示すコード例が記載されていますので、他の東、西、南を表示するようにコードを拡張します。

公式ドキュメントにはそのほか磁力を測ることができたりするメソッド等もあり、興味がある方や拡張のネタを探したい方は下記サイトを見てみると良いでしょう。

実装コード

今回実装するコードはこちらです。

from microbit import *
compass.calibrate()

while True:
   bearing = compass.heading()
   if bearing < 45 or bearing >= 315:
       display.show('N')
       sleep(100)
   elif bearing < 135 and bearing >= 45:
       display.show('E')
       sleep(100)
   elif bearing < 225 and bearing >= 135:
       display.show('S')
       sleep(100)
   elif bearing < 315 and bearing >= 225:
       display.show('W')
       sleep(100)
   else:
       display.show('!')
       sleep(100)

コードはダウンロードできるように用意もしておきます。
参考にしてください。

方角については下記サイトにある画像がわかりやすいです。

画像1

図のように北を0度として時計回りに角度が表されます。
つまり、90度で東、180度で南、270度で西です。
今回は90度で4分割して東西南北で大体の方角を表します。
北西とか南西とかは表示できないのでだいたいの方角がわかりますw
とりあえずどっちの方角か知りたい時に使えるものとなりますw

https://microbit.org/projects/make-it-code-it/compass-north/?editor=python

完成した動画がこちらになります。
向きを変えるとその方角を表します。
microbitの顔がある方向かコンパスの方位磁針の向きとなります。

コード解説

コード解説をしていきましょう。

まずライブラリをインポートします。

from microbit import *

方位磁針のキャリブレーションをします。
これを実行しないと正確な方角を取得することができないので注意が必要です。

compass.calibrate()

キャリブレーションが実行されると、下の画像のようにmicrobitを上下左右に傾かせてmicrobit画面の赤いランプを全部つくようにします。

画像2

全部LEDランプをつけると、下のようにmicrobitのLEDがスマイルマークになります。
これでキャリイブレーションが完了です。

画像3

次にwhileで無限ループにして電源ONの間コンパスとして機能するようにさせます。
bearing = compass.heading()でbearingに取得した方角の値が格納されます。
if文で取得した方角により北ならNと表示させます。
表示が取得した方角に対して機敏に反応して表示が乱れないようにあえてsleep(100)により0.1秒間何もしない処理を入れます。
これを東西南北を表すように方角の値によって分岐させる処理を各方角ごとにif文で作製します。
下記には北の場合の処理を記載します。
今回は東西南北ですので、北は315度以上45度未満ならN、東は45度以上135度未満ならE、南は135度以上225度未満ならS、西は225度以上315度未満ならWと表示する処理を入れて完成です。

while True:
   bearing = compass.heading()
   if bearing < 45 or bearing >= 315:
       display.show('N')
       sleep(100)

あとはwhileループで常に方角を取得しているので、向いている方角に対して処理がされて方角が変われば表示される方角もしっかり変わります。

改良できるところ

今回はだいたいコンパスですので、東西南北しか表示できません。
南西とか北東とかは示してくれません。
取得した方角の分岐をさらに細かく分割することで方角の種類を増やすことができます。
より細かい方角を表示できるように改良してみると良いでしょう。

感想

microbitで簡単にデジタルだいたいコンパスを作りました。
pythonのコードもモジュールが既にあるのでif文で分岐処理を行うだけで方角の取得から方角の表示ができます。
コードの行も20行で今回のプログラムは書けるので、わかりやすく作りやすいです。
if文のおさらいにも良いでしょう。
microbitを入れられるケースを用意すれば本格的なコンパスとなるでしょう。

ケース、本体、電源、参考書が一つになったセットもありますので、どれを揃えればいいとか迷う必要もありません。


よろしければサポートをよろしくお願いします。サポートいただいた資金は活動費に使わせていただきます。