micro:bitは地磁気センサー(電子コンパス)を搭載しています。地磁気センサーは、スマートフォンにもよく使用されています。このセンサーを使用して、どのようなものが作れるのか?そもそも、地磁気センサーとはどのような仕組み?どうやってプログラムするのか?ということを紹介します。
なにができる?
micro:bit (v1.5)の地磁気センサーは、LSM303GR というICを使用しており、-50ガウス~+50ガウスの範囲を測定できます。分解能は、0.0015ガウスです。地磁気の強さは場所によって異なりますが、日本(東京)では約0.45ガウスです。したがって、地磁気を検知するには十分な分解能があります。
地磁気センサーとは?
地磁気センサは、地球の磁場を検知することを主な目的としています。地球は大きな磁石として考えることができ、北極部がS極、南極部がN極となっています。したがって、方位磁針のN極は地球のS極(北極部)と引っ張り合い、方位磁針のS極は地球のN極(南極部)と引っ張り合います。
地磁気センサの主な種類は、ホールセンサとMRセンサです。
ホールセンサは、ホール効果を用いたセンサで、磁束密度に応じた電圧を測定することで、その大きさを検知します。 例えば、ノートパソコンの開閉 を検知するような、非接触スイッチとして使用されています。
MRセンサは、磁場に応じて電気抵抗が 変化する物質・構造を用いたセンサです。ホールセンサよりも高精度・低消費電力なので、スマートフォンなどの電子コンパスとしてよく使用されています。microbit(v1.5)の磁気センサは、MRセンサ( LSM303GR )を使用しています。
microbitの地磁気センサは、3軸タイプのセンサです。一般的な方位磁針のように、物の傾きを考慮しない場合は、XとYの2軸のみを使用すれば検知できますが、傾きを検知しようとすると、Z軸が必要になります。
地磁気センサのキャリブレーション
新規購入したスマートフォンをはじめて使用するとき、キャリブレーションをするために、スマートフォンを色んな方向に傾けるように指示されると思います。それと同様に、micro:bitも初めて地磁気センサを使用するときは、キャリブレーションが必要です。
キャリブレーションをするために、新たにブロックを使用する必要はありません。地磁気センサを使用したプログラムをダウンロードして起動すると、自動でキャリブレーションが呼び出されます。 LEDマトリクスに、”TILT TO FILL SCREEN”とスクロール表示されていれば、それがその画面です。 その後、LEDが2個展等下画面になり、micro:bitを傾けて、全てのLEDを点灯させれば完了です。完了したときは、スマイルマークが表示されます。
どんな物が作れる?
方位磁針のように、LEDマトリクスに矢印を表示させ、矢印の方向は北側を向くようにプログラムします。Aボタンを押すことで、その方角を角度で表示するようにします。Bボタンを押すことで、3軸の磁気強度と絶対値を数字(μT)で表示します。 最後に、磁石を近づけるとどうなるか、やってみましたので、下記動画を見てください。
プログラミング
プログラムは大きく3つの部分から構成されています。
1.磁気センサの計測値を取得
磁気センサの計測値は、「方角(°)」「磁力(μT)」の2種類あります。 「方角(°)」 は、ツールボックスの「入力」の中にあります。「磁力(μT)」は、「入力→その他」の中にあります。 方角は、北を0°、東を90°、南を180°、西を270°という値で取り扱います。 磁力(μT) は、μT(マイクロテスラ)という単位で扱われます。1万ガウスが1テスラなので、地磁気0.45ガウスは、45マイクロテスラとなります。それぞれの計測値を変数に取り込むため、ツールボックスの「変数」から変数追加をします。
2.計測値をLEDに表示する
Aボタンを押したときに、方角を数字でLEDで表示します。「論理」から「もし~なら」と、「入力」から「ボタンAが押されている」を組み合わせて、その中に「基本」の「文字列を表示」で、方角を表示します。
同様に、Bボタンを押したときは、3軸の磁力と絶対値を表示します。文字列をつなげて表示するブロックは、「高度なブロック→文字列」の中にあります。
3.方角を矢印で表示する
方位磁針と同じように、LEDマトリクスに矢印を表示させ、その矢印が北(0°)を向くようにします。矢印のパターンは8方向とします。したがって、1つの角度に割り当てる角度は、360°÷8=45°となります。例えば、東(90°)の矢印を表示する範囲は、地磁気センサの方角が90°±22.5°となりますので、 「方角(変数compass)≧ 67.5 かつ 方角 (変数compass)<112.5」となります。「~かつ~」のブロックは、「論理」の真理値ブループにあります。 このとき、micro:bitは東を向いているため、表示させる矢印は「←」です。
同じ内容のJavascriptプログラムも掲載しておきます。
let compass = 0 let X = 0 let Y = 0 let Z = 0 let Abs = 0 basic.forever(function () { compass = input.compassHeading() X = input.magneticForce(Dimension.X) Y = input.magneticForce(Dimension.Y) Z = input.magneticForce(Dimension.Z) Abs = input.magneticForce(Dimension.Strength) if (input.buttonIsPressed(Button.A)) { basic.showString("" + compass) } if (input.buttonIsPressed(Button.B)) { basic.showString("" + X + Y + Z + Abs) } if (compass >= 22.5 && compass < 67.5) { basic.showLeds(` . # # # # . . . # # . . # . # . # . . # # . . . . `) } else if (compass >= 67.5 && compass < 112.5) { basic.showLeds(` . . # . . . . . # . # # # # # . . . # . . . # . . `) } else if (compass >= 112.5 && compass < 157.5) { basic.showLeds(` # . . . . . # . . # . . # . # . . . # # . # # # # `) } else if (compass >= 157.5 && compass < 202.5) { basic.showLeds(` . . # . . . . # . . # . # . # . # # # . . . # . . `) } else if (compass >= 202.5 && compass < 247.5) { basic.showLeds(` . . . . # # . . # . # . # . . # # . . . # # # # . `) } else if (compass >= 247.5 && compass < 292.5) { basic.showLeds(` . . # . . . # . . . # # # # # . # . . . . . # . . `) } else if (compass >= 292.5 && compass < 337.5) { basic.showLeds(` # # # # . # # . . . # . # . . # . . # . . . . . # `) } else { basic.showLeds(` . . # . . . # # # . # . # . # . . # . . . . # . . `) } })
まとめ
micro:bitの地磁気センサの基本的な使い方について学ぶことができたと思います。この地磁気センサは、一般的な磁石の磁場を検知することもできるので、箱の開閉やドアの開閉などの検知にも利用できると思います。また、方角を検知できるので、地図情報などと組み合わせることができれば、自動運転のような、高度なものを作れる可能性があります。
taiyo kanei says
キャリブレーションの方法が分かりません。LEDが上記のような表示になりません。
STEMSHIP says
学校などでmicrobitを共有して使用している場合は、すでに誰かがキャリブレーション実施済みかもしれません。
地磁気センサを使用したプログラムが期待通りの動作をしていれば、気にする必要はありません。