logo
Published on

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

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは、小型で手軽に利用できるシングルボードコンピューターで、様々なセンサーやモジュールを接続して利用することができます。この記事では、加速度センサー「ADXL345」をRaspberry Piに接続し、制御する方法について解説します。

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

1. ADXL345の概要

ADXL345は、3軸の加速度を測定するセンサーで、小型で低消費電力ながら高精度な計測が可能です。I2C通信を使用してデータを取得し、Raspberry Piなどのシングルボードコンピューターに接続して使用します。

2. ADXL345の接続

ADXL345をRaspberry Piに接続するには、通常、4つのピンがあります。

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

これらをRaspberry Piの対応するピンに接続します。Raspberry Pi 4の場合、I2Cピンはデフォルトで有効になっていますが、Raspberry Pi 3以前のモデルではraspi-configを使用してI2Cを有効にする必要があります。

3. Pythonコードの作成

ADXL345を制御するためには、Python言語を使用するのが一般的です。以下は、smbusモジュールを使用してADXL345からデータを読み取り、コンソールに表示する簡単な例です。

import smbus
import time

# ADXL345のI2Cアドレス
ADXL345_ADDRESS = 0x53

# レジスタアドレス
POWER_CTL = 0x2D
DATA_FORMAT = 0x31
DATAX0 = 0x32
DATAX1 = 0x33
DATAY0 = 0x34
DATAY1 = 0x35
DATAZ0 = 0x36
DATAZ1 = 0x37

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

# ADXL345の初期化
bus.write_byte_data(ADXL345_ADDRESS, POWER_CTL, 0x08)
bus.write_byte_data(ADXL345_ADDRESS, DATA_FORMAT, 0x0B)

def read_acceleration_data(register):
    low_byte = bus.read_byte_data(ADXL345_ADDRESS, register)
    high_byte = bus.read_byte_data(ADXL345_ADDRESS, register + 1)
    value = (high_byte << 8) + low_byte
    if value & (1 << 16 - 1):
        value -= 1 << 16
    return value

try:
    while True:
        x = read_acceleration_data(DATAX0)
        y = read_acceleration_data(DATAY0)
        z = read_acceleration_data(DATAZ0)

        print(f"X: {x}, Y: {y}, Z: {z}")

        time.sleep(1)

except KeyboardInterrupt:
    print("プログラムを終了します")

このPythonコードは、ADXL345からX、Y、Z軸の加速度データを読み取り、1秒ごとにコンソールに表示します。

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

Pythonコードを実行して、ADXL345からのデータが正しく表示されることを確認します。加速度センサーの傾きや振動などによって、値が変化することが期待されます。

これで、Raspberry PiにADXL345を接続し、Pythonを使用して制御する基本的な手順が完了しました。このセンサーデータを活用して、様々なプロジェクトや応用を試みてみることができます。