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

PC 제어 로봇 팔

구성품 및 소모품

Arduino Nano R3
× 1
서보(타워 프로 MG996R)
× 4

앱 및 온라인 서비스

Microsoft Visual Studio 2015
Arduino IDE

이 프로젝트 정보

저는 항상 현대 제조 기술과 자재 들어올리기, 부품 설치 및 수집, 용접 및 절단, 창고에서의 사용 편의성과 같은 다양한 제조 영역에서 이러한 기계가 수행하는 중요한 역할에 감탄했습니다.

이 로봇 팔을 만들 때의 경험은 도전이었습니다. 그래서 처음에는 2016년 fortzeroas에서 디자인한 단순한 로봇팔을 선택하고, 평소처럼 손으로 제어하지 않기로 하여 "C# Windows Application"으로 자동화 앱을 만들어 제조 자동화 앱처럼 보이게 만들었습니다.

그래서 제 프로그래밍 기술 경험에 따라 로봇 팔을 완전히 제어하고, 움직임을 모니터링하고, 다른 작업을 수행하도록 이 자동화 애플리케이션을 만들었습니다.

1단계:자료

주재료는 MDF목재로 구조물에 2mm, 베이스에 4mm를 사용하였습니다.

청사진은 마지막 단계에서 다운로드할 수 있습니다. 패턴을 인쇄한 다음 MDF에 직접 접착해야 합니다.

윤곽을 따라 자르고 구멍을 뚫습니다. 나는 회전식 도구를 사용하여 나무를 드릴하고 자르고, 기초에 대한 청사진은 없지만 즉흥적으로 할 수 있다고 생각합니다.

2단계:페인팅 및 스타일링

프로젝트에 매력적인 모양을 주기 위해 동일한 청사진을 사용한 다음 Photoshop을 사용하여 표지를 디자인하여 사실적으로 보이도록 데칼과 기하학적 모양을 만든 다음 흰색 접착제를 사용하여 나무에 붙였습니다.

3단계:프레임 조립

이 로봇 팔은 모든 것이 미리 계획되었기 때문에 조립이 간단했습니다. 그래서 나사로 서보 모터를 제자리에 고정하기만 하면 되며 작업하는 동안 약간의 수정 작업을 수행해야 했습니다.

그런 다음 오른쪽과 왼쪽을 부착하기 위해 두꺼운 나무 막대기를 사용하고 긴 나사의 슈퍼 글루를 사용하여 풀로 붙여서 와이트를 줄였습니다.

4단계:그리퍼(핀치 메커니즘)

나는 플라이어로 두 개의 금속 막대를 구부린 다음 회전 도구 드릴을 사용하여 3mm 두께의 나무 조각 안에 홀을 뚫고 슈퍼 글루로 붙입니다.

5단계:베이스 만들기

베이스는 4mm 두께의 MDF 나무로 만들어졌으며 테이블 톱으로 약 17cm * 10cm의 정사각형을 자른 다음 홀을 드릴하여 베이스 서보 모터 9g을 앉힙니다. 베이스와 실린더 사이의 마찰을 줄이기 위해 높이 2.5cm, 직경 10cm의 튼튼한 판지 캔을 잘라낸 다음, 드릴로 서보 모터 샤프트를 부착합니다.

6단계:전자 제품

Arduino와 함께 2개 이상의 서보를 사용할 때는 외부 전원을 사용해야 하며, 이 프로젝트에서는 3개를 사용했습니다. 마이크로 서보 9g 및 하나 큰 서보 모터.

물론 첫 번째 데모 테스트는 tinkercad.com에서 가상으로 진행하여 서보를 시뮬레이션하고 전기 회로를 테스트했습니다.

그래서 이 경우 6v에 해당하는 4개의 배터리 AA 1.5v를 사용하고 브레드보드 테스트 설정을 한 후 Arduino nano용으로 매우 간단한 확장 도크를 만들었습니다.

7단계:Arduino 코드

1. Arduino IDE 최신 버전을 다운로드하여 설치합니다. Arduino 웹사이트:https://www.arduino.cc/en/main/software

에서 Windows, Linux 또는 MAC OSX용 최신 버전을 찾을 수 있습니다.

