logo
Published on

Raspberry Piに「MAG3110」を接続し制御する

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは多くのセンサーやモジュールと組み合わせて様々なプロジェクトを構築するための強力なプラットフォームです。この記事では、地磁気センサー「MAG3110」をRaspberry Piに接続し、制御する方法について解説します。

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

1. MAG3110センサーの概要

MAG3110は、地磁気を測定するためのセンサーであり、小型でI2C通信を介してデータを提供します。Raspberry Piに接続して使用することで、周囲の地磁気の変化を検知できます。

2. MAG3110の接続

MAG3110をRaspberry Piに接続するには、以下の手順を実行します。

  • VCC: 3.3V電源
  • GND: 接地
  • SDA: I2Cデータライン
  • SCL: I2Cクロックライン

これらのピンをRaspberry Piの対応するピンに接続します。一般的に、Raspberry Piのピン配置はデータシートや製品のマニュアルで確認できます。

3. Raspberry Piのセットアップ

MAG3110を接続したら、Raspberry PiのI2Cインターフェースを有効にします。以下のコマンドを使用して、必要なツールをインストールします。

sudo apt-get update
sudo apt-get install -y i2c-tools

その後、Raspberry Piを再起動します。

4. Pythonコードの作成

次に、MAG3110を制御するPythonコードを作成します。以下は、smbus ライブラリを使用した基本的な例です。

import smbus
import time

# MAG3110のI2Cアドレス
MAG3110_I2C_ADDR = 0x0E

# レジスタ定義
CTRL_REG1 = 0x10
OUT_X_MSB = 0x01
OUT_Y_MSB = 0x03
OUT_Z_MSB = 0x05

bus = smbus.SMBus(1)

# MAG3110初期化
bus.write_byte_data(MAG3110_I2C_ADDR, CTRL_REG1, 0x01)

time.sleep(0.5)

# データ読み取り
def read_data(register):
    data = bus.read_i2c_block_data(MAG3110_I2C_ADDR, register, 6)
    value = (data[0] << 8) | data[1]
    if value > 32767:
        value -= 65536
    return value

try:
    while True:
        x = read_data(OUT_X_MSB)
        y = read_data(OUT_Y_MSB)
        z = read_data(OUT_Z_MSB)

        print(f"X: {x}, Y: {y}, Z: {z}")
        time.sleep(1)

except KeyboardInterrupt:
    pass
finally:
    bus.close()

このコードは、MAG3110からX、Y、Z方向の地磁気データを読み取り、1秒ごとに表示する簡単な例です。

5. コードの実行と結果確認

Pythonコードを保存して実行すると、MAG3110からの地磁気データが表示されるはずです。センサーの向きを変えると、データが変化することが確認できます。

これで、Raspberry PiにMAG3110を接続し、Pythonコードを使用してデータを読み取る基本的な手順が完了しました。これをベースにして、地磁気データを活用した様々なプロジェクトを構築することができます。