드디어 성공 야호
https://rockjjy.tistory.com/2403
해당 티스토리 참고하여 공부했습니다.
#include <Servo.h>
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Servo.h"
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
Servo myservo;
int val;
int prevVal;
void setup()
{
Wire.begin();
Serial.begin(38400);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
myservo.attach(9);
}
void loop()
{
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
val = map(ay, -17000, 17000, 0, 179);
if (val != prevVal)
{
myservo.write(val);
prevVal = val;
}
delay(50);
}
이 코드는 Arduino를 사용하여 MPU6050 센서로부터 가속도 및 자이로스코프 데이터를 읽어와 서보 모터를 제어하는 스케치입니다.
사용된 라이브러리 및 변수 선언:
#include <Servo.h>: Servo 모터 제어를 위한 Servo 라이브러리를 포함합니다.#include "Wire.h", #include "I2Cdev.h", #include "MPU6050.h": MPU6050 센서와 I2C 통신하기 위한 라이브러리들을 포함합니다.MPU6050 mpu;: MPU6050 센서 객체를 생성합니다.int16_t ax, ay, az;: 가속도계 센서의 X, Y, Z 축 데이터를 저장하는 변수들입니다.int16_t gx, gy, gz;: 자이로스코프 센서의 X, Y, Z 축 데이터를 저장하는 변수들입니다.Servo myservo;: Servo 모터 객체를 생성합니다.int val;, int prevVal;: 가속도계의 Y축 데이터를 서보 모터의 제어 각도로 매핑하기 위한 변수들입니다.setup() 함수:
Wire.begin();: I2C 통신을 초기화합니다.Serial.begin(38400);: 시리얼 통신을 초기화하고, 통신 속도를 38400 bps로 설정합니다.mpu.initialize();: MPU6050 센서를 초기화합니다.Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");: MPU6050 센서와의 연결을 확인하고, 연결 상태를 시리얼 모니터에 출력합니다.myservo.attach(9);: 서보 모터를 아두이노 핀 9에 연결합니다.loop() 함수:
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);: MPU6050 센서에서 가속도계와 자이로스코프 데이터를 읽어옵니다. val = map(ay, -17000, 17000, 0, 179);: 가속도계의 Y축 데이터인 ay 값을 -17000에서 17000 사이의 값으로 매핑하여 val 변수에 저장합니다. 이 값은 서보 모터의 제어 각도로 사용됩니다.if (val != prevVal): 이전에 서보 모터로 보낸 제어 각도(prevVal)와 현재 제어 각도(val)가 다르면 실행합니다. 이렇게 함으로써 같은 각도를 계속 보내는 것을 방지합니다.myservo.write(val);: 서보 모터에 제어 각도 val을 보냅니다.prevVal = val;: 이번 루프의 제어 각도를 prevVal에 저장합니다.delay(50);: 50ms의 딜레이를 추가하여 일정한 주기로 센서 데이터를 읽고 서보 모터를 제어합니다.위의 코드는 MPU6050 센서로부터 가속도계의 Y축 데이터를 읽어와 해당 데이터를 0에서 179의 값으로 매핑하여 서보 모터로 제어하는 예제입니다. 서보 모터의 회전 각도는 센서의 가속도계 Y축 데이터에 따라 변화하게 됩니다. 서보 모터를 다른 핀에 연결하거나 제어하는 축을 바꾸고 싶다면 myservo.attach() 함수와 map() 함수의 인자를 수정하여 설정할 수 있습니다.