2. Arduino 보드를 USB 포트에 연결합니다.

3. 도구> 보드로 이동한 다음 보드를 선택합니다.

4. 코드를 복사하여 IDE 편집기에 붙여넣습니다.

5. (✔) 아이콘 버튼을 클릭하여 코드를 확인하십시오.

6. (➤) 아이콘 버튼을 클릭하여 코드를 보드에 업로드하십시오.

8단계:자동화 애플리케이션

사실 이것은 내가 가장 좋아하는 부분은 PC를 사용하여 Arduino 프로젝트를 자동화하는 것입니다. 제 생각에는 보드 및 기타 프로젝트 제어 기능을 향후에 향상시키는 방법을 배우는 좋은 시작이었습니다.

고정 각도 위치에 도달하는 것이 쉽지 않았기 때문에 처음에는 "Processing 3"이라는 타사 응용 프로그램을 사용하여 이 문제를 해결했습니다.

초기 단계에서는 키보드로 로봇 팔 서보(베이스, 숄더, 팔꿈치 및 그리퍼)를 시뮬레이션하고 미리 준비된 고정 위치에 도달할 때까지 개별적으로 "각도별로" 이동하는 지원 인터페이스를 만들었습니다.

그런 다음 준비된 위치에 도달했을 때 이 4개의 각도를 코드 배열(A,B,C,D)에 기록했습니다. 그런 다음 나중에 Windows 응용 프로그램에서 이 다중 배열을 사용하여 한계를 아는 데 많은 도움이 되었습니다. 각 서보 모터의 각도가 제자리에 있습니다.

이러한 수집된 제한은 ARM을 제어하고 재생 기능을 지원하기 위해 사용자 인터페이스 사이드바에 지침으로 넣었습니다.

따라서 이 애플리케이션을 사용하여 로봇 암을 다음과 같이 제어, 기록, 모니터링할 수 있습니다.

1. 모션 컨트롤:

이 로봇 팔을 제어하는 ​​두 가지 분위기가 있습니다. 첫 번째는 수동으로 다음과 같은 경련 서보를 제어하는 ​​트랙 바를 드래그하는 것입니다.

