산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

부품 및 소모품

아두이노 우노 1개
JLCPCB 맞춤형 PCB 1개
서보 모터 MG996R 6개
5V 배터리 팩 1개
PCA9685 8채널 I2C 서보 드라이버 1개
HC-05 블루투스 모듈 2개
스파크펀 A4988 스테퍼 모터 드라이버 1개
NEMA-17 스테퍼 모터 1개
브레드보드 (일반) 1개
IMU (6자유도 관성 측정 장치) 1개
아두이노 나노 R3 1개
플렉스 센서 1개

필요한 도구 및 장비

프로젝트 소개

인간 제스처로 제어하는 DIY 로봇 팔을 소개합니다.

퍼시픽 림, 아바타 같은 블록버스터 영화들은 로봇과의 시너지 - 인간의 움직임이 로봇 지원으로 강화되는 - 를 암시했습니다. 같은 산업용 로봇을 더 작은 규모로 만들 수 있다면 어떨까요?

이 프로젝트는 그 시도의 하나입니다.

프로그래밍 가능할 뿐만 아니라 손 제스처로도 제어할 수 있는 아두이노 로봇 팔입니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

아이언맨 슈트 관례를 따라 각 반복을 마크(Mark)로 명명합니다. 이 프로토타입은 MARK 1입니다. 향후 더 많은 반복으로 원본 로봇 팔을 개선할 예정입니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

전체 DIY 로봇 팔 (손 제스처 제어) 튜토리얼 보기

개요

이 튜토리얼에서는 로봇 장갑을 사용하여 손 제스처로 제어되는 6축 로봇을 제작합니다. 집게 손가락 모으기나 손목 왼쪽 회전 같은 자연스러운 인간 제스처를 모방하여 로봇 팔을 열/닫거나 좌우로 회전시킬 수 있습니다. 즉, 로봇 팔을 수동으로 제어하는 것입니다.

원본 기사에서 더 자세한 내용 확인: 링크

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

MARK 1 특징:

부품 목록

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔은 완전히 커스터마이징 가능합니다. 기성품을 사거나 직접 3D 프린트할 수 있습니다. 3D 프린트 선택 시 서보 모터를 사용하는 다양한 로봇 예시가 있으니 이론은 그대로 적용됩니다.

이 프로토타입(Mark 1)은 커스텀 파츠 제작 공간이 더 많아 3D 프린트로 제작했습니다.

로봇 팔: Thingiverse 3D 프린트 로봇 팔 (제작자: Wonder Tiger):

나사 타입 등 더 많은 정보는 위 파트에서 확인 가능합니다. 출력 시간은 최대 40시간 소요되나 기성 로봇 팔 구매 비용을 절감할 수 있습니다.

로봇 장갑: 로봇 장갑 STL 파일 (제작자: Roman 13)

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 장갑은 미적 추가 요소지만, 작업용 장갑을 사용해 로봇 팔을 구현해도 무방합니다.

참고: 큰 손은 105% 스케일로 출력

작동 원리

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

전체적으로 로봇 장갑에서 서보 모터로 신호(블루투스 전송)를 보냅니다. 값이 수신되면 서보 드라이버가 특정 서보 모터로 신호를 보내 로봇 팔을 움직입니다.

여러 서보와 센서를 추가하면 각 모터를 제어할 수 있습니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔을 기능을 수행하기 위해 서로 협조하는 서보 모터들의 연속으로 생각하면, 로봇 장갑으로 제어되는 로봇 팔을 만들 수 있습니다.

로봇 장갑의 아두이노는 센서를 사용해 로봇 팔 아두이노와 통신하며, 서보 모터를 원하는 각도로 움직이도록 데이터를 전송합니다.

궁금하실 수 있습니다. 로봇 장갑에 어떤 센서를 사용하나요?

MARK 1에서는 플렉스 센서와 가속도계(MPU6050)를 사용합니다.

이 센서들로 제스처 변화를 감지하고, 제스처에 매핑된 특정 값을 블루투스로 로봇 팔에 보내 서보 모터를 제어합니다. 충분한 제스처가 있으면 로봇 팔이 살아납니다!

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔 매핑

