본문 바로가기

아두이노

아두이노 MPU-6050 가속도 센서 자이로 센서

MPU-6050 가속도, 자이로센서

가속도 센서는 지면과 평행하게 유지되면 x,y축 방향의 값은 작게 나오고 z축 방향의 값은 크게 나온다. 중력은 z축으로 작용하기 때문이다.

자이로센서는 xyz 3축 방향의 회전 속도를 측정해주는 센서다.

가속도 센서는 진동이나 외부에서 작용하는 힘에 영향을 받아 순간 측정값이 불안하지만 지면과 평행하게 둔다면 z축 값이 크게 나와 회복력이 좋다. 자이로 센서는 순간 측정값이 정확하다.

 

I2C 통신으로 값을 전달하므로 통신 핀인 SDA, SCL와 전원 핀인 VCC, GND를 사용한다.

 

MPU-6050 센서

아두이노

VCC

5V

GND

GND

SDA

A4(SDA)

SCL

A5(SCL)


#include “MPU6050.h”//센서와 I2C 통신을 해서 값을 읽어옴

MPU6050 mpu6050; //클래스 변수

#define SENSOR_READ_INTERVAL 250 //센서를 읽는 시간 간격

unsigned long prevSensoredTime = 0; //이전 시간

unsigned long curSensoredTime = 0; //현재 시간

 

void setup(){

Serial.begin(9600); //PC로 값을 출력하기 위한 시리얼 통신 초기화

mpu6050.begin(); //센서 사용

}

 

void loop(){

accel_t_gyro_union accel_t_gyro; //센서에서 값(가속도, 자이로, 온도)을 한번에 받아오는 구조체

curSensoredTime = millis();

 

//250ms 간격으로 센서 읽기

if(curSensoredTime prevSensoredTime > SEONSOR_READ_INTERVAL){

mpu6050.readFromSensor(accel_t_gyro); // Read from sensor

prevSensoredTime = curSensoredTime;

 

//xyz 가속도

Serial.pritn(F(“accel x,y,z = ”));

Serial.print(accel_t_gyro.value.x_accel, DEC);

Serial.print(F(“, ”));

Serial.print(accel_t_gyro.value.y_accel, DEC);

Serial.print(F(“, ”));

Serial.print(accel_t_gyro.value.z_accel, DEC);

Serial.println(F(“”));

//xyz 자이로

Serial.print(F(“gyro x,y,z = ”));

Serial.print(accel_t_gyro.value.x_gyro, DEC);

Serial.print(F(“, ”));

Serial.print(accel_t_gyro.value.y_gyro, DEC);

Serial.print(F(“, ”));

Serial.print(accel_t_gyro.value.z_gyro, DEC);

Serial.println(F(“”));

}

}