1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Grove IoT スターターキット for SORACOM で加速度センサーを使う

Last updated at Posted at 2021-08-06

ライブラリー違いで2つのプログラムを書いてみました。
加速度センサーの Grove は I2C に接続します。

ADXL345.h を使う方法

accelerometer_adxl/accelerometer_adxl.ino
// ---------------------------------------------------------------
/*
	accelerometer_adxl.ino

					Aug/06/2021
*/
// ---------------------------------------------------------------
#include <WioLTEforArduino.h>
#include <ADXL345.h>

#define INTERVAL    (5000)

WioLTE Wio;
ADXL345 Accel;

// ---------------------------------------------------------------
void setup()
{
	delay(200);

	SerialUSB.println("");
	SerialUSB.println("*** START ***");
	
	SerialUSB.println("### I/O Initialize.");
	Wio.Init();
	
	SerialUSB.println("### Power supply ON.");
	Wio.PowerSupplyGrove(true);
	delay(500);
	Accel.powerOn();
	
	SerialUSB.println("### Setup completed.");
}

// ---------------------------------------------------------------
void loop()
{
	int value[3];
	Accel.readXYZ(&value[0], &value[1], &value[2]);

	SerialUSB.print("ADXL: X: ");
	SerialUSB.print(value[0]);
	SerialUSB.print(" Y: ");
	SerialUSB.print(value[1]);
	SerialUSB.print(" Z: ");
	SerialUSB.println(value[2]);

	Wio.LedSetRGB(0, 0, 1);	
	delay(INTERVAL / 2);
	Wio.LedSetRGB(0, 0, 0);	
	delay(INTERVAL / 2);
}

// ---------------------------------------------------------------

Wire.h を使う方法

accelerometer_wire/accelerometer_wire.ino
// ---------------------------------------------------------------
/*
	accelerometer_wire.ino

						Aug/06/2021
*/
// ---------------------------------------------------------------
#include <Wire.h>

#define INTERVAL	(5000)
 
// デバイスアドレス(スレーブ)
uint8_t DEVICE_ADDRESS = 0x53;	
 
// XYZレジスタ用のテーブル(6byte)
uint8_t RegTbl[6];	

// ---------------------------------------------------------------
void setup() {
	// マスタとしてI2Cバスに接続する
	Wire.begin();			 
 
	// DATA_FORMAT(データ形式の制御) 
	Wire.beginTransmission(DEVICE_ADDRESS);	
		// DATA_FORMATのアドレス		
		Wire.write(0x31);
		// 「最大分解能モード」 及び 「±16g」 (0x0B == 1011)
		Wire.write(0x0B);	
		// 「10bit固定分解能モード」 及び 「±16g」にする場合 (0x03 == 0011)
		// Wire.write(0x03);
	Wire.endTransmission();
 
	// POWER_TCL(節電機能の制御) 
	Wire.beginTransmission(DEVICE_ADDRESS);	
		// POWER_CTLのアドレス		
		Wire.write(0x2d);
		// 測定モードにする
		Wire.write(0x08);	
	Wire.endTransmission();
}
 
// ---------------------------------------------------------------
void loop() {
	// XYZの先頭アドレスに移動する
	Wire.beginTransmission(DEVICE_ADDRESS);
	Wire.write(0x32);
	Wire.endTransmission();
	
	// デバイスへ6byteのレジスタデータを要求する
	Wire.requestFrom(DEVICE_ADDRESS, 6);
	 
	// 6byteのデータを取得する
	int i;
	for (i=0; i< 6; i++){
		while (Wire.available() == 0 ){}
		RegTbl[i] = Wire.read();
	}
 
	// データを各XYZの値に変換する(LSB単位)
	int16_t xx = (((int16_t)RegTbl[1]) << 8) | RegTbl[0];
	int16_t yy = (((int16_t)RegTbl[3]) << 8) | RegTbl[2];
	int16_t zz = (((int16_t)RegTbl[5]) << 8) | RegTbl[4];	
 
	SerialUSB.print("WIRE: X: ");
	SerialUSB.print( xx);
	SerialUSB.print(" Y: ");
	SerialUSB.print( yy);
	SerialUSB.print(" Z: ");
	SerialUSB.print( zz);
	SerialUSB.println("");
 
	delay(INTERVAL);
}

// ---------------------------------------------------------------

テスト方法
IMG_20210806_161243.jpg

ADXL を走らせてから、WIRE を走らせた結果
ほぼ、同じ値です。
accell_aug06.png

参考ページ
3軸加速度センサー(ADXL345)の使い方 - I2C版 [Arduino]

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?