2020/08/27 - [아두이노 프로젝트/3축 짐벌] - 3축 짐벌 프로젝트 - 3D설계와 자이로 센서(MPU6050) 각도 읽어오기
3축 짐벌 프로젝트 - 3D설계와 자이로 센서(MPU6050) 각도 읽어오기
이 프로젝트를 시작하게 된 계기가는 이거다! 유튜브에서 아두이노 3축 짐벌을 봤는데 상당히 재밌어 보였다! https://www.youtube.com/watch?v=UxABxSADZ6U 이 프로젝트를 비슷하게? 따라 해보려고 한다. 메�
ilovemecha.tistory.com
3D 출력물과 조립
지난 번 포스팅에서는 3D 프린팅을 위한 설계와 자이로 센서의 값을 받아오는 것을 하였다.
이번 주에 모터랑 나사들이 도착했는데.. 안타깝게 설계실 수로 인해 사포질과 구멍 내기 작업을 직접 손으로 했다.
출력물은 꽤 깔끔하게 나왔다!! 서보모터를 껴보니 딱 중간끼워맞춤이 잘 돼있었다!
모터가 딱딱 들어가고 나사들도 딱 맞아떨어지니 기분이 좋았다.
조립하고 나니 제법 그럴싸한 짐벌이 완성된 것 같다. 하지만 아직 배선이 남았다는 것!..
아두이노 보드와 브레드보드 그리고 모든 선들을 본체 안에 넣어버렸다. 그 결과 나름 깔끔한(?) 외형을 갖게 되었다.
코드와 실험
우선 모터를 3개 돌리려면 한 개부터 돌릴 줄 알아야 한다.
#include <Servo.h>
int Servo_Pin1 = 9;
Servo Servo1;
void setup() {
Servo1.attach(Servo_Pin1);
}
void loop() {
Servo1.write(90);
delay(1000);
Servo1.write(0);
delay(1000);
Servo1.write(180);
delay(1000):
}
아주 간단한 예제이다 모터의 신호선을 9번 핀에 꽂고 코드를 실행하면 위와 같이 실행이 될 것이다.
모터 3개를 돌려보자!
#include <Servo.h>
int Servo_Pin1 = 9;
int Servo_Pin2 = 10;
int Servo_Pin3 = 11;
Servo Servo1;
Servo Servo2;
Servo Servo3;
void setup() {
Servo1.attach(Servo_Pin1);
Servo2.attach(Servo_Pin2);
Servo3.attach(Servo_Pin3);
}
void loop() {
Servo1.write(90);
Servo2.write(90);
Servo3.write(90);
delay(1000);
Servo1.write(0);
Servo2.write(0);
Servo3.write(0);
delay(1000);
Servo1.write(180);
Servo2.write(180);
Servo3.write(180);
delay(1000):
}
3개라고 뭐가 달라지겠냐만, 서보 객체를 좀 더 선언해주었을 뿐 큰 어려움은 없다. 라이브러리를 사용하니까 코드가 굉장히 간단해진다! 마지막으로 최종적으로 자이로 센서까지 연결해 준 뒤 아래와 같은 코드를 넣어준다. 그냥 라이브러리 두 개를 합쳐 놓았을 뿐.. 어려운 것은 없다.
최종 코드이다. 혹시 코드가 오작동하거나 궁금한 점이 있다면 언제든지 코멘트 부탁드립니다.
//All copyright 2020.8.30 공돌학사. All rights reserved
//If you have a any question, Send me a E-mail
//My email address : kaingsik4@naver.com
//라이브러리를 불러옵니다.
#include <Servo.h>
#include <MPU6050_tockn.h>
#include <Wire.h>
//MPU6050 객체 선언
MPU6050 mpu6050(Wire);
//SERVO 신호 선 설정 및 서보 객체 선언.
int Servo_Pin1 = 9;
int Servo_Pin2 = 10;
int Servo_Pin3 = 11;
Servo Servo1;
Servo Servo2;
Servo Servo3;
//X,Y,Z축 각도를 받아올 변수 선언
int Deg_X;
int Deg_Y;
int Deg_Z;
//시작 될 때 한번 설정
void setup() {
//MPU사용 ON
Serial.begin(19200);
Wire.begin();
mpu6050.begin();
//서보모터 사용할 핀 연결
Servo1.attach(Servo_Pin1);
Servo2.attach(Servo_Pin2);
Servo3.attach(Servo_Pin3);
// 서보모터 초기 각도 설정
Servo1.write(90);
Servo2.write(90);
Servo3.write(90);
}
void loop() {
mpu6050.update();
Deg_X = mpu6050.getAngleX();
Deg_Y = mpu6050.getAngleY();
Deg_Z = mpu6050.getAngleZ();
Servo1.write(90-z);
Servo2.write(90+y);
Servo3.write(90+x);
}
그리하여 최종 영상!
마치며
이번 프로젝트는 뭐 제어기법이 들어가거나 한 부분은 하나도 없다. 모터의 다이나믹 특성도 이미 라이브러리에서 다 잡혀있고, 자이로의 값을 얼마나 정확히 받아오냐가 이번 프로젝트의 핵심이었던 것 같다. 한 가지 아쉬운 점은 서보모터의 미세한 진동과 내 손떨림은 잡지 못했지만. 이번 프로젝트는 이쯤에서 마무리하려고 한다. 짧았지만 첫 프로젝트 포스팅인 만큼 부족한 점이 참 많은 것 같다. 혹시 프로젝트를 역설계하시다가 모르는 부분이 있으면 언제든지 코멘트 부탁드립니다 :)
'아두이노 프로젝트 > 3축 짐벌' 카테고리의 다른 글
3축 짐벌 프로젝트 - 3D설계와 자이로 센서(MPU6050) 각도 읽어오기 (1) | 2020.08.27 |
---|