장갑이 로봇 팔에 보내는 값 매핑 표입니다. 원본 기사에서 확인 가능합니다. 각각 기능을 나타내는 키가 있습니다. (P - 새끼손가락, L - 오른쪽 등)

참고: 대문자 "F"(손가락)는 서보 모터 회전 반대 방향을 나타냅니다.

부품 조립

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔 - 조립

로봇 팔 구매는 꽤 비쌉니다. 예산 내로 유지하기 위해 3D 프린트가 최선이었습니다.

장기적으로도 유리한데, LED 추가, 카메라 스탠드 클램프 제작 등 커스터마이징 가능한 3D 프린트 로봇 팔 예시가 많습니다.

앞서 언급했듯 로봇 팔은 Thingiverse의 Wonder Tiger 설계 기반으로 모델링했습니다. 6축 제공, 문서화 우수, 강도/견고성 우수하여 선택했습니다. 파트 목록에서 Wonder Tiger의 로봇 팔에 접근 가능합니다.

로봇 팔 카메라 스탠드용 리믹스도 있습니다. 향후 릴리스에서 다룰 예정이나 파트 출력에 최소 40시간 소요됩니다.

다른 3D 프린트 로봇 팔 대안도 많습니다.

서보 모터와 드라이버 소개

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔은 이상적으로 서로 협조하는 모터들의 연속이므로, 이론적으로 여러 모터를 아두이노로 모두 구동할 수 있습니다. 이 프로젝트에서는 PCA9685 서보 드라이버로 MG996R 서보를 구동합니다.

참고: 각 모터 구동 시 외부 전원 공급 장치 사용 필수. 아두이노로는 모든 모터에 충분한 전력을 공급할 수 없습니다. 이 프로젝트에서는 5V, 2200mAh RC 배터리를 사용했습니다.

아두이노 배선도는 아래와 같습니다:

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

베이스 회전용 NEMA-17

로봇 팔 무게가 늘어나 MG996R 서보로는 베이스에서 로봇 팔을 회전시킬 수 없었습니다. 더 견고한 모터가 필요했습니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

정밀도와 높은 토크로 제스처 제어에 따라 로봇 팔을 부드럽게 회전시키기 위해 스테퍼 모터(NEMA-17)를 사용했습니다.

NEMA-17과 A4988 드라이버로 모터 방향을 제어합니다. 아래 다이어그램 참고:

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

다음 다이어그램은 블루투스 모듈을 포함한 완전한 로봇 팔 배선도 최종 조립입니다.

회로 조립

아래 배선도는 블루투스 모듈을 포함한 모든 전자 부품의 최종 조립을 보여줍니다. 페어링 과정은 아래에서 다룹니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

인간 플렉스 센서

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔의 미학을 유지하며 3D 프린트 외골격 건틀렛을 로봇 장갑으로 사용할 수 있습니다.

하지만 프로토타이핑 시 일반 작업용 장갑을 써도 됩니다. 이 '로봇 장갑 외골격' 디자인은 로봇 팔 디자인과 잘 어우러집니다.

로봇 장갑 구성 요소:

다음 다이어그램은 플렉스 센서와 가속도계 테스트에 유용합니다.

중요: 로봇 팔의 정확도는 로봇 장갑 제어만큼만 정확하므로 이 부분을 제대로 하는 게 중요합니다.

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

블루투스 설정 (마스터 및 수신기)

아두이노 로봇 팔은 HC-05 모듈로 블루투스 통신합니다. 중요 정보:

모듈 설정
로봇 장갑 HC-05 마스터
로봇 팔 HC-05 슬레이브

참고: 보드레이트는 4800으로 설정

아두이노 프로그래밍

아래 코드를 다운로드하세요:

참고: 기타 테스트 코드와 최신 버전은 아두이노 로봇 팔 Git 저장소에서 확인 가능합니다.

로봇 팔 프로그래밍

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔 코드는 HCPCA9685 라이브러리(서보 드라이버용)를 사용합니다. 이렇게 여러 서보 모터를 아두이노 하나로 제어할 수 있습니다. 코드에서 라이브러리를 추가하고 서보 변수를 선언합니다.

