MPU6050 혹은 MPU-6050으로 불리는 3축 가속도, 자이로 센서를 탑재한 모듈을 통해 움직임을 측정할 수 있다.
▶ 이 가이드를 따라하면
- MPU-6050칩을 사용한 모듈에서 가속도 센서(Accelerometer) 및 자이로 센서(Gyro sensor) 값을 얻을 수 있다.
▶ 먼저 읽으면 좋은 글
- Arduino 일반 : http://bbangpan.tistory.com/1
▶ 부품 설명 및 회로 구성
Aliexpress에서 파는 GY-86, GY-521, GY-273 시리즈 등은 MPU-6050칩 등을 기반으로 다양한 위치, 자세 등을 측정할 수 있다. 즉 운동에 대한 제어를 할 수 있다. 여기서 사용할 GY-521의 경우에는 MPU-6050칩을 탑재하고 있고, 3축 가속도 센서와 자이로 센서를 지원한다(그리고 자이로 센서 값 보정을 위한 온도를 추가로 제공한다. 세밀한 제어를 위해서는 온도에 따른 보정이 필요하다고 한다). 각각 모듈을 자유도에 따라 6 DOF(Degree of Freedom/자유도, 3축 가속도센서+3축 자이로센서), 10 DOF(GY-86) 등으로 분류하는데, 각각 나침반 센서, 기압 센서 등을 조합하여 부착하고 있다. 가격은 MPU-6050의 경우는 3$전후이고, 10 DOF GY-86의 경우에는 20$까지 상승한다. 참조로 HMC5883L(GY-263에 탑재)칩은 나침반 센서를, MS5611칩은 기압을 측정할 수 있다.
<MPU-6050칩을 장착한 GY-521. 가운데 까만 칩이 MPU-6050이다. 모듈은 100원 동전 크기>
<좌측부터 GY-273, MPU-6050, GY-521(=MPU-6050), GY-88/Aliexpress구매>
MPU-6050의 경우는 3V~5V로 작동하며, 일반적으로 필요한 범위의 자이로(축이 기울어짐에 대한 속도, 초당 250~2000도) 센서와 가속도(3축 방향으로의 진행하는 가속도의 정도, 16g까지)값을 갖는다. 자세한 설명은 http://mechaworld.tistory.com/11 를 참조하면 좋다(전문적인 자세 보정을 위해서는 각 센서를 상호 보완하는, 10 DOF센서가 사용된다고 한다). 여기서는 별도 라이브러리 없이 I2C통신만으로 해당 값을 출력해보자. 연결은 VCC->5V, GND->GND, SCL->SCL, SDA->SDA로 연결하였다. 나머지 핀은 연결하지 않아도 무방하다.
<Arduino UNO와 GY-521(MPU-6050기반 모듈)을 연결>
사실 이러한 값을 얻어오는 것보다도, 실제 이 센서값을 해독하여 응용하는 것은 고급 기술에 속한다. 센서를 조합하여 정확한 위치를 구하고 잡음을 제거하는 등 다양한 노력이 필요한데, 이는 MPU-6050, 칼만필터 등의 키워드로 검색하여 추가로 확인하기를 추천한다.
▶ 소스 코드 입력 및 구동
Arduino Sketch 1.7.4버전에 Arduino UNO상에서 확인하였다. 아래 소스는 http://playground.arduino.cc/Main/MPU-6050 에서 발췌하였다. 컴파일하여 구동하면, 가속도값, 자이로센서값, 온도값 등을 구할 수 있다.
// MPU-6050 Short Example Sketch
// By Arduino User JohnChi
// August 17, 2014
// Public Domain
#include<Wire.h>
const int MPU=0x68; // I2C address of the MPU-6050
int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
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);
Serial.begin(9600);
}
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);
}
시리얼 모니터를 통해, 센서를 움직이며 값 변화를 보자. MPU-6050칩을 X,Y,Z방향으로 회전 및 가속해보자.아래 변화값을 확인할 수 있다.
<AcX~Z, Tmp, GyX~Z가 각각 가속도/온도/자이로 센서 값>
▶ 구매 가이드
MPU-6050모듈: http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150615063739&SearchText=MPU6050 ($3)
▶ 강의 키워드
Arduino UNO, 아두이노 우노, Gyro sensor, Accelerometer, 자이로 센서, 가속도 센서, MPU-6050, MPU6050, GY-521
'아두이노 센서' 카테고리의 다른 글
[센서/초음파 거리측정] 물체와의 거리를 측정해주는 초음파 센서(ultra sonic sensor) (0) | 2015.06.24 |
---|---|
[센서/터치] 정전식 터치 센서를 통해 손가락 터치를 감지한다 (0) | 2015.06.22 |
[센서/진동] 약한 진동까지 감지할 수 있는Piezo Disk Vibration Sensor(피에조 디스크 진동 센서) (12) | 2015.06.22 |
[센서/컬러] 눈앞에 색을 인식하는 TCS3200 IC기반의 Color(RGB 색깔) sensor 인 GY-31을 실습해보자. (17) | 2015.06.18 |
[센서/진동] 충격을 감지해주는 digital vibration sensor (0) | 2015.06.17 |
[센서/온도] 접촉없는 원격 온도 측정, 적외선 기반 TM006 모듈 (0) | 2015.04.29 |
[센서/심박] 광학식으로 심박수를 측정하는 Pulse heart rate sensor (0) | 2015.04.01 |
[센서/마이크] 소리 세기/소음 측정 하는 마이크 센서(MAX4466) (6) | 2015.03.30 |
[센서/RFID] 접촉형 신분증/태그 구현이 가능한 RC522 RFID모듈 (0) | 2015.03.20 |
[센서/IR] 가장 저렴한 통신방식인 IR(적외선) 리모콘을 아두이노(Arduino)로 해킹 해보자 (0) | 2015.02.06 |