LittleArm 2C: 3D 프린팅 아두이노 로봇 팔 – STEM 교육용 4자유도 로봇 암
부품 및 소모품
| 부품 |
수량 |
| 아두이노 나노 R3 |
1 |
| MG90S 서보 모터 (메탈 기어) |
4 |
| Meped 보드 (아두이노 나노 호환 서보 드라이버 보드) |
1 |
필요 도구
- 3D 프린터 (PLA/PETG 필라멘트)
- 납땜 도구 (Meped 보드 조립 시)
프로젝트 소개
LittleArm 2C는 STEM 교육용으로 설계된 3D 프린팅 4자유도(4-DOF) 로봇 팔입니다. 부품 수 15개 미만, 나사 15개 이하로 조립이 매우 간단하며, 아이들도 쉽게 만들 수 있도록 견고하게 설계되었습니다. 모든 부품은 3D 프린터로 출력 가능합니다.
제어 방식
- 윈도우 앱: 파이썬 기반 GUI로 관절 각도 직접 제어
- 안드로이드 앱: 블루투스(HC-06)로 무선 제어
- 시리얼 프로토콜:
base,shoulder,elbow,gripper,delay\n 형식으로 아두이노에 명령 전송
3D 프린팅 파일
Thingiverse / 프로젝트 페이지에서 STL 파일 다운로드 (베이스, 숄더, 엘보, 그리퍼, 서보 홀더 등)
조립 가이드
- 모든 파트 3D 프린팅 (지름 0.4mm 노즐, 0.2mm 레이어 권장)
- 서보 모터를 각 관절에 장착 (나사 고정)
- Meped 보드에 아두이노 나노 장착, 서보 커넥터 연결 (D2~D5)
- 배선 정리 후 베이스에 보드 수납
- 그리퍼 서보 연결 확인
아두이노 펌웨어 (핵심 로직)
#include <Servo.h>
#include <math.h>
#define PI 3.141
Servo baseServo, shoulderServo, elbowServo, gripperServo;
struct JointAngle { int base, shoulder, elbow; };
JointAngle desiredAngle;
int desiredGrip, gripperPos, desiredDelay;
void setup() {
Serial.begin(9600);
Serial.setTimeout(50);
baseServo.attach(5);
shoulderServo.attach(4);
elbowServo.attach(3);
gripperServo.attach(2);
// 초기 자세
baseServo.write(90);
shoulderServo.write(100);
elbowServo.write(110);
gripperServo.write(0);
Serial.println("started");
}
void loop() {
if(Serial.available()) {
// 프로토콜: base,shoulder,elbow,gripper,delay\n
desiredAngle.base = Serial.parseInt();
desiredAngle.shoulder= Serial.parseInt();
desiredAngle.elbow = Serial.parseInt();
desiredGrip = Serial.parseInt();
desiredDelay = Serial.parseInt();
if(Serial.read() == '\n') {
Serial.flush();
Serial.print('d'); // 완료 응답
}
}
// 모든 서보가 목표 위치 도달할 때까지 병렬 제어
int done = 0;
while(!done) {
int s1 = servoParallelControl(desiredAngle.base, baseServo, desiredDelay);
int s2 = servoParallelControl(desiredAngle.shoulder,shoulderServo, desiredDelay);
int s3 = servoParallelControl(desiredAngle.elbow, elbowServo, desiredDelay);
int s4 = servoParallelControl(desiredGrip, gripperServo, desiredDelay);
done = (s1 && s2 && s3 && s4);
}
}
// 서보를 목표 각도까지 단계적으로 이동 (±5° 허용 오차)
int servoParallelControl(int target, Servo &servo, int speed) {
int current = servo.read();
if(current < target - 5) {
servo.write(current + 1);
delay(speed);
return 0;
} else if(current > target + 5) {
servo.write(current - 1);
delay(speed);
return 0;
}
return 1; // 도달 완료
}
회로도
Meped 보드 사용 시 연결은 단 4선(서보 4개)만 있으면 됩니다.
교육적 가치
- 역기구학(Inverse Kinematics) 기초 학습: 목표 좌표 → 관절 각도 계산
- 시리얼 통신 프로토콜 설계/파싱 실습
- 서보 동시 제어(병렬 이동) 알고리즘 이해
- 3D 모델링 → 프린팅 → 조립 → 프로그래밍 전 과정 체험
참고 자료