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

직접 만드는 MK2 플러스 로봇 암 컨트롤러

부품 및 소모품

CNC 쉴드×1
직접 만드는 MK2 플러스 로봇 암 컨트롤러OpenBuilds NEMA 17 스테퍼 모터 (일반 NEMA 17 사용)×3
직접 만드는 MK2 플러스 로봇 암 컨트롤러Arduino UNO×1
직접 만드는 MK2 플러스 로봇 암 컨트롤러SparkFun 스테퍼 모터 드라이버 보드 A4988×3
직접 만드는 MK2 플러스 로봇 암 컨트롤러OpenBuilds 마이크로 리미트 스위치×3

필요한 도구 및 기계

직접 만드는 MK2 플러스 로봇 암 컨트롤러3D 프린터

앱 및 온라인 서비스

직접 만드는 MK2 플러스 로봇 암 컨트롤러Arduino IDE

프로젝트 소개

EEZYBOT MK2 암

Thingiverse에서 멋진 로봇 팔을 검색하다 보면 이 팔을 발견하게 됩니다. EEZYBOT MK2 암(설계자 daghizmo)은 ABB IRB460의 운동학 링크를 1:7로 축소한 것입니다. 하지만 서보 모터로 동작하도록 설계되어 다소 흔들리고 우아하지 않습니다. 더 나은 대안이 있습니다. MK2 플러스 암은 원본 MK2를 리믹스해 3개의 스테퍼 모터로 링크를 구동합니다.

직접 만드는 MK2 플러스 로봇 암 컨트롤러

출력하는 데 며칠 걸리니 이 글을 북마크하고 출력 완료 후 다시 오세요!

조립에 어려움이 있다면 온라인 튜토리얼이 많이 있습니다.

홈 포지션 선정

서보와 달리 스테퍼 모터는 위치 인식이 없습니다. 전원 켤 때 홈 루틴으로 해결합니다. 3개의 리미트 스위치로 홈 포지션을 잡습니다. 링크 작동 방식이 다소 복잡하지만 조립해 보면 스위치 위치를 쉽게 이해할 수 있습니다.

직접 만드는 MK2 플러스 로봇 암 컨트롤러

(데카르트 좌표계처럼 XY는 아니지만 CNC 쉴드 다루기 쉽게 X, Y라 부르겠습니다)

Z 리미트 스위치는 암 메인 베이스 아무 곳에나 달면 됩니다. 핫글루로 살짝 고정해 움직일 때 선이 빠지지 않게 하세요.

배선

배선은 간단합니다. CNC 쉴드 단자가 모두 표시되어 있습니다. A4988 드라이버를 거꾸로 꽂지 않게 주의하세요! Y 리미트 스위치 쪽 스테퍼 모터는 CNC 쉴드의 Y 스테퍼 단자에, X 리미트 스위치 쪽 모터는 X 단자에 연결합니다. 베이스를 회전시키는 마지막 스테퍼는 Z 단자에 연결하고, 엔드스톱은 이름대로 연결합니다. 극성은 상관없습니다.

직접 만드는 MK2 플러스 로봇 암 컨트롤러

모터가 스톨하지 않을 만큼 전류를 공급할 수 있는 괜찮은 12V 파워 서플라이를 구하세요.

코드

아두이노용 AccelStepper 라이브러리를 사용해 스테퍼를 부드럽게 구동합니다. 이 라이브러리로 여러 스테퍼를 동시에 가속/감속/구동할 수 있습니다. 아두이노 IDE 라이브러리 매니저(스케치 > 라이브러리 포함 > 라이브러리 매니저)에서 바로 설치 가능합니다.

직접 만드는 MK2 플러스 로봇 암 컨트롤러

원작자 페이지: https://www.airspayce.com/mikem/arduino/AccelStepper/

필요한 핀 이름 정의와 AccelStepper 객체 생성:

#define XSTEP 2
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5
#define YDIR 6
#define ZDIR 7
#define ENABLE 8
#define XLIMIT 9
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000
#include <AccelStepper.h>
AccelStepper XMOTOR(1, XSTEP, XDIR);
AccelStepper YMOTOR(1, YSTEP, YDIR);
AccelStepper ZMOTOR(1, ZSTEP, ZDIR);

핀 설정 헬퍼 함수:

void pinsetup() {
  pinMode(ENABLE, OUTPUT);
  digitalWrite(ENABLE, LOW);
  pinMode(XLIMIT, INPUT_PULLUP);
  pinMode(YLIMIT, INPUT_PULLUP);
  pinMode(ZLIMIT, INPUT_PULLUP);
}

홈 루틴 로직:

void autohome() { xyhome(); zhome(); }

