MPU-6050(GY-521)をHUZZAH32で使う | DocBrownのブログ

DocBrownのブログ

電子工作等々。。。

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

// デバイス初期化時に実行される
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();  
}

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("");
}