logo
Published on

Arduinoに「LIS3MDL」を接続し制御する

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Arduinoを使用して様々なセンサーやモジュールを制御することで、様々なプロジェクトを実現することができます。この記事では、磁気センサーモジュール「LIS3MDL」をArduinoに接続し、制御する方法について解説します。

※モジュールの価格を比較 ▶ TemuAliExpress楽天メルカリ

1. LIS3MDLの概要

LIS3MDLは、磁気センサーの一種であり、地磁気や方位を検出するのに利用されます。このモジュールは、三つの軸(X、Y、Z)に対する磁気の強さを測定することができ、I2CまたはSPI通信プロトコルを使用してArduinoと通信します。

2. LIS3MDLの接続

LIS3MDLをArduinoに接続するには、以下のように接続します。なお、接続には4つの線が必要です。

  • VCC(赤色): 3.3Vまたは5Vの電源
  • GND(茶色): 接地
  • SDA(緑色または青色): I2C通信のデータライン
  • SCL(黄色または白色): I2C通信のクロックライン

これらを対応するArduinoのピンに接続します。

3. Arduinoコードの作成

次に、Arduino IDEを開いてLIS3MDLを制御するためのコードを書きます。以下は、LIS3MDLが接続されたI2Cアドレスが0x1Eだと仮定した例です。

#include <Wire.h>

#define LIS3MDL_ADDR 0x1E // LIS3MDLのI2Cアドレス

void setup() {
  Wire.begin();
  Serial.begin(9600);
  
  // LIS3MDLの初期化
  Wire.beginTransmission(LIS3MDL_ADDR);
  Wire.write(0x20); // コントロールレジスタ1を設定
  Wire.write(0x90); // 8ガウスの磁場範囲を選択
  Wire.endTransmission();
}

void loop() {
  // LIS3MDLからデータを取得
  Wire.beginTransmission(LIS3MDL_ADDR);
  Wire.write(0x28); // X軸のデータの先頭アドレス
  Wire.endTransmission(false);
  Wire.requestFrom(LIS3MDL_ADDR, 6, true);

  // 取得したデータを表示
  int x = Wire.read() | (Wire.read() << 8);
  int y = Wire.read() | (Wire.read() << 8);
  int z = Wire.read() | (Wire.read() << 8);

  Serial.print("X: ");
  Serial.print(x);
  Serial.print("  Y: ");
  Serial.print(y);
  Serial.print("  Z: ");
  Serial.println(z);

  delay(1000); // 1秒待つ
}

このコードは、LIS3MDLから三軸の磁場データを読み取り、シリアルモニターに表示する簡単な例です。

4. コードのアップロードと動作確認

最後に、書いたコードをArduinoにアップロードし、LIS3MDLが正しく動作しているか確認します。アップロードが成功したら、シリアルモニターにX、Y、Z軸の磁場データが表示されるはずです。

これで、ArduinoにLIS3MDLを接続し、磁場データを取得するための基本的な手順が完了しました。さらに、このデータを活用して方位や地磁気の変化を検知するなど、様々なアプリケーションを開発することが可能です。