다음 변수들은 이전/증분 값을 찾고 서보의 현재 위치를 추적하는 데 사용됩니다.

/* HCPCA9685 라이브러리 포함 */
#include "HCPCA9685.h"
/* 장치/모듈의 I2C 슬레이브 주소. HCMODU0097의 기본 I2C 주소는 0x40 */
#define I2CAdd 0x40
/* 라이브러리 인스턴스 생성 */
HCPCA9685 HCPCA9685(I2CAdd);
// 모터 초기 주차 위치
const int servo_joint_L_parking_pos = 60;
// 로봇 서보 민감도 - 간격
int servo_joint_L_pos_increment = 20;
// 모터 위치 현재 값 추적
int servo_joint_L_parking_pos_i = servo_joint_L_parking_pos;
// 서보 모터 최소/최대 각도
int servo_joint_L_min_pos = 10;
int servo_joint_L_max_pos = 180;

블루투스 통신 시작을 위해 시리얼 포트를 보드레이트 4800으로 초기화:

Serial.begin(4800); // 블루투스 모듈 기본 통신 속도 초기화

loop() 섹션에서는 로봇 장갑에서 데이터가 오는지 계속 확인합니다. 참이면 수신 데이터를 'state' 변수에 저장하고, 문자에 따라 모터를 움직입니다.

다음 섹션은 코드 개요입니다:

로봇 팔 코드는 인간 움직임을 시뮬레이션하기 위해 협력하는 서보 모터들의 연속으로 볼 수 있습니다. 코드는 블루투스 값에 기반해 서보 드라이버가 서보를 구동하는 같은 패턴입니다.

// 서보 드라이버 정의. 0x40 주소는 기본 I2C 주소.
#define I2CAdd 0x40
int response_time = 5; // 로봇 장갑에서 값 수신 간격

// 시리얼 포트에서 데이터 오는지 확인
if (Serial.available() > 0) {
  state = Serial.read(); // 시리얼 포트에서 데이터 읽기
  Serial.print(state);   // 전송된 값 출력
  // 모터 기능 코드 블록
}

현재 'state' 값에 따라 서보 드라이버가 해당 모터에 신호를 보냅니다.

예: 손가락을 구부리면 로봇 장갑이 'f' 값을 블루투스로 전송 → 로봇 팔이 이 데이터 읽고 해당 서보 모터 회전 함수 트리거. 이 과정이 무한 루프로 반복됩니다.

if (Serial.available() > 0) {
  state = Serial.read();
  Serial.print(state);
  // 모터 명명법은 기사/튜토리얼 참조
  // (베이스 회전) 스테퍼 모터 왼쪽으로
  if (state == 'S') {
    baseRotateLeft();
    delay(response_time);
  }
}

참고: 모터가 최대 각도를 초과해 기어가 손상되는 것을 방지하는 하드 스톱 구현.

HCPCA9685.Servo(0, servo_joint_L_parking_pos_i); // 채널 0 서보 모터를 원하는 각도로 구동
// 클로 모터 아래쪽으로
if (state == 'f') {
  if (servo_joint_3_parking_pos_i < servo_joint_3_max_pos) {
    HCPCA9685.Servo(4, servo_joint_3_parking_pos_i);
    delay(response_time);
    Serial.println(servo_joint_3_parking_pos_i);
    servo_joint_3_parking_pos_i = servo_joint_3_parking_pos_i + servo_joint_3_pos_increment;
  }
}
void baseRotateLeft() {
  digitalWrite(stepPin, LOW); // HIGH, LOW 기반 방향 회전
  delayMicroseconds(stepDelay); // 스테퍼 모터 속도 변경
}

서보 모터 값이 최대 회전보다 작으면 계속 회전. 180도 최대 회전 도달 시 정지.

servo_joint_3_parking_pos_i < servo_joint_3_max_pos

여기서 servo_joint_3_max_pos는 모터 최대 위치입니다.

참고: 모터가 최대 각도를 초과해 기어가 손상되는 것을 방지하는 하드 스톱 구현.

플렉스 센서 프로그래밍

로봇 팔 코드는 GitHub에서 확인 가능합니다. 프로젝트 작업 시 본인 버전을 Git 저장소에 기여해 주세요. 다양한 버전과 기능의 로봇 팔 인덱스 구축에 도움이 됩니다.

