logo
Published on

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

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは汎用のシングルボードコンピュータで、様々なセンサーやモジュールを組み合わせて利用することができます。この記事では、地磁気センサー「HMC5883L」をRaspberry Piに接続し、Pythonを使用して制御する方法について解説します。

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

1. HMC5883L地磁気センサーの概要

HMC5883Lは、三軸の地磁気センサーであり、地磁気の方向を計測することができます。I2C通信を使用してデータを取得し、Raspberry Piと組み合わせることで、方位角や地磁気の変動を検知するプロジェクトを構築することができます。

2. HMC5883Lの接続

HMC5883LをRaspberry Piに接続するためには、通常以下のような接続が必要です。

  • VCC(赤色): 3.3Vの電源
  • GND(茶色): 接地
  • SCL(緑色): I2Cのクロック
  • SDA(黄色): I2Cのデータ

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

3. Pythonコードの作成

HMC5883Lを制御するために、Python言語を使用します。まず、Raspberry Piに smbus ライブラリをインストールします。

sudo apt-get install python3-smbus
sudo apt-get install i2c-tools

次に、以下のPythonコードを使用してHMC5883Lを制御します。

import smbus
import time

# I2Cアドレス
address = 0x1E

# コンパスデータ読み込み
def read_compass(bus):
    bus.write_byte_data(address, 0, 0b01110000)  # Set to 8 samples @ 15Hz
    bus.write_byte_data(address, 1, 0b00100000)  # 1.3 gain LSb / Gauss 1090 (default)
    bus.write_byte_data(address, 2, 0b00000000)  # Continuous sampling

# 角度計算
def calculate_angle(bus):
    data = bus.read_i2c_block_data(address, 0, 6)
    x = data[0] << 8 | data[1]
    z = data[2] << 8 | data[3]
    y = data[4] << 8 | data[5]

    angle = (180 * (atan2(y, x) + pi) / pi) + 180
    return angle

# メインプログラム
def main():
    bus = smbus.SMBus(1)

    try:
        while True:
            read_compass(bus)
            angle = calculate_angle(bus)
            print(f"Current Angle: {angle} degrees")
            time.sleep(1)

    except KeyboardInterrupt:
        print("Program terminated by user.")
        bus.close()

if __name__ == "__main__":
    main()

4. コードの実行と動作確認

Pythonコードを保存し、実行します。地磁気センサーが正しく接続されていれば、コンソールに現在の角度が表示されます。

これで、Raspberry PiにHMC5883Lを接続し、地磁気センサーを制御するための基本的な手順が完了しました。このプロジェクトを拡張するには、取得したデータを可視化したり、他のセンサーと組み合わせて利用したりすることができます。