• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / microbit / micro:bitでSTEM教育:地磁気センサーを使ってみよう

micro:bitでSTEM教育:地磁気センサーを使ってみよう

2020年4月8日 by STEMSHIP 2 コメント

micro:bitは地磁気センサー(電子コンパス)を搭載しています。地磁気センサーは、スマートフォンにもよく使用されています。このセンサーを使用して、どのようなものが作れるのか?そもそも、地磁気センサーとはどのような仕組み?どうやってプログラムするのか?ということを紹介します。

なにができる?

micro:bit (v1.5)の地磁気センサーは、LSM303GR というICを使用しており、-50ガウス~+50ガウスの範囲を測定できます。分解能は、0.0015ガウスです。地磁気の強さは場所によって異なりますが、日本(東京)では約0.45ガウスです。したがって、地磁気を検知するには十分な分解能があります。

micro:bitの地磁気センサの位置

地磁気センサーとは?

地磁気センサは、地球の磁場を検知することを主な目的としています。地球は大きな磁石として考えることができ、北極部が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を点灯させれば完了です。完了したときは、スマイルマークが表示されます。

micro:bitの地磁気センサのキャリブレーション

どんな物が作れる?

方位磁針のように、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の地磁気センサの基本的な使い方について学ぶことができたと思います。この地磁気センサは、一般的な磁石の磁場を検知することもできるので、箱の開閉やドアの開閉などの検知にも利用できると思います。また、方角を検知できるので、地図情報などと組み合わせることができれば、自動運転のような、高度なものを作れる可能性があります。

Filed Under: microbit 関連タグ:磁気センサ

Reader Interactions

コメント

  1. アバターtaiyo kanei says

    2021年5月20日 at 10:51 AM

    キャリブレーションの方法が分かりません。LEDが上記のような表示になりません。

    返信
    • STEMSHIPSTEMSHIP says

      2021年7月13日 at 8:29 AM

      学校などでmicrobitを共有して使用している場合は、すでに誰かがキャリブレーション実施済みかもしれません。
      地磁気センサを使用したプログラムが期待通りの動作をしていれば、気にする必要はありません。

      返信

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM