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(“”));
}
}
'아두이노' 카테고리의 다른 글
아두이노 적외선 송수신 센서, 부저 (0) | 2018.01.08 |
---|---|
뭔가 도움이 될 것 같은 폰으로 아두이노 제어하는 코드 (0) | 2018.01.08 |