void xyhome() {
  int initial_xhome = -1;
  int initial_yhome = -1;
  XMOTOR.setMaxSpeed(500.0); XMOTOR.setAcceleration(50.0);
  YMOTOR.setMaxSpeed(500.0); YMOTOR.setAcceleration(50.0);
  while (digitalRead(YLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    YMOTOR.moveTo(initial_yhome);
    initial_xhome--; initial_yhome--;
    XMOTOR.run(); YMOTOR.run(); delay(5);
  }
  XMOTOR.setCurrentPosition(0); YMOTOR.setCurrentPosition(0);
  initial_xhome = -1; initial_yhome = 1;
  while (digitalRead(XLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    YMOTOR.moveTo(initial_yhome);
    initial_xhome--; initial_yhome++;
    XMOTOR.run(); YMOTOR.run(); delay(5);
  }
  YMOTOR.setCurrentPosition(0);
  YMOTOR.setMaxSpeed(250.0); YMOTOR.setAcceleration(10.0);
  initial_yhome = 1;
  while (!digitalRead(YLIMIT)) {
    YMOTOR.moveTo(initial_yhome);
    YMOTOR.run(); initial_yhome++; delay(5);
  }
  YMOTOR.setCurrentPosition(0);
  YMOTOR.setMaxSpeed(YMOTORMAXSPEED); YMOTOR.setAcceleration(YMOTORACC);
  XMOTOR.setCurrentPosition(0);
  XMOTOR.setMaxSpeed(250.0); XMOTOR.setAcceleration(10.0);
  initial_xhome = 1;
  while (!digitalRead(XLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    XMOTOR.run(); initial_xhome++; delay(5);
  }
  XMOTOR.setCurrentPosition(0);
  XMOTOR.setMaxSpeed(XMOTORMAXSPEED); XMOTOR.setAcceleration(XMOTORACC);
}

void zhome() {
  int initial_zhome = -1;
  ZMOTOR.setMaxSpeed(100.0); ZMOTOR.setAcceleration(100.0);
  while (digitalRead(ZLIMIT)) {
    ZMOTOR.moveTo(initial_zhome);
    initial_zhome--; ZMOTOR.run(); delay(5);
  }
  ZMOTOR.setCurrentPosition(0);
  ZMOTOR.setMaxSpeed(50.0); ZMOTOR.setAcceleration(50.0);
  initial_zhome = 1;
  while (!digitalRead(ZLIMIT)) {
    ZMOTOR.moveTo(initial_zhome);
    ZMOTOR.run(); initial_zhome++; delay(5);
  }
  ZMOTOR.setCurrentPosition(0);
  ZMOTOR.setMaxSpeed(1000.0); ZMOTOR.setAcceleration(1000.0);
}

설명이 길지만 실제 동작은 다음과 같습니다:

처음 홈 루틴 실행 시 매우 주의하세요. 모터가 반대 방향으로 돌면 즉시 전원 끄고 모터 커넥터를 뒤집으세요.

setup()에서 autohome() 호출해 한 번만 실행되게 하고 loop()는 비워둡니다. 전원 공급기 옆에 손을 대고 있다가 문제 생기면 바로 끄세요.

void setup() {
  Serial.begin(9600);
  pinsetup();
  autohome();
  Serial.println("HOMING OK");
}

운 좋으면 한 번에 성공하지만, 저처럼 여러 번 조정해야 할 수도 있습니다. 홈 루틴이 잘못되면 즉시 전원 끄고 3D 프린트 팔을 망가뜨리지 마세요.

마지막으로 loop()에 원하는 동작 로직을 작성하세요. 링크 구조상 X, Y 모터가 엔드 이펙터를 거의 데카르트 방식으로 제어합니다.

void loop() {
  XMOTOR.runToNewPosition(100); delay(1000);
  YMOTOR.runToNewPosition(50); delay(1000);
  YMOTOR.runToNewPosition(-50); delay(1000);
  YMOTOR.runToNewPosition(0); delay(1000);
  XMOTOR.runToNewPosition(0); delay(1000);
}

결론

이 팔을 제어하는 데 GRBL 펌웨어를 사용하는 튜토리얼이 많은데, 그러면 컴퓨터에서 시리얼 명령어를 보내야 움직입니다. 몇 가지 동작만 필요하면 아두이노에 하드코딩해 자율적으로 움직이게 할 수 있습니다.

물론 시리얼 명령어로 제어할 수도 있습니다. 시리얼 구분자 코드를 추가해 X, Y, Z 스텝을 문자열로 전송하면 됩니다(예: 5,6,7*는 X 5스텝, Y 6스텝, Z 7스텝 이동, *는 문자열 끝).

더 발전시켜 엔드 이펙터의 3D 공간 좌표를 보내고 아두이노가 역운동학이나 기본 삼각함수로 필요 스텝을 계산하게 할 수도 있습니다.

즐거운 제작 되세요! Thingiverse의 훌륭한 설계자들에게 진심으로 감사드립니다!

코드

robotArm

파일 압축 해제 후 아두이노 IDE로 열기

미리보기 없음 (다운로드만 가능).
MK2 로봇 암 컨트롤러 - GitHub

https://github.com/yasaspeiris/MK2-Robot-Arm-Controller

커스텀 부품 및 인클로저

로봇 암 MK2 플러스 on Thingiverse

설계자 ackyltle에게 크레딧 CAD 파일

제조공정

  1. Infineon, 통합 Arm Cortex-M0 탑재 IMC300 모터 컨트롤러로 유연성 강화
  2. 듀얼 암 SCARA 로봇 – 고도화된 조립·생산 솔루션의 새 지평
  3. MeArm 로봇 팔 V1.0 – 아두이노 & 라즈베리파이로 만드는 로봇 암
  4. 이더넷 제어 로봇팔: 아두이노 101과 WIZ750SR로 원격 제어
  5. LittleArm 2C: 3D 프린팅 아두이노 로봇 팔 – STEM 교육용 4자유도 로봇 암
  6. DIY 손동작 제어 아두이노 로봇 팔 - 단계별 제작 가이드
  7. 전용 안드로이드 앱으로 아두이노 로봇팔 제어하기
  8. 리얼타임 로보틱스, 통합 간소화·배포 가속화하는 첨단 컨트롤러 출시
  9. 야마 세이키 GA-2000CR: 로봇 암 & 팔레트 시스템 탑재 콤팩트 터닝 센터
  10. KUKA KMR iiwa: 인더스트리 4.0 대응 모바일 협동로봇 암