2023. 7. 17. 10:45ㆍ아두이노
아이언맨 영화를 보신 분이라면 잘 알고 계실 텐데요.
이 로봇은 스타크 연구실에 있었던 기계 팔 로봇입니다.
오늘은 아두이노를 활용해서 자유자재로 움직일 수 있는 보조 로봇, 로봇팔을 만들어보겠습니다.
※로봇팔 키트 구매 링크는 게시물 하단에 첨부하였습니다.※
준비물
준비물은 다음과 같습니다.
베이스 기판, 긴 U 브라켓 4개, 다기능 브라켓 5개, 그립퍼, L 브라켓 1개, U 브라켓 1개, 베어링 6개, 서보모터 6개
#1
너트와 볼트를 이용해서 베이스 기판에 U브라켓을 고정시킵니다.
#2
다기능 브라켓에 베어링을 조립한 후,
베어링 부분을 U브라켓 구멍에 맞춰 끼워 넣습니다.
#3


5개의 서보모터에 위와 같이 메탈 디스크를 부착 후 고정합니다.
고정 시에 메탈 디스크의 구멍 방향이 서보모터에 수직하는 방향으로 고정해야 합니다.
#4
앞서 조립한 서보모터를 위와 같이 고정합니다.
#5
다기능 브라켓에 전과 같이 베어링을 부착한 후에 브라켓과 디스크를 고정합니다.
이 과정을 마치면 U브라켓의 흔들림이 고정됩니다.
#6

방금 전 고정한 다기능 브라켓 위에 서보모터를 결합해 줍니다.
#7

긴 U브라켓 두 개를 마주 보게 조립하여 베어링에 맞춰 넣어 결합합니다.
#8
긴 U브라켓과 L브라켓을 먼저 조립한 뒤, L브라켓과 다기능 브라켓을 조립하여 줍니다.
부착된 다기능 브라켓에 서보모터를 결합해둔 뒤에 디스크와 브라켓을 고정시키면 됩니다.
#9
두 개의 다기능 브라켓을 엇갈리게 고정시킨 뒤에 다기능 브라켓에 서보모터를 부착합니다.
#10
앞서 조립한 두 개의 다기능 브라켓을 결합한 뒤 그립퍼를 연결해 주면 완성입니다.
#11
#include <Servo.h>
#define XPOS 0
#define YPOS 1
const int SERVOS = 6;
int PIN[SERVOS], value[SERVOS], idle[SERVOS], currentAngle[SERVOS], MIN[SERVOS];
int MAX[SERVOS], INITANGLE[SERVOS], previousAngle[SERVOS],ANA[SERVOS];
Servo myservo[SERVOS];
void setup() {
//#1 서보모터
PIN[0] = 3; //서보모터 IO를 3번핀으로 지정
MIN[0] = 0; //서보모터 최소 회전각도
MAX[0] = 180; //서보모터 최대 회전각도
INITANGLE[0] = 90; //서보모터 초기각도
ANA[0] = 0; //조이스틱스위치입력 IO를 아날로그 A0번핀으로 지정
//#2 서보모터
PIN[1] = 2;
MIN[1] = 0;
MAX[1] = 180;
INITANGLE[1] = 90;
ANA[1] = 1;
//#3 서보모터
PIN[2] = 9;
MIN[2] = 0;
MAX[2] = 180;
INITANGLE[2] = 90;
ANA[2] = 2;
//#4 서보모터
PIN[3] = 8;
MIN[3] = 0;
MAX[3] = 180;
INITANGLE[3] = 90;
ANA[3] = 3;
//#5 서보모터
PIN[4] = 4;
MIN[4] = 0;
MAX[4] = 180;
INITANGLE[4] = 90;
ANA[4] = 4;
//#6 서보모터
PIN[5] = 5;
MIN[5] = 0;
MAX[5] = 180;
INITANGLE[5] = 90;
ANA[5] = 5;
for (int i = 0; i < SERVOS; i++){
myservo[i].attach(PIN[i]);
myservo[i].write(INITANGLE[i]);
value[i] = 0;
idle[i] = 0;
previousAngle[i]=INITANGLE[i];
}
}
void loop() {
delay(50); // 로봇팔 속도조정을 위한 딜레이
for (int i = 0; i < SERVOS; i++){
value[i] = analogRead(ANA[i]);
currentAngle[i] = myservo[i].read();
if (value[i] > 612) {
idle[i] = 0;
if (currentAngle[i] < MAX[i]) ++currentAngle[i];
if (!myservo[i].attached()){
myservo[i].attach(PIN[i]);
}
myservo[i].write(currentAngle[i]);
} else if (value[i] < 412) {
idle[i] = 0;
if (currentAngle[i] > MIN[i]) --currentAngle[i];
if (!myservo[i].attached()){
myservo[i].attach(PIN[i]);
}
myservo[i].write(currentAngle[i]);
} else {
++idle[i];
}
// if (idle[i] > 100){
// myservo[i].detach(); //서보모터를 일정시간 사용하지 않으면 연결을 끊어둔다.
// idle[i] = 0;
// }
}
}
아두이노 보드와 스틱을 연결하고 위의 소스코드를 아두이노 보드에 업데이트하면 정상적으로 로봇팔이 작동합니다.
다음에 더 유익한 개발로 찾아뵙겠습니다.
감사합니다.
※ 아래 링크로 이동하시면 조립 키트를 구매하실 수 있습니다. (광고 아님) ※
A2T 6자유도 알루미늄 로봇팔 로봇암 키트 아두이노
앗! 화면폭이 너무 좁아요. 브라우져의 사이즈를 더 늘여주세요~ 좁은 화면으로 보실 때는 모바일 기기에서 최적화된 화면으로 쇼핑을 즐기실 수 있어요~
scipia.com
더 상세한 조립 영상은 유튜브에서 확인하실 수 있습니다.