목차
GY-521
MPU 6050 칩이 내장된 GY-521 모듈은 가속도센서와 자이로 센서가 합쳐진 모듈입니다.
가속도 센서는 가속도를 측정하고 자이로 센서는 x,y,z축을 기준으로 각속도를 측정합니다.
가속도 센서는 센서의 기울림 정도를 측정할 수 있습니다.
하지만 센서가 정지상태가 아니라면 움직에 대한 가속도 값이 추가되어 정확한 기울임 값을 구할 수 없습니다.
자이로 센서는 각속도를 측정하는데 각속도는 시간당 회전하는 각도를 의미합니다.
즉, 센서가 움직이는 정도를 파악할 수 있으며 정지된 상태에서는 항상 일정한 값을 가집니다.
가속도 센서, 자이로 센서를 모두 사용해서 적당한 알고리즘을 만들어주는 것이 중요합니다.
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 에서 구매하실 수 있습니다.
.
저는 왜 모든 값이 -1로 나올까요.. 혹시 해결 방법 아시나요?
안녕하세요
화이트앳입니다.~
연결하신 핀 확인해 보시고, 케이블이 제대로 꼽혀 있는지 확인해 보세요
연결에 문제가 없다면…. 다른 것으로 교체해서 실험해 보시는게 좋을거 같습니다.
감사합니다.
-1이 나오는 대부분은 핀 연결이 잘못된 경우였습니다.
핀 연결이 정확하다면….
보드를 다른 아두이노에 연결해서 고장여부 확인하는게 좋을듯 합니다.
저도 계속 -1로 뜨는데 이유를 모르겠습니다.
안녕하세요
아두이노의 경우 주로 점퍼선으로 연결하여 사용하는데
점퍼선과 보드의 연결이 잘 안되었을 경우도 있습니다.
만약 연결이 잘 되어도 값이 이상하다면, 다른 모듈로 교체해 보시고
그래도 안된다면 오실로스코프로 점검해 봐야 합니다.
참고로 Nano 3.0 에서는 SDA 핀이 A4 이고, SCL 은 A5 입니다.
값이 계속 -1로 나오는데 핀꽂은걸 다시 확인하고 처음부터 해봐도 -1만 나옵니다. 다른 방법이 없을가요?