아두이노 기반 로봇 팔 & 커스텀 컨트롤러 - 서보 & 포텐셔미터 제작
부품 및 소모품
| 아두이노 우노 (Arduino UNO) |
1개 |
| 서보 모터 MG995 |
1개 |
| 서보 모터 DS3115 |
1개 |
| 로터리 포텐셔미터 10kΩ (B 커브) |
1개 |
앱 및 온라인 서비스
프로젝트 개요
로봇 팔과 그 컨트롤러를 직접 만들었습니다.
구성
로봇 팔은 3개의 일반 PWM 서보를 사용하며, 각 관절 각도는 가변 저항(로터리 포텐셔미터)으로 제어합니다. 사용한 포텐셔미터는 B 커브 10kΩ입니다.
로봇 팔 제작
수직 방향에는 DS3115 서보 모터 2개, 수평 회전(스윙) 방향에는 MG995 서보 모터 1개를 사용했습니다.
컨트롤러 제작
컨트롤러 케이스는 3D 프린터로 출력했습니다.
로터리 포텐셔미터의 노브를 통과시키는 구멍과 위치 결정용 구멍, 노브 삽입용 홈 등을 설계에 반영했습니다.
제작된 부품과 3개의 로터리 포텐셔미터를 조립해 완성!
포텐셔미터가 로봇 팔의 서보 모터 회전축과 같은 방향이 되도록 배치했습니다.
아두이노 코드
단순히 로터리 포텐셔미터 값을 아날로그 핀으로 읽어 각도로 변환한 뒤 해당 서보에 입력하는 간단한 코드입니다.
#include <Servo.h>
Servo myservo1, myservo2, myservo3;
float th1 = 90.0, th2 = 90.0, th3 = 90.0;
float val1, val2, val3;
void setup() {
Serial.begin(9600);
myservo1.attach(9, 500, 2420); // MG995
myservo2.attach(10, 820, 2140); // DS3115
myservo3.attach(11, 820, 2140); // DS3115
set_servo();
}
void loop() {
val1 = analogRead(A1);
val2 = analogRead(A2);
val3 = analogRead(A3);
th1 = map(val1, 170.0, 880.0, 0.0, 180.0);
if (th1 >= 180.0) th1 = 180.0;
else if (th1 <= 0.0) th1 = 0.0;
th2 = map(val2, 150.0, 860.0, 0.0, 180.0);
if (th2 >= 180.0) th2 = 180.0;
else if (th2 <= 0.0) th2 = 0.0;
th3 = map(val3, 860.0, 160.0, 0.0, 180.0);
if (th3 >= 180.0) th3 = 180.0;
else if (th3 <= 45.0) th3 = 45.0;
set_servo();
}
void set_servo() {
myservo1.write(th1);
myservo2.write(th2);
myservo3.write(th3);
}
작동
로터리 포텐셔미터를 배선해 아두이노에 연결하면 완성!
사용자 정의 부품 및 인클로저
(3D 프린터 파일 등은 별도 제공)