logo
Published on

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

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは豊富なGPIOピンを備えたシングルボードコンピュータであり、様々なセンサーやモジュールを接続して利用することができます。この記事では、「LSM303DLHC」と呼ばれる加速度計と磁力計を組み合わせたセンサーモジュールをRaspberry Piに接続し、制御する方法について解説します。

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

1. LSM303DLHCセンサーモジュールの概要

LSM303DLHCは、加速度計(Accelerometer)と磁力計(Magnetometer)を一つのモジュールに搭載したものです。これにより、物体の傾きや動き、周囲の磁場などを検知することが可能です。Raspberry Piに接続して利用することで、様々なプロジェクトに応用することができます。

2. LSM303DLHCの接続

LSM303DLHCをRaspberry Piに接続するには、通常、I2C(Inter-Integrated Circuit)を使用します。このため、Raspberry PiのGPIOピンに対応するI2CピンにLSM303DLHCを接続します。

  • SDA(Serial Data Line): I2Cデータライン
  • SCL(Serial Clock Line): I2Cクロックライン
  • VCC(Power): 3.3V電源
  • GND(Ground): 接地

3. Raspberry Piコードの作成

次に、Pythonを使用してLSM303DLHCを制御するためのコードを記述します。まずは、smbusライブラリをインストールします。

sudo apt-get install -y python3-smbus

次に、以下のPythonコードを実行します。

import smbus
import time

# LSM303DLHCのI2Cアドレス
LSM303DLHC_ADDRESS = 0x1E

# コントロールレジスタ
CTRL_REG1_A = 0x20

# 加速度値を読み取るためのレジスタ
OUT_X_L_A = 0x28

# I2Cバスの初期化
bus = smbus.SMBus(1)

# LSM303DLHCを初期化
def initialize_lsm303dlhc():
    # 0x27はデータレートが10Hzで、Z軸も有効にする設定
    bus.write_byte_data(LSM303DLHC_ADDRESS, CTRL_REG1_A, 0x27)

# 加速度を読み取る
def read_acceleration():
    # 16ビットの2の補数形式でデータを読み取る
    data = bus.read_i2c_block_data(LSM303DLHC_ADDRESS, OUT_X_L_A | 0x80, 6)
    x = data[0] | (data[1] << 8)
    y = data[2] | (data[3] << 8)
    z = data[4] | (data[5] << 8)
    return (x, y, z)

if __name__ == "__main__":
    try:
        initialize_lsm303dlhc()
        while True:
            acceleration = read_acceleration()
            print(f"Acceleration (X, Y, Z): {acceleration}")
            time.sleep(1)
    except KeyboardInterrupt:
        pass

このコードは、LSM303DLHCから加速度の値を読み取り、1秒ごとにそれを表示する簡単な例です。必要に応じて、磁力計の値を読み取るなど、センサーの機能を活用してプロジェクトを拡張することができます。

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

コードを実行する前に、Raspberry PiにLSM303DLHCが正しく接続されていることを確認してください。その後、コードを実行し、加速度の値が正しく表示されることを確認します。

これで、Raspberry PiにLSM303DLHCを接続し、制御するための基本的な手順が完了しました。LSM303DLHCのデータを利用して、様々なプロジェクトやアプリケーションを開発することが可能です。