GY-521 자이로&가속도 센서 (MPU-6050)

GY-521

MPU 6050 칩이 내장된 GY-521 모듈은 가속도센서와 자이로 센서가 합쳐진 모듈입니다.
가속도 센서는 가속도를 측정하고 자이로 센서는 x,y,z축을 기준으로 각속도를 측정합니다.

가속도 센서는 센서의 기울림 정도를 측정할 수 있습니다.
하지만 센서가 정지상태가 아니라면 움직에 대한 가속도 값이 추가되어 정확한 기울임 값을 구할 수 없습니다.

자이로 센서는 각속도를 측정하는데 각속도는 시간당 회전하는 각도를 의미합니다.
즉, 센서가 움직이는 정도를 파악할 수 있으며 정지된 상태에서는 항상 일정한 값을 가집니다.

가속도 센서, 자이로 센서를 모두 사용해서 적당한 알고리즘을 만들어주는 것이 중요합니다.

 

 

Arduino UNO R3 예제

부품 목록
부품명 Arduino UNO R3

Arduino UNO R3

기능 아두이노
수량 1
판매처 https://kit128.com/goods/view?no=337

 

부품명 GY-521 자이로&가속도 센서 (MPU-6050)

기능 가속도, 자이로 센서
수량 1
판매처 https://kit128.com/goods/view?no=146
핀 연결

아래와 같이 4개의 선을 Arduino UNO R3 과 GY-521 에 연결합니다.

 

번호 I/O Arduino UNO R3
 1 VCC 5V
 2 GND GND
3 SCL SCL
4 SDA SDA

 

 

 

소스코드

소스코드는 [파일]=>[예제]=>[WhiteAT UNO] => [GY521] 에 있으며
라이브러리는 아두이노 개발환경  을 참조하세요

 

/*
	GY-521 자이로&가속도 센서 (MPU-6050)
	예제입니다.

	UNO R3 : https://kit128.com/goods/view?no=337
	GY-521 자이로&가속도 센서 (MPU-6050) 모듈 : https://kit128.com/goods/view?no=146

	출처: http://whiteat.com/Arduino

*/  

#include<Wire.h>
const int MPU = 0x68;  // I2C address of the MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;


// 프로그램 시작 - 초기화 작업
void setup()
{
	Serial.begin(115200);     // 시리얼 통신 초기화
	Serial.println("Arduino Examples - GY-521 Gyro& Accelator (MPU-6050) Module");
	Serial.println("    https://docs.whiteat.com/?p=2662");


	Wire.begin();
	Wire.beginTransmission(MPU);
	Wire.write(0x6B);  // PWR_MGMT_1 register
	Wire.write(0);     // set to zero (wakes up the MPU-6050)
	Wire.endTransmission(true);

	// gyro scale  
	Wire.beginTransmission(MPU);
	Wire.write(0x1B);  // 
	Wire.write(0xF8);     // 
	Wire.endTransmission(true);

	// acc scale
	Wire.beginTransmission(MPU);
	Wire.write(0x1C);  // 
	Wire.write(0xF8);     // 
	Wire.endTransmission(true);

}

void loop()
{
	Wire.beginTransmission(MPU);
	Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
	Wire.endTransmission(false);
	Wire.requestFrom(MPU, 14, true);  // request a total of 14 registers
	AcX = Wire.read() << 8 | Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
	AcY = Wire.read() << 8 | Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
	AcZ = Wire.read() << 8 | Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
	Tmp = Wire.read() << 8 | Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
	GyX = Wire.read() << 8 | Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
	GyY = Wire.read() << 8 | Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
	GyZ = Wire.read() << 8 | Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
	Serial.print("AcX = "); Serial.print(AcX);
	Serial.print(" | AcY = "); Serial.print(AcY);
	Serial.print(" | AcZ = "); Serial.print(AcZ);
	Serial.print(" | Tmp = "); Serial.print(Tmp / 340.00 + 36.53);  //equation for temperature in degrees C from datasheet
	Serial.print(" | GyX = "); Serial.print(GyX);
	Serial.print(" | GyY = "); Serial.print(GyY);
	Serial.print(" | GyZ = "); Serial.println(GyZ);
	delay(333);

}

 

 

결과 화면

가속도, 자이로 값을 출력합니다.

 

 

 

FAQ

Arduino Nano 3.0 에서 값이 -1 이나 0으로 만 읽힙니다.

아두이노 나노 회로도를 보면 A4(SDA), A5(SCL)로 나와 있습니다. D4, D5 핀이 아니고 아날로그 A4, A5 핀을 사용하셔야 합니다.

 

제품 구매

GY-521 자이로&가속도 센서 (MPU-6050) 은 https://kit128.com/goods/view?no=146 에서 구매하실 수 있습니다.

.

6 댓글

  1. 유동균 응답

    저는 왜 모든 값이 -1로 나올까요.. 혹시 해결 방법 아시나요?

    • 화이트앳 글쓴이응답

      안녕하세요
      화이트앳입니다.~

      연결하신 핀 확인해 보시고, 케이블이 제대로 꼽혀 있는지 확인해 보세요
      연결에 문제가 없다면…. 다른 것으로 교체해서 실험해 보시는게 좋을거 같습니다.

      감사합니다.

    • 화이트앳 글쓴이응답

      -1이 나오는 대부분은 핀 연결이 잘못된 경우였습니다.

      핀 연결이 정확하다면….
      보드를 다른 아두이노에 연결해서 고장여부 확인하는게 좋을듯 합니다.

  2. 김동현 응답

    저도 계속 -1로 뜨는데 이유를 모르겠습니다.

    • 화이트앳 글쓴이응답

      안녕하세요

      아두이노의 경우 주로 점퍼선으로 연결하여 사용하는데
      점퍼선과 보드의 연결이 잘 안되었을 경우도 있습니다.

      만약 연결이 잘 되어도 값이 이상하다면, 다른 모듈로 교체해 보시고
      그래도 안된다면 오실로스코프로 점검해 봐야 합니다.

      참고로 Nano 3.0 에서는 SDA 핀이 A4 이고, SCL 은 A5 입니다.

  3. 김지노 응답

    값이 계속 -1로 나오는데 핀꽂은걸 다시 확인하고 처음부터 해봐도 -1만 나옵니다. 다른 방법이 없을가요?

화이트앳에 답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다