코드는 이미 문서화되어 있습니다(Git에서도 확인 가능). 핵심 포인트만 다룹니다:

다섯 센서 정의:

// LED 핀 3
int pinkie_Data = A1;
int finger_Data = A2;
int thumb_Data = A3;
// const int MPU_addr = 0x68;
const int MPU2 = 0x69, MPU1 = 0x68;

참고: 0x68과 0x69는 두 MPU6050 가속도계의 I2C 주소

// 로봇 팔에 값 전송 빈도
int response_time = 1000;

아두이노가 센서 값 읽기:


// 플렉스 센서 값 아두이노로 읽기
pinkie = analogRead(pinkie_Data);
finger = analogRead(finger_Data);
thumb = analogRead(thumb_Data);

가속도계 현재 위치 읽기:


GetMpuValue1(MPU1);
GetMpuValue2(MPU2);

값 보정:

다음 코드는 플렉스 센서의 상한/하한을 찾기 위해 보정합니다. 아두이노 리셋 버튼을 눌러 플렉스 장갑을 재보정합니다.


if (bool_caliberate == false) {
  delay(1000);
  thumb_high = (thumb * 1.15);
  thumb_low = (thumb * 0.9);
  finger_high = (finger * 1.03);
  finger_low = (finger * 0.8);
  pinkie_high = (pinkie * 1.06);
  pinkie_low = (pinkie * 0.8);
  bool_caliberate = true;
}

현재 값이 보정 기반으로 정의된 플렉스 상한/하한을 초과하는지 계속 확인합니다. 상한 초과 또는 하한 미만 시 로봇 팔에 데이터 전송하여 특정 서보 모터를 특정 방향으로 움직입니다.


// 손가락 1 - 클로 굽힘/펴기
if (finger >= finger_high) {
  Serial.print("F");
  delay(response_time);
}
if (finger <= finger_low) {
  Serial.print("f");
  delay(response_time);
}

로봇 팔 프로그래밍

결과 - 보상

DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드

로봇 팔은 물체 이동에 충분히 정확합니다. 하지만 복잡한 물체 이동이나 인간이 수백만 년 진화로 얻은 민첩함과 경쟁하려면 더 많은 작업 필요... 코드에 더 많은 시간 투자하면 로봇 정밀도는 MARK 1i 기준 의도대로 작동합니다. 다만 팔은 상당히 개선 가능합니다.

코드 개선 원하시면 아두이노 로봇 팔 Git 저장소에 기여해 주세요. 다른 사람들도 바탕으로 만들 수 있게 오픈합시다!

마지막으로, 손 제스처로 로봇 제어와 기본 작업 자동화 프로그래밍 모두 가능합니다.

다음 단계

MARK 1은 여기까지입니다! 프로젝트가 마음에 드시면 패트리온 페이지 지원 부탁드립니다.

코드

코드 스니펫들은 GitHub 저장소에서 확인하세요.

CAD 파일

회로도

로봇 팔 Git 저장소

제조공정

  1. 블루투스 제어 라즈베리 파이 로봇 만들기 - 오디오 피드백 포함
  2. 집에서 직접 만드는 DIY 숙제 작성 머신 (펜 플로터)
  3. 라즈베리파이 모터 쉴드로 만드는 안드로이드 제어 원격 주행 로봇
  4. 서보 모터 구동 장애물 회피 로봇: 아두이노 & HC-SR04로 제작하기
  5. 아두이노 우노로 자율 주행 라인 트레이서 로봇 만들기
  6. 아두이노 메가 기반 닌텐도 눙크 컨트롤 6자유도 로봇 암 키트
  7. 아두이노 나노로 만드는 음성 제어 로봇 - 블루투스와 안드로이드 앱 활용
  8. 이더넷 제어 로봇팔: 아두이노 101과 WIZ750SR로 원격 제어
  9. MobBob: 아두이노 로봇 직접 만들기, 안드로이드 스마트폰으로 매끄럽게 제어
  10. 아두이노 프로젝트를 위한 스마트 실내 내비게이션 로봇 키트