<울>
  • 그리퍼:열기 및 닫기 버튼을 클릭하여 로봇 그리퍼를 열고 닫습니다.
  • <울>
  • 베이스:추적 막대를 오른쪽 및 왼쪽으로 드래그하거나 키보드 화살표(오른쪽/왼쪽)를 사용하여 베이스를 오른쪽 및 왼쪽으로 이동합니다.
  • <울>
  • 어깨:트래킹 바를 좌우로 드래그하거나 키보드 화살표(위/아래)를 사용하여 어깨를 위/아래로 이동합니다.
  • <울>
  • 엘보:트래킹 바를 좌우로 드래그하거나 키보드 키(w/s)를 사용하여 팔꿈치 모터를 위아래로 이동합니다.
  • 2. 움직임 기록:

    로봇 팔의 움직임을 자동화하려면 "Rec. Position" 버튼을 클릭하거나 키보드에서 (R)을 눌러 모든 단계에서 위치를 기록해야 합니다. 그러면 애플리케이션에서 알아서 처리합니다.

    모든 단계에서 애플리케이션이 이동된 모터 위치를 감지하여 기록하고 별도로 목록에 저장합니다.

    "자동 분위기 시작" 버튼을 클릭하면 애플리케이션이 저장된 위치를 시퀀스 순서의 형태로 보냅니다.

    3. 모니터링:

    사용자가 비정상적인 변경이 발생할 수 있음을 알 수 있도록 그래프의 모든 단계를 그리는 그래픽 인터페이스를 만들었습니다. 동시에 오른쪽에는 특정 각도와 이동에 대한 정확한 시간을 제공하는 데이터 테이블이 있습니다.

    따라서 이러한 기능을 사용하면 제조 자동화에서와 마찬가지로 자신만의 움직임을 구성하고 작업으로 Robotic Arm에 보낼 수 있습니다.

    9단계:업데이트

    2018년 8월:

    최근에 3mm MDF를 사용하여 레이저 절단기에 약간의 수정을 추가한 후 동일한 디자인을 만들었습니다. 사실 이 추가 아이디어는 특히 커스텀 조이스틱을 추가했을 때 멋졌습니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Task.ino
  • RobotArm.ino
  • Task.ino아두이노
    int delayT =350;void Home() //팔을 홈 위치로 설정하려는 경우 이 함수를 호출합니다. { MyServo0.write(valGripper); // 그리퍼 지연(15); MyServo.write(valBase); // 기본 지연(30); MyServo2.write(valShoulder); // 어깨 지연(30); MyServo3.write(valElbow); // 엘보우 지연(delayT); }void Pick() // 이것은 고정된 선택 장소입니다. { MyServo.write(4); // 기본 지연(delayT); MyServo3.write(125); // 팔꿈치 MyServo2.write(95); // 어깨 지연(delayT); MyServo0.write(50); // 그리퍼 오픈 와이드 delay(delayT); MyServo0.write(2); // 그리퍼 닫기 지연(delayT); MyServo2.write(60); // 어깨를 살짝 위로 올려 MyServo3.write(80); // 엘보우 업 약간 delay(delayT); Serial.println("객체 선택"); }void Drop() // 이것은 고정된 Drop 장소입니다. { MyServo.write(145); // 기본 지연(delayT); MyServo2.write(80); // 어깨 지연(15); MyServo3.write(115); // 엘보우 지연(delayT); MyServo0.write(40); // 그리퍼 오픈 와이드 delay(delayT); MyServo3.write(90); // 엘보우 업 약간 delay(delayT); Serial.println(F("객체 삭제")); }void Playback() { // https://arduino.stackexchange.com/questions/1013/how-do-i-split-an-incoming-string // 입력은 배열이어야 합니다(servoId:Position &servoId:Position &ServoId :Position ) // 문자열 구문; // 구 =문자열(구 + ByteReceived); // char 입력을 stirng으로 변환 분할 가능 // 각 명령 쌍 읽기 char* command =strtok(ByteReceived, "&"); while (command !=0) { // 명령을 두 값으로 나눕니다. char* separator =strchr(command, ':'); if (separator !=0) { // 실제로 문자열을 2로 분할:':'를 0으로 교체 *separator =0; int 서보 ID =atoi(명령); ++구분자; int angle =atoi(구분자); //servoId와 angle로 뭔가를 한다 if (servoId =1) { MyServo.write(angle); 지연(delayT); } else if (servoId =2) { MyServo2.write(각도); 지연(delayT); } else if (servoId =3) { MyServo3.write(각도); 지연(delayT); } } // 입력 문자열에서 다음 명령 찾기 command =strtok(0, "&"); } } 
    RobotArm.ino아두이노
    // AhmedAzouz 작성#include Servo MyServo,MyServo2,MyServo3,MyServo0;char ByteReceived;int MyPosition,MyPosition2,MyPosition3,MyPositionG;int runCounter =0;int ledPin =A5;// 설정 기본 홈 서보 위치 int valGripper =30;int valBase =70;int valShoulder =25;int valElbow =150;void setup(){ Serial.begin(9600); 핀모드(LED핀, 출력); 디지털 쓰기(13,LOW); MyServo0.attach(12); // 그리퍼 부착 MyServo.attach(11); // 베이스 첨부 MyServo2.attach(13); // 어깨 부착 MyServo3.attach(10); //팔꿈치 부착// 시작 위치 설정 MyServo0.write(valGripper); // 그리퍼 지연(15); MyServo.write(valBase); // 기본 지연(30); MyServo2.write(valShoulder); // 어깨 지연(30); MyServo3.write(valElbow); // 엘보우 지연(300);} void loop(){ Serial.print("Base :"); Serial.print(valBase); Serial.print("\t"); Serial.print("슈 :"); Serial.print(valShoulder); Serial.print("\t"); Serial.print("팔꿈치 :"); Serial.print(valElbow); Serial.print("\t"); Serial.print("그립 :"); Serial.println(valGripper); //if(Serial.available()) //Byte=Serial.read(); //읽기 //{ while (Serial.available()> 0 ) { ByteReceived =Serial.read(); switch (ByteReceived) { // ************* LED 케이스 'n':digitalWrite(ledPin,HIGH); //LED 켜기 Serial.println("LED가 켜짐"); 부서지다; 경우 'f':digitalWrite(ledPin,LOW); //LED 끄기 Serial.println("LED가 꺼짐"); 부서지다; // ************* 기본 케이스 'l':MyPosition =MyServo.read() + 2; // 왼쪽 베이스 이동의 경우 L MyServo.write(MyPosition); Serial.print("기본"); Serial.print("\t"); Serial.println(MyServo.read()); 지연(15); 부서지다; 경우 'r':MyPosition =MyServo.read() - 2; // 베이스 오른쪽으로 이동을 위한 R MyServo.write(MyPosition); Serial.print("기본"); Serial.print("\t"); Serial.println( MyServo.read()); 지연(15); 부서지다; // ************* 팔꿈치 케이스 'u':MyPosition2 =MyServo2.read() + 2; // 팔꿈치를 위로 움직이기 위한 U MyServo2.write(MyPosition2); Serial.print("팔꿈치"); Serial.print("\t"); Serial.println(MyServo2.read()); 지연(15); 부서지다; 경우 'd':MyPosition2 =MyServo2.read() - 2; // 팔꿈치를 아래로 이동하는 D MyServo2.write(MyPosition2); Serial.print("팔꿈치"); Serial.print("\t"); Serial.println(MyServo2.read()); 지연(15); 부서지다; // ************* 어깨 케이스 'w':MyPosition3 =MyServo3.read() + 2; // W 어깨 아래로 이동 MyServo3.write(MyPosition3); Serial.print("어깨"); Serial.print("\t"); Serial.println(MyServo3.read()); 지연(15); 부서지다; 경우 ':MyPosition3 =MyServo3.read() - 2; // 어깨 위로 이동을 위한 S MyServo3.write(MyPosition3); Serial.print("어깨"); Serial.print("\t"); Serial.println(MyServo3.read()); 지연(15); 부서지다; // ************* 그리퍼 케이스 'o':MyServo0.write(30); // 그리퍼를 열려면 O Serial.print("Gripper Open"); Serial.print("\t"); Serial.println(MyServo0.read()); 지연(15); 부서지다; case 'c':// 그리퍼를 열기 위한 C MyServo0.write(1); Serial.print("그리퍼 닫기"); Serial.print("\t"); Serial.println(MyServo0.read()); 지연(15); 부서지다; // ************* 기본 드롭 위치(빠른 드롭 위치) case 'q':digitalWrite(ledPin,HIGH); Serial.println("기본 삭제 활성화!"); 선택하다(); 하락(); 집(); 디지털 쓰기(LED핀,낮음); 부서지다; // ************* 강제 정지 및 홈 포지션 이동 case 'h':Home(); 디지털 쓰기(LED핀,낮음); 부서지다; // ************* 자동 무드 실행 재생 기능 // 직렬 읽기 다음 형식이어야 합니다:1:90&2:80&3:180 // 픽업 장소는 고정되어 있으며 이 기능은 드롭을 자동화합니다. 위치. 기본값:digitalWrite(ledPin, HIGH); Serial.println("자동 분위기 활성화!"); 선택하다(); 재생(); 집(); 디지털 쓰기(LED핀,낮음); 부서지다; }}}

    맞춤형 부품 및 인클로저

    f98t2axin238k2n_khGWAEIqdl.skp

    회로도


    제조공정

    1. Makerarm:제작자를 위한 초대형 로봇 팔
    2. 로봇 팔:어떻게 만들어지나요?
    3. 제조 분야의 로봇 팔과 그 이점
    4. 산업용 로봇 팔:생산성의 핵심
    5. 제조 산업의 유압 로봇 팔:확실한 가이드
    6. IoT를 사용하여 로봇 팔 원격 제어
    7. Arduino 3D 인쇄 로봇 팔
    8. Nunchuk 제어 로봇 팔(Arduino 포함)
    9. 로봇 팔 시장은 2026년까지 147억 8000만 달러로 성장할 것입니다.
    10. 산업용 로봇 팔 - 제조 붐