- Published on
Raspberry Piに「LSM303DLHC」を接続し制御する
- Authors
- Name
- 将 有坂
- short bio
- ラズパイやArduinoで電子工作をしてます。
はじめに
Raspberry Piは豊富なGPIOピンを備えたシングルボードコンピュータであり、様々なセンサーやモジュールを接続して利用することができます。この記事では、「LSM303DLHC」と呼ばれる加速度計と磁力計を組み合わせたセンサーモジュールをRaspberry Piに接続し、制御する方法について解説します。
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のデータを利用して、様々なプロジェクトやアプリケーションを開発することが可能です。