Arduino で HMC5883L を使用するための完全ガイド

  • HMC5883L と Arduino を I2C 通信で接続します。
  • 磁場の X、Y、Z 軸を読み取るコード。
  • 磁気偏角を調整してデジタルコンパスを作成します。

コードhmc5883l arduino-3

HMC5883L 磁力計は、2 軸の磁場を測定できるため、Arduino プロジェクトで広く使用されているセンサーです。このため、デジタル コンパス、ドローン用ナビゲーション システム、その他の自律走行車の作成に最適です。手頃な価格に加えて、IXNUMXC インターフェイスのおかげで統合が簡単なので、初心者に最適です。

この記事では、HMC5883L の主な機能、さまざまな Arduino ボードとの接続、およびその使用例について詳しく説明します。最終的には、この強力なセンサーの可能性を最大限に活用して、Arduino を使用して独自のデジタル コンパス プロジェクトを実装できるようになります。

HMC5883L とは何ですか?またどのように機能しますか?

HMC5883L は、 3軸磁力計 X、Y、Z 軸における地球の磁場の成分を測定します。これにより、磁場の存在を検出できるだけでなく、得られた測定値に基づいて計算によって方位を決定することもできます。これらの機能により、デジタル コンパスなどの方位システムを作成するための理想的なセンサーになります。

センサーは通常、GY-273 モデルなどのモジュールに含まれており、Arduino ボードや他のマイクロコントローラーとの直接接続を容易にするために必要な電子機器も含まれています。電源は柔軟で、3.3V と 5V の両方で電力を供給できるため、さまざまなシステムとの互換性という点で非常に多用途です。

Arduinoの接続

HMC5883L と Arduino の接続は、I2C インターフェイスを使用しているため非常に簡単です。この通信に必要なピンは XNUMX つだけです。 SDAとSCL、Arduino ボード上の対応するピンに接続する必要があります。

  • へ Arduino Uno、Nano および Mini: SDA はピン A4 に接続され、SCL は A5 に接続されます。
  • Arduino Mega または Due を使用する場合: SDA をピン 20 に接続し、SCL をピン 21 に接続する必要があります。
  • Arduino Leonardo の場合: SDA はピン 2 に、SCL はピン 3 に接続されます。

磁力計は固定 I2C アドレス 0x1E で動作するため、変更できないことを忘れないでください。このアドレスはこのタイプのセンサーにとって一意であり、同じ I5883C バス上に複数の HMC2L デバイスを接続できないことを意味します。

磁場の読み取り

HMC5883L の主な操作方法は、XNUMX つの軸すべての磁界値を読み取ることです。 Arduino でこれらの値を取得するには、Jeff Rowberg によって開発されたライブラリを使用します。この書店は次の場所で見つけることができます GitHubリポジトリ Arduino IDE で使用するためにダウンロードします。

ライブラリがインストールされると、センサーが初期化され、磁界値の読み取りを開始できます。これを実行する簡単な例を次に示します。

#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;

void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}

void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}

このコードでは、磁力計が初期化され、3 つの軸すべての値がループで読み取られます。 `loop()`を実行するたびに、X、Y、Zの磁場の値がシリアルモニターに表示されます。

レンジとゲインの設定

HMC5883L を使用すると、 磁界測定範囲 異なるゲインレベルで±0.88ガウスと±8.1ガウスの間。デフォルトの範囲は ±1.3 ガウスで、プロジェクトのニーズに合わせて変更できます。これは、コード内で次の行を使用して実行できます。

magnetometro.setGain(value);

どこ は 0 ~ 7 の整数で、ゲイン レベルを選択します。以下に、対応する値を示す表を示します。

勇気 ランゴ ゲイン (LSB/ガウス)
0 ±0.88Ga 1370
1 ±1.3Ga 1090
2 ±1.9Ga 820
3 ±2.5Ga 660
4 ±4.0Ga 440
5 ±4.7Ga 390
6 ±5.6Ga 330
7 ±8.1Ga 230

デジタルコンパスの構築

HMC5883L の最も一般的な用途の XNUMX つは、 デジタルコンパス。これを行うには、X 軸と Y 軸の読み取り値を使用してセンサーと磁北の間の角度を計算する必要があります。これは次の式を使用して実現されます。

float angulo = atan2(my, mx) * 180 / M_PI;

この値により、磁北に対する方位角がわかります。この角度を調整するには 地理的北、現在地の磁気偏角を考慮する必要があります。これは、www.ign.es や www.ngdc.noaa.gov などのさまざまな Web サイトで参照できます。

磁気偏角を修正する

自分の位置の磁気偏角がわかったら、得られた角度からそれを差し引くだけです。例えば:

angulo -= declinacion;

角度が負の場合、360 度を加算すると、常に 0 ~ 360 度の間で調整された正の値が得られます。

if (angulo < 0) angulo += 360;

この設定により、地理的な北を常に正確に指すコンパスが得られます。

実際には、このセンサーといくつかのライブラリを使用すると、数分でコンパスを作成できます。ただし、HMC5883L は、近くの金属や高電流によって生成される磁場などの外部干渉に敏感なセンサーであり、読み取り値が変化する可能性があることに注意してください。


優先ソースとして追加