제조공정
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 3 |
|
|
EEZYBOT MK2 암
멋진 로봇 팔에 대해 thingiverse.com을 검색했다면 이것을 우연히 발견했을 가능성이 있습니다. EEZYBOT MK2 암(훌륭한 daghizmo가 설계)은 1:7 비율로 축소된 ABB IRB460의 운동학적 연결을 공유합니다. 그러나 이 팔은 서보와 함께 작동하도록 설계되어 약간 흔들리고 덜 우아합니다. 그러나 더 나은 솔루션이 있습니다. https://www.thingiverse.com/thing:2520572에 있는 MK2 Plus 암은 3개의 스테퍼 모터를 사용하여 연결 장치를 움직이는 원래 MK2 암의 리믹스 버전입니다.
이것을 인쇄하는 데 시간이 걸리므로 이 기사를 책갈피에 추가하고 모든 것을 인쇄한 다음 완료한 후 다시 오십시오! (며칠 정도 소요됩니다)
암을 조립하는 데 문제가 있는 경우 온라인에 많은 자습서가 있습니다.
홈 위치 선택
서보와 달리 스테퍼 모터에는 위치 인식 기능이 없습니다. 암에 전원이 공급될 때 먼저 귀환 루틴을 설정하여 이 문제를 해결해야 합니다. 3개의 리미트 스위치를 사용하여 홈 위치를 설정합니다. 연결 장치는 다소 복잡한 방식으로 작동하지만 암을 조립하고 모든 것이 어떻게 움직이는지 보면 스위치를 어디에 배치해야 하는지 쉽게 이해할 수 있습니다.
(즉, 데카르트 시스템과 같은 XY는 없지만 쉽게 하기 위해 XY라고 부를 것입니다.)
Z 리미트 스위치는 암의 메인 베이스 아무 곳에나 설정할 수 있습니다. 팔이 움직일 때 와이어가 떨어지지 않도록 뜨거운 접착제를 약간 추가합니다.
배선
모든 터미널이 CNC 실드에 표시되어 있기 때문에 배선은 매우 간단합니다. A4988 드라이버를 잘못된 방식으로 연결하지 마십시오! Y 리미트 스위치가 있는 쪽에 있는 스테퍼 모터는 CNC 실드의 Y 스테퍼 모터용 터미널에 연결해야 합니다. X 리미트 스위치 측면의 모터도 마찬가지입니다. (CNC 실드를 이런 식으로 다루기 쉽기 때문에 이것을 X와 Y라고 부릅니다) 암의 베이스를 회전시키는 최종 스테퍼를 Z 터미널에 연결하고 이름에 따라 엔드스톱을 배선합니다. 극성은 중요하지 않습니다.
모터가 실속 없이 작동하도록 전류를 공급할 수 있는 적절한 12V 전원 공급 장치를 찾으십시오.
코드
본론으로 들어가자. 스테퍼를 원활하게 구동하기 위해 Arduino용 AccelStepper 라이브러리를 사용할 것입니다. 이 라이브러리를 사용하면 여러 스테퍼 모터를 동시에 쉽게 가속, 감속 및 실행할 수 있습니다. 라이브러리 관리자(스케치> 라이브러리 포함> 라이브러리 관리자)를 사용하여 Arduino IDE를 통해 이 라이브러리를 직접 가져올 수 있습니다.
airspayce의 원래 제작자 페이지에서도 다운로드할 수 있습니다. https://www.airspayce.com/mikem/arduino/AccelStepper/
이제 필요한 모든 것이 준비되었으므로 코드를 단계별로 살펴보겠습니다.
먼저 사용할 핀의 이름을 정의합니다. 빠른 구글 이미지 검색으로 CNC 실드의 핀 다이어그램을 찾을 수 있습니다. 3개의 스테퍼 모터에 대한 AccelStepper 개체도 생성합니다.
#define XSTEP 2 //스테퍼 모터 스텝 핀
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5 // 스테퍼 모터 방향 제어 핀
#define YDIR 6
#define ZDIR 7
#define ENABLE 8 // CNC 실드 인에이블 핀
#define XLIMIT 9 // 리미트 스위치 핀
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250 // 가속도 및 최대 속도 값
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000
#
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)) { // 스위치가 활성화될 때까지 스테퍼를 CCW로 이동합니다.
XMOTOR. moveTo(초기_x홈); // 이동할 위치 설정
YMOTOR.moveTo(initial_yhome); // 이동할 위치 설정
initial_xhome--; // 필요한 경우 다음 이동을 위해 1 감소
initial_yhome--;
XMOTOR.run(); // 스테퍼 이동 시작
YMOTOR.run();
delay(5);
}
XMOTOR.setCurrentPosition(0); // 현재 위치를 0으로 설정
YMOTOR.setCurrentPosition(0);
initial_xhome =-1;
initial_yhome =1;
while(digitalRead(XLIMIT)){
XMOTOR.moveTo(initial_xhome); // 이동할 위치 설정
YMOTOR.moveTo(initial_yhome); // 이동할 위치 설정
initial_xhome--; // 필요한 경우 다음 이동을 위해 1씩 감소
initial_yhome++;
XMOTOR.run(); // 스테퍼 이동 시작
YMOTOR.run();
delay(5);
}
YMOTOR.setCurrentPosition(0); // 현재 위치를 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); // 현재 위치를 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)) { // 스위치가 활성화될 때까지 스테퍼를 CCW로 이동합니다.
ZMOTOR. moveTo(초기_zhome); // 이동할 위치 설정
initial_zhome--; // 필요한 경우 다음 이동을 위해 1 감소
ZMOTOR.run(); // 스테퍼 이동 시작
delay(5);
}
ZMOTOR.setCurrentPosition(0); // 현재 위치를 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); // 스테퍼 가속 설정
}
좋아, 그래서 그것은 많은 코드입니다. 여기에서 무슨 일이 일어나고 있는 걸까요? 암은 먼저 X 및 Y 모터에서 원점 복귀 루틴을 수행합니다. 연결이 작동하는 방식 때문에 이 작업은 몇 단계로 완료됩니다. (마지막에 동영상을 보시면 작동하는 모습을 보실 수 있습니다.)
<울>처음으로 귀환 절차를 수행할 때 정말 주의해야 합니다. 스테퍼가 다른 방향으로 움직이면 전원을 끄고 모터의 커넥터를 뒤집기만 하면 됩니다.
이제 완료되었으므로 setup() 함수에서 autohome()을 호출하여 한 번만 실행되도록 합니다. loop()를 비워 두십시오. 그리고 전원 공급 장치에 손을 대고 문제가 발생하면 전원을 끄십시오.
void setup() {
// 여기에 설정 코드를 입력하여 한 번 실행:
Serial.begin(9600);
pinsetup();
autohome();
Serial.println("호밍 확인");
}
운이 좋으면 모터가 올바른 방향으로 회전하고 리미트 스위치가 오른쪽으로 딸깍 소리를 내며 원점 복귀 루틴이 문제 없이 작동합니다. 그러나 나와 같다면 모든 것이 시작되고 실행되기 전에 약간의 변경을 해야 합니다. 따라서 귀환이 잘못되면 항상 전원을 차단하여 3D 인쇄된 팔을 망가뜨리지 않도록 하십시오.
마지막으로 팔이 원하는 위치로 이동하도록 loop()에 고유한 논리를 작성할 수 있습니다. 암이 연결된 방식으로 인해 X 및 Y 모터는 거의 직교 방식으로 엔드 이펙터를 제어합니다.
void loop() {
XMOTOR.runToNewPosition(100);
delay(1000);
YMOTOR.runToNewPosition(50);
delay(1000);
YMOTOR.runToNewPosition(-50);
지연(1000);
YMOTOR.runToNewPosition(0);
지연(1000);
XMOTOR.runToNewPosition( 0);
지연(1000);
}
결론
인기 있는 GRBL 펌웨어를 사용하여 이 팔을 제어하는 방법에 대한 많은 자습서를 보았습니다. 그러나 이것은 팔을 움직이기 위해 팔에 직렬 명령을 보낼 컴퓨터가 필요하다는 것을 의미합니다. 몇 가지 동작을 수행하는 데 MK2 암만 필요한 경우 Arduino에 쉽게 하드코딩하여 자체 작업을 수행하도록 할 수 있습니다.
이것은 직렬 명령으로 이것을 제어할 수 없다는 것을 의미하지는 않습니다! 직렬 구분 기호 코드를 여기에 통합하고 XY 및 Z 모터 단계를 문자열로 보낼 수 있습니다(특수 문자로 구분됨 - 예:5, 6, 7*로 X 모터를 5단계, Y는 6 및 Z x 7. *는 문자열의 끝을 나타내는 데 사용됨).
또한 엔드 이펙터의 3D 공간 좌표를 전송하고 arduino에서 역기구학 또는 기본 삼각법을 사용하여 필요한 단계를 파악하도록 이를 추가로 개발할 수도 있습니다.
즐거운 시간 보내세요! 그리고 Thingiverse의 모든 뛰어난 디자이너들에게 진심으로 감사드립니다!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">미리보기 없음(다운로드만 가능).
제조공정
ABB가 Foundry Plus를 개발하는 목적은 파운드리 환경에서 로봇을 보호하는 것입니다. 이러한 조건은 일반적으로 거칠고 로봇이 인간이 아니지만 작업 조건에 적합하지 않으면 분명히 악영향을 미칠 수 있습니다. 냉각수, 윤활제 및 금속 침은 로봇의 추가 마모에 기여하여 가동 중단, 수리 및 서비스 수명 단축의 위험을 증가시킵니다. Foundry Plus 로봇은 다이캐스팅 기계에 사용되는 윤활제 및 냉각 스프레이의 요구 사항을 기반으로 설계되었습니다. 방청 프라이머, 손목 조인트 및 플랜지 보호, 밀봉 화합물로 밀봉된 모터가 주
로봇 컨트롤러는 전체 로봇 시스템의 두뇌입니다. 그것 없이는 로봇은 복잡한 응용 프로그램을 수행하는 데 필요한 프로그래밍을 알 방법이 없습니다. 컨트롤러 보드는 로봇 컨트롤러 내부에 있으며 모든 와이어와 케이블이 컨트롤러에 연결되는 마법이 시작되는 곳입니다. 이러한 전선과 케이블은 컨트롤러에서 로봇 팔로 이어지는 정보 고속도로입니다. 다양한 유형의 컨트롤러 보드가 있지만 오늘날의 USB 시장에는 교체 또는 수리를 위해 쉽게 연결하고 분리할 수 있는 USB 포트가 있는 것이 많습니다. 각 컨트롤러 보드는 다양한 항목을 제어할 수 있