본문 바로가기

프로젝트/하드웨어

5.MPU6050 연결 및 테스트

반응형

1. 연결~

아두이노 

MPU-6050 

VCC------------------

GND-----------------

SCL------------------

SDA-----------------

VCC 

GND

3

2



2. 기본 설명


기본적으로 MPU6050에 연결 해야할 전압은 2.3~3.4 입니다.

그런데 아두이노에 연결되는 전압은 5V 이지만 MPU6050 에서 빨간 동그라미 부분이 5->3.3V로 바꾸는 역활을 합니다.

또한 핀 9에 AD0가 0이면 1101000(0x68) 인 주소 값이 되고 1이면 1101001(0x69) 이 됩니다~

저는 0x68 주소 값으로 진행하게 될겁입니다.



3. 간단한 통신 확인 소스


간단한 예제는 아두이노 홈페이지 가면 모두 제공하고 있습니다.

https://playground.arduino.cc/Main/MPU-6050 

중간 부터 보면 

Short example sketch

여기 예제에서 Serial.begin(9600);-->>>> Serial.begin(115200);  로 바꾸면 됨


  1. // MPU-6050 Short Example Sketch
  2. // By Arduino User JohnChi
  3. // August 17, 2014
  4. // Public Domain
  5. #include<Wire.h>
  6. const int MPU_addr=0x68;  // I2C address of the MPU-6050
  7. int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
  8. void setup(){
  9.   Wire.begin();
  10.   Wire.beginTransmission(MPU_addr);
  11.   Wire.write(0x6B);  // PWR_MGMT_1 register
  12.   Wire.write(0);     // set to zero (wakes up the MPU-6050)
  13.   Wire.endTransmission(true);
  14.   Serial.begin(115200);
  15. }
  16. void loop(){
  17.   Wire.beginTransmission(MPU_addr);
  18.   Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  19.   Wire.endTransmission(false);
  20.   Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  21.   AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  22.   AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  23.   AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  24.   Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  25.   GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  26.   GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  27.   GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  28.   Serial.print("AcX = "); Serial.print(AcX);
  29.   Serial.print(" | AcY = "); Serial.print(AcY);
  30.   Serial.print(" | AcZ = "); Serial.print(AcZ);
  31.   Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  32.   Serial.print(" | GyX = "); Serial.print(GyX);
  33.   Serial.print(" | GyY = "); Serial.print(GyY);
  34.   Serial.print(" | GyZ = "); Serial.println(GyZ);
  35.   delay(333);
  36. }

 


4. 소스 해석


  1. #include<Wire.h> // I2C 통신을 이용하기 위한 헤더파일
  2. const int MPU_addr=0x68;  // // AD0를 0으로 함으로써 0x68의 주소값을 가진다.
  3. int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ// 7가지 의 값을 받기 위한 변수
  4. void setup(){
  5.   Wire.begin()// I2C 통신 시작
  6.   Wire.beginTransmission(MPU_addr)//주소를 전송
  7.   Wire.write(0x6B);  // PWR_MGMT_1 register //0x6B의 레지스트를 0으로 함으로써 Sleep에서 깨움
  8.   Wire.write(0);     // set to zero (wakes up the MPU-6050)
  9.   Wire.endTransmission(true); //전송 끝
  10.   Serial.begin(115200);
  11. }
  12. void loop(){
  13.   Wire.beginTransmission(MPU_addr)//주소를 전송으로써 통신 시작
  14.   Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H) //0x3B 시작
  15.   Wire.endTransmission(false)//전송 계속
  16.   Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers //0x3B 부터 14 바이트 전송 요청
  17.   AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  18.   AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  19.   AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  20.   Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  21.   GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  22.   GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  23.   GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  24.   Serial.print("AcX = "); Serial.print(AcX);
  25.   Serial.print(" | AcY = "); Serial.print(AcY);
  26.   Serial.print(" | AcZ = "); Serial.print(AcZ);
  27.   Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  28.   Serial.print(" | GyX = "); Serial.print(GyX);
  29.   Serial.print(" | GyY = "); Serial.print(GyY);
  30.   Serial.print(" | GyZ = "); Serial.println(GyZ);
  31.   delay(333);
  32. }

 





반응형

'프로젝트 > 하드웨어' 카테고리의 다른 글

4. 드론 어플 연결 msp (Multiwii Serial Protocol)  (4) 2017.05.09
3. HM-10 블루투스 테스트(2)  (0) 2017.04.20
2. HM-10 블루투스 테스트(1)  (0) 2017.04.19
1. 시작~  (0) 2017.04.06