2016年8月2日火曜日

Arduino と GY-521 MPU-6050 加速度 ジャイロ センサーモジュール 使ってみた

準備 
◆Arduino IDE(PCにインストール)

 ◆Arduino Uno(360円 + 送料170円)


◆USBケーブル AーBタイプ(100円 + 送料170円) 

◆GY-521 MPU-6050  加速度 ジャイロ センサーモジュール
・角速度と加速度と温度の検出
・VCC電圧は5V
・SCL、SDA電圧は3.3V
・SCL、SDA端子は 4.7kΩでpullUpされています
・MPU-6000詳細
・データーシート
・レジスタマップ


◆できれば、何か電圧レベル変換するもの(N-JFETを使った)


工作開始
◆ 接続します
(外部抵抗不要)GY-521 MPU-6050の SCL、SDA端子は 4.7kΩでpullUpされています
※(外部抵抗不要)Arduino の Wire ライブラリーを利用すると、内部の抵抗を利用して プルアップしてくれます

◆接続確認します
確認1

 確認2(Arduino Uno がつながっているポート)

 ◆スケッチを書きます
 


//An Arduino code by dd647
#include <Wire.h>
int GY521Address = 0b1101000;//pin AD0 is logic low
void setup() {
   Serial.begin(9600);
   Wire.begin();
    Wire.beginTransmission(GY521Address);
    Wire.write(0x6b);//Register_Name Power Management
    Wire.write(0b00000010);//Upon power up mode and Clock PLL
    Wire.endTransmission();
    delay(500);
   
    Wire.beginTransmission(GY521Address);
    Wire.write(0x1c);//Register_Name ACCEL_CONFIG
    Wire.write(0b00011000);//+-16g mode
    Wire.endTransmission();
    delay(500);

    Wire.beginTransmission(GY521Address);
    Wire.write(0x1b);//Register_Name GYRO_CONFIG
    Wire.write(0b00000000);//+-250°/s mode
    Wire.endTransmission();
    delay(500);   
}

void loop(){  
  getData(0x41,0x42,"TEMP");//Register_Name TEMP_OUT
  getData(0x3b,0x3c,"ACCELx");//Register_Name ACCEL_XOUT
  getData(0x3d,0x3e,"ACCELy");//Register_Name ACCEL_YOUT
  getData(0x3f,0x40,"ACCELz");//Register_Name ACCEL_ZOUT
  getData(0x43,0x44,"GYROx");//Register_Name GYRO_XOUT_
  getData(0x45,0x46,"GYROy");//Register_Name GYRO_YOUT_
  getData(0x47,0x48,"GYROz");//Register_Name GYRO_ZOUT_
  Serial.println("    ");
  delay(500);
}

void getData(int AddressH, int AddressL, char Str[]){
    Wire.beginTransmission(GY521Address);
    Wire.write(AddressH);
    Wire.endTransmission();
    Wire.requestFrom(GY521Address, 1);
    while(!Wire.available()) {
        // waiting
    }
    int h = Wire.read();
   
    Wire.beginTransmission(GY521Address);
    Wire.write(AddressL);
    Wire.endTransmission();
    Wire.requestFrom(GY521Address, 1);
    while(!Wire.available()) {
        // waiting
    }
    int l = Wire.read();
    int c = 0;
  if (Str == "TEMP"){
     c = (256 * h + l)/340+35;//Ofset=35°,LSB/1°=340
  }else{
     c = 256 * h + l;
  }   
    Serial.print(Str);
    Serial.print("=");
    Serial.print(c);
    Serial.print("    ");
}






◆シリアルモニタで見ます

重力に反応しています