趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

GY-271/GY-273 磁気センサー 調べて見ました

 3軸の磁気センサーとしてGY-271とGY-273が有ったので購入して調べて
見ました。結果的にはどちらも同じもので、電子磁気コンパスとして利用できる
事が判りました。
 ただし、同一平面上に有るはずのXとY軸のセンサーの出力にも大きな差が有り、
利用するには、サンプルコードには記載されていない補正処理の追加が必要でした。
 最後にiphoneのコンパスとの比較を行いましたが、回転位置によって誤差が
大きくなる部分も有り、メインチップにロットアウト品、あるいはチェック無しの
ものが利用されている事が想像できます。(そちらが安価な為)
 それでも、精度を必要としない用途では十分実用可能で、私の個人的な利用では
全く問題の無いものでした。 以下が今回確認した内容です。

<磁気センサーの概要>
 購入した磁気センサーは2種類の「Arduino」対応のもので、次の様なもの
   でした。
   イメージ 1

   1.型名 GY-271とGY-273
   2.仕様
         ・電源電圧 3.3V~5V
         ・X,Y、Z軸の3軸磁気センサー
         ・I2Cインターフェイス

<関連資料>
  センサーボード関連のデータシートは次のURLから入手可能です。
   URL : https://www.dipmicro.com/store/GY271-MOD
                  http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-gy-273-hmc5883l-magnetometer-compass-tutorial/

    センサーチップのデータシートは次のURLから入手可能です。
       URL : https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf

     使用するライブラリーは次のURLから入手可能です。
        URL : https://github.com/adafruit/Adafruit_HMC5883_Unified


<テスト内容>
 センサーのテストは次の様な内容で、「磁気コンパスとして利用」する処理を
   実行させる事にしました。

 [目的と結果]
    テストの確認目標は次のものでした。
         1.購入したものの動作方法の確認
         2.および、それが動作する事を確認
         3.GY-271とGY-273の比較

     結果としては、3軸のセンサーから出力される値にはバラツキが有る様で、
     コンパスとして動作させる前にセンサーをグルグル回して各軸の座標の中心を
     計算上のセンターとなる様な補正処理を付け加える事で磁気コンパスとして
     動作させる事ができる様になりました。また、GY-271とGY-273との違いは、
     電気的と物理的なもので、信号の出力結果は同じで有る事が判明しました。
    (取り付け条件からどちらかを決定すれば良い)

 [テストでの機器の接続]
    イメージ 2

   イメージ 3

 [テストコード]
   コードは上記ライブラリ内に有る examples\magsensor\magsensor.ino を
   参考に、最初にグルブル回す事で、各軸のセンサー出力を計算軸のセンターに
   補正する処理と、シリアルモニタへの出力をOLEDの画面上に表示する処理を
   追加しました。具体的なコードに関してはここからダウンロードできる様に
   して有ります。ご興味が有る場合はチェックして見て下さい。
    また、同じ様にOLEDを使って表示をする場合は、この記事を参照して下さい。
    (I2C対応でAdafruit_SSD1306 のライブラリーを使用)
   
  [動作状況]
   動作の確認は、4インチの iphone の磁気コンパスとの比較で行っています。
  (北方向の矢印に注目) また、撮影は事前に本体をグルグル回して座標軸の
   補正が行われた後に行っています。
    なお、撮影は本体の回転が必要な為、単三x4本の電池ボックスで行って
   います。
    更に、iphone とOLED上の角度数値差には iphone の置き方を考慮しなかった
   為180度の差が有ります。(北方向の矢印のみを注目してiphoneの置き位置
   への配慮がされていません。)