GY-521(MPU6050)3軸ジャイロスコープ + 加速度センサーモジュールをAdafruit HUZZAH32で使ってみました。
HUZZAH32/MPU6050
3V⇔VCC 赤色の線
GND⇔GND 黒色の線
SCL⇔SDA 紫の線
SDA⇔SCL 白の線
センサーとマイコンをI2Cで接続
シリアルモニタで表示
置いた状態で測定するとZ(3つ目の数値)が1.00となっており
重力加速度が測定できていることがわかる
ソースコードは以下です。
角速度のコードはコメントにしてあります。
// GY-521モジュール(MPU-6050) Accelerometer + Gyro
#include <Wire.h>
// MPU-6050のアドレス、レジスタ設定値
#define MPU6050_WHO_AM_I 0x75 // Read Only
#define MPU6050_PWR_MGMT_1 0x6B // Read and Write
#define MPU_ADDRESS 0x68
#include <Wire.h>
// MPU-6050のアドレス、レジスタ設定値
#define MPU6050_WHO_AM_I 0x75 // Read Only
#define MPU6050_PWR_MGMT_1 0x6B // Read and Write
#define MPU_ADDRESS 0x68
// デバイス初期化時に実行される
void setup() {
//Wire.begin(SDA,SCL) SDAは22、SCLは23 の設定で使用します
Wire.begin(22,23,100000);
Serial.begin(115200); //115200bps
Serial.print("START");
// 初回の読み出し
Wire.begin();
Wire.beginTransmission(MPU_ADDRESS);
Wire.write(MPU6050_WHO_AM_I); //MPU6050_PWR_MGMT_1
Wire.write(0x00);
Wire.endTransmission();
// 動作モードの読み出し
Wire.beginTransmission(MPU_ADDRESS);
Wire.write(MPU6050_PWR_MGMT_1); //MPU6050_PWR_MGMT_1レジスタの設定
Wire.write(0x00);
Wire.endTransmission();
}
Wire.begin(22,23,100000);
Serial.begin(115200); //115200bps
Serial.print("START");
// 初回の読み出し
Wire.begin();
Wire.beginTransmission(MPU_ADDRESS);
Wire.write(MPU6050_WHO_AM_I); //MPU6050_PWR_MGMT_1
Wire.write(0x00);
Wire.endTransmission();
// 動作モードの読み出し
Wire.beginTransmission(MPU_ADDRESS);
Wire.write(MPU6050_PWR_MGMT_1); //MPU6050_PWR_MGMT_1レジスタの設定
Wire.write(0x00);
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(0x68);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(0x68, 14, true);
while (Wire.available() < 14);
int16_t axRaw, ayRaw, azRaw, gxRaw, gyRaw, gzRaw, Temperature;
axRaw = Wire.read() << 8 | Wire.read();
ayRaw = Wire.read() << 8 | Wire.read();
azRaw = Wire.read() << 8 | Wire.read();
Temperature = Wire.read() << 8 | Wire.read();
// gxRaw = Wire.read() << 8 | Wire.read();
// gyRaw = Wire.read() << 8 | Wire.read();
// gzRaw = Wire.read() << 8 | Wire.read();
// 加速度値を分解能で割って加速度(G)に変換する
float acc_x = axRaw / 16384.0; //FS_SEL_0 16,384 LSB / g
float acc_y = ayRaw / 16384.0;
float acc_z = azRaw / 16384.0;
// 角速度値を分解能で割って角速度(degrees per sec)に変換する
// float gyro_x = gxRaw / 131.0;//FS_SEL_0 131 LSB / (°/s)
// float gyro_y = gyRaw / 131.0;
// float gyro_z = gzRaw / 131.0;
//加速度をシリアルモニタに表示
Serial.print(" "); Serial.print(acc_x); //Serial.print(",");
Serial.print(" "); Serial.print(acc_y); //Serial.print(",");
Serial.print(" "); Serial.print(acc_z); //Serial.print(",");
Serial.println(""); // 改行
// Serial.print(gyro_x); Serial.print(",");
// Serial.print(gyro_y); Serial.print(",");
// Serial.print(gyro_z); Serial.println("");
}

