Skip to main content

Grove - 3軸デジタル加速度センサー(±16g)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues


pir

3軸デジタル加速度センサーは、方向検出、ジェスチャー検出、モーション検出などのプロジェクトにおいて重要な役割を果たします。この3軸デジタル加速度センサー(±16g)は、低消費電力IC ADXL345をベースにしています。最大10,000gの高衝撃耐性と、サンプルレートの設定が可能な特徴を持っています。大きな測定範囲を必要としない一般的なアプリケーションにおいて、このセンサーは耐久性があり、省エネルギーでコスト効率が高いため、優れた選択肢となります。

pir

仕様


  • 動作電圧: 3.0 - 5.5V
  • 測定範囲: ±16g
  • 感度: 3.9mg / LSB
  • スタンバイ電流: 0.1μA(スタンバイモード時 Vcc = 2.5 V(標準値))
  • 10,000gの高衝撃耐性
  • ECOPACK®RoHSおよび「グリーン」準拠
  • Suli互換ライブラリ
tip
- Groveモジュールに関する詳細は、[Grove System](https://wiki.seeedstudio.com/ja/Grove_System/)をご参照ください。

デモンストレーション


Arduinoを使用する場合

すべての加速度センサーは出荷前に個別にテストされています。ただし、稀にゼロオフセットを自分でリセットする必要がある場合があります。以下に、この加速度センサーから生データを読み取り、g(重力加速度)の単位でデータを取得する方法を示します。

pir

  • ステップ1: Grove - Base ShieldのI2Cポートに接続します。
  • ステップ2: Digital Accelerometer(±16g) Library .zipをダウンロードし、Arduinoインストールフォルダ内のarduino-1.0\librariesに解凍します。Arduino用ライブラリのインストール方法がわからない場合は、Arduinoライブラリのインストール方法を参照してください。
  • ステップ3: ライブラリがインストールされている場合、以下のパスからデモコードを直接開きます: File(ファイル) -> Example(例) ->DigitalAccelerometer_ADXL345->ADXL345_demo_code.
  • ステップ4: コードをアップロードし、シリアルモニターを開きます(通常は右上隅にあります)。アップロード方法がわからない場合は、コードのアップロードを参照してください。
  • ステップ5: 結果は以下の画像の形式で表示されます。Groveを振ると数値が変化するのがわかります。

pir

このセンサーの出力は、生データと、重力単位「g」に変換された3軸加速度情報の2つの部分で構成されています。

Codecraftを使って遊ぶ

ハードウェア

ステップ1. Groveケーブルを使用して、Grove - 3軸デジタル加速度センサー(±16g)をSeeeduinoのI2Cポートに接続します。Arduinoを使用する場合は、Base Shieldを利用してください。

ステップ2. Seeeduino/ArduinoをUSBケーブルでPCに接続します。

ソフトウェア

ステップ1. Codecraftを開き、Arduinoサポートを追加し、メイン手順を作業エリアにドラッグします。

note
初めてCodecraftを使用する場合は、[Arduinoを使用したCodecraftガイド](https://wiki.seeedstudio.com/ja/Guide_for_Codecraft_using_Arduino/)も参照してください。

ステップ2. 以下の画像のようにブロックをドラッグするか、このページの最後でダウンロードできるcdcファイルを開きます。

pir

プログラムをArduino/Seeeduinoにアップロードします。

tip
コードのアップロードが完了すると、シリアルモニターに加速度が表示されます。

Raspberry Piを使用する場合

  • ステップ1: Raspberry PiとGrovePiまたはGrovePi+を用意します。

  • ステップ2: 開発環境の設定を完了している必要があります。設定がまだの場合は、こちらを参照してください。

pir

pir

  • ステップ3: 接続

    • Groveケーブルを使用して、センサーをGrovePiのI2Cソケット(1〜3)に接続します。
  • Step4: デモのディレクトリに移動します:

cd yourpath/GrovePi/Software/Python/

コードを確認するには以下を実行します:

  nano grovepi_tilt_switch.py   # "Ctrl+x"で終了 #
import smbus
from time import sleep

# Raspberry Piのこのリビジョンに適したi2cバスを選択
revision = ([l[12:-1] for l in open('/proc/cpuinfo','r').readlines() if l[:8]=="Revision"]+['0000'])[0]
bus = smbus.SMBus(1 if int(revision, 16) >= 4 else 0)

# ADXL345定数
EARTH_GRAVITY_MS2 = 9.80665
SCALE_MULTIPLIER = 0.004

DATA_FORMAT = 0x31
BW_RATE = 0x2C
POWER_CTL = 0x2D

BW_RATE_1600HZ = 0x0F
BW_RATE_800HZ = 0x0E
BW_RATE_400HZ = 0x0D
BW_RATE_200HZ = 0x0C
BW_RATE_100HZ = 0x0B
BW_RATE_50HZ = 0x0A
BW_RATE_25HZ = 0x09

RANGE_2G = 0x00
RANGE_4G = 0x01
RANGE_8G = 0x02
RANGE_16G = 0x03

MEASURE = 0x08
AXES_DATA = 0x32

class ADXL345:

address = None

def __init__(self, address = 0x53):
self.address = address
self.setBandwidthRate(BW_RATE_100HZ)
self.setRange(RANGE_2G)
self.enableMeasurement()

def enableMeasurement(self):
bus.write_byte_data(self.address, POWER_CTL, MEASURE)

def setBandwidthRate(self, rate_flag):
bus.write_byte_data(self.address, BW_RATE, rate_flag)

# 10ビットの読み取り用に測定範囲を設定
def setRange(self, range_flag):
value = bus.read_byte_data(self.address, DATA_FORMAT)

value &= ~0x0F;
value |= range_flag;
value |= 0x08;

bus.write_byte_data(self.address, DATA_FORMAT, value)

# センサーから各軸の現在の読み取り値を返す
#
# パラメータ gforce:
# False (デフォルト): 結果はm/s^2で返される
# True : 結果はgsで返される
def getAxes(self, gforce = False):
bytes = bus.read_i2c_block_data(self.address, AXES_DATA, 6)

x = bytes[0] | (bytes[1] << 8)
if(x & (1 << 16 - 1)):
x = x - (1<<16)

y = bytes[2] | (bytes[3] << 8)
if(y & (1 << 16 - 1)):
y = y - (1<<16)

z = bytes[4] | (bytes[5] << 8)
if(z & (1 << 16 - 1)):
z = z - (1<<16)

x = x * SCALE_MULTIPLIER
y = y * SCALE_MULTIPLIER
z = z * SCALE_MULTIPLIER

if gforce == False:
x = x * EARTH_GRAVITY_MS2
y = y * EARTH_GRAVITY_MS2
z = z * EARTH_GRAVITY_MS2

x = round(x, 4)
y = round(y, 4)
z = round(z, 4)

return {"x": x, "y": y, "z": z}

if __name__ == "__main__":
# 直接実行された場合、クラスのインスタンスを作成し、
# 現在の読み取り値を出力する
adxl345 = ADXL345()

axes = adxl345.getAxes(True)
print "ADXL345 on address 0x%x:" % (adxl345.address)
print " x = %.3fG" % ( axes['x'] )
print " y = %.3fG" % ( axes['y'] )
print " z = %.3fG" % ( axes['z'] )

5.デモを実行します。

    sudo python grove_tilt_switch.py

Beaglebone Greenを使用する場合

BBG上のプログラムを編集するには、Cloud9 IDEを使用できます。 Cloud9 IDEに慣れるための簡単な演習として、BeagleBoneの4つのユーザープログラム可能なLEDの1つを点滅させる簡単なアプリケーションを作成するのが良いでしょう。

Cloud9 IDEを初めて使用する場合は、以下のリンクを参照してください。

  • Step1: Grove - UARTソケットをGrove - GPIOソケットとして設定します。以下のリンクを参照してください。

  • Step2: 右上の"+"をクリックして新しいファイルを作成します。

  • Step3: 以下のコードを新しいタブにコピーして貼り付けます。

import smbus
import time

bus = smbus.SMBus(1)

# ADXL345デバイスアドレス
ADXL345_DEVICE = 0x53

# ADXL345定数
EARTH_GRAVITY_MS2 = 9.80665
SCALE_MULTIPLIER = 0.004

DATA_FORMAT = 0x31
BW_RATE = 0x2C
POWER_CTL = 0x2D

BW_RATE_1600HZ = 0x0F
BW_RATE_800HZ = 0x0E
BW_RATE_400HZ = 0x0D
BW_RATE_200HZ = 0x0C
BW_RATE_100HZ = 0x0B
BW_RATE_50HZ = 0x0A
BW_RATE_25HZ = 0x09

RANGE_2G = 0x00
RANGE_4G = 0x01
RANGE_8G = 0x02
RANGE_16G = 0x03

MEASURE = 0x08
AXES_DATA = 0x32

class ADXL345:

address = None

def __init__(self, address = ADXL345_DEVICE):
self.address = address
self.setBandwidthRate(BW_RATE_100HZ)
self.setRange(RANGE_2G)
self.enableMeasurement()

def enableMeasurement(self):
bus.write_byte_data(self.address, POWER_CTL, MEASURE)

def setBandwidthRate(self, rate_flag):
bus.write_byte_data(self.address, BW_RATE, rate_flag)

# 10ビットの読み取り用に測定範囲を設定
def setRange(self, range_flag):
value = bus.read_byte_data(self.address, DATA_FORMAT)

value &= ~0x0F;
value |= range_flag;
value |= 0x08;

bus.write_byte_data(self.address, DATA_FORMAT, value)

# センサーから各軸の現在の読み取り値を返す
#
# パラメータ gforce:
# False (デフォルト): 結果はm/s^2で返される
# True : 結果はgsで返される
def getAxes(self, gforce = False):
bytes = bus.read_i2c_block_data(self.address, AXES_DATA, 6)

x = bytes[0] | (bytes[1] << 8)
if(x & (1 << 16 - 1)):
x = x - (1<<16)

y = bytes[2] | (bytes[3] << 8)
if(y & (1 << 16 - 1)):
y = y - (1<<16)

z = bytes[4] | (bytes[5] << 8)
if(z & (1 << 16 - 1)):
z = z - (1<<16)

x = x * SCALE_MULTIPLIER
y = y * SCALE_MULTIPLIER
z = z * SCALE_MULTIPLIER

if gforce == False:
x = x * EARTH_GRAVITY_MS2
y = y * EARTH_GRAVITY_MS2
z = z * EARTH_GRAVITY_MS2

x = round(x, 4)
y = round(y, 4)
z = round(z, 4)

return {"x": x, "y": y, "z": z}

if __name__ == "__main__":
# 直接実行された場合、クラスのインスタンスを作成し、
# 現在の読み取り値を出力する
adxl345 = ADXL345()

while True:
axes = adxl345.getAxes(True)
print "ADXL345 on address 0x%x:" % (adxl345.address)
print " x = %.3fG" % ( axes['x'] )
print " y = %.3fG" % ( axes['y'] )
print " z = %.3fG" % ( axes['z'] )
time.sleep(2)
  • Step4: ファイルを保存するには、ディスクアイコンをクリックし、拡張子を .py にします。

  • Step5: Grove - 3-Axis Digital Accelerometer(±16g) を BBG の Grove I2C ソケットに接続します。

  • Step6: コードを実行します。ターミナルが2秒ごとに重力情報を出力することが確認できます。

回路図オンラインビューア

リソース


プロジェクト

Grove - 3-Axis Digital Accelerometer の紹介: 3軸デジタル加速度計の使用方法。

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...