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

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

부품 및 소모품

부품 수량
아두이노 나노 R3 1
서보 모터 (타워프로 MG996R) 4

앱 및 온라인 서비스

프로젝트 소개

현대 제조 기술과 자재 운반, 부품 조립/수거, 용접/절단, 창고 관리 등 다양한 제조 분야에서 로봇 팔이 수행하는 중요한 역할을 항상 동경해 왔습니다.

이 로봇 팔을 만드는 과정은 도전이었습니다. 시작으로 2016년 fortzeroas가 설계한 단순한 로봇 팔을 선택했고, 일반적인 수동 제어 대신 C# 윈도우 애플리케이션으로 '자동화 앱'을 만들어 제조 자동화 앱처럼 보이게 했습니다.

프로그래밍 경험을 살려 로봇 팔을 완전히 제어하고, 움직임을 모니터링하며, 다양한 작업을 수행할 수 있는 자동화 애플리케이션을 만들었습니다.

1단계: 재료

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

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

도면은 마지막 단계에서 다운로드할 수 있습니다. 패턴을 인쇄해 MDF에 직접 붙인 후 외곽선을 따라 자르고 구멍을 뚫으세요. 회전 공구로 구멍을 뚫고 나무를 자르면 됩니다. 베이스는 도면이 없지만 응용 가능할 것입니다.

2단계: 도색 및 스타일링

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

매력적인 외관을 위해 같은 도면을 이용해 포토샵으로 데칼과 기하학적 도형을 디자인해 사실적으로 보이게 한 뒤 백색 접착제로 목재에 붙였습니다.

3단계: 프레임 조립

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

모든 것이 미리 계획되어 있어 조립이 간단했습니다. 서보 모터를 나사로 고정하고 작업 중 미세 조정을 했습니다.

좌우 측면을 연결할 때는 긴 나사 대신 두꺼운 나무 막대와 순간접착제를 사용해 무게를 줄였습니다.

4단계: 그리퍼 (집게 메커니즘)

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

플라이어로 금속 봉 두 개를 구부린 뒤, 3mm 두께 나무 조각에 회전 공구로 구멍을 뚫고 순간접착제로 고정했습니다.

5단계: 베이스 제작

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

베이스는 4mm 두께 MDF로, 약 17cm × 10cm 정사각형을 테이블 톱으로 자른 뒤 베이스 서보 모터(9g) 장착용 구멍을 뚫었습니다. 베이스와 실린더 간 마찰을 줄이기 위해 지름 10cm, 높이 2.5cm의 강한 골판지 조각을 잘라 서보 모터 샤프트 연결용 구멍도 뚫었습니다.

6단계: 전자 회로

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

아두이노로 두 개 이상의 서보를 사용할 때는 외부 전원이 필수입니다. 이 프로젝트에서는 마이크로 서보 9g 세 개와 대형 서보 모터 한 개를 사용했습니다.

첫 시연 테스트는 Tinkercad에서 가상으로 서보와 회로를 시뮬레이션하며 진행했습니다.

AA 1.5V 배터리 네 개(총 6V)를 사용했고, 브레드보드 테스트 후 아두이노 나노용 간단한 확장 독을 만들었습니다.

7단계: 아두이노 코드

  1. 최신 아두이노 IDE 다운로드 및 설치: https://www.arduino.cc/en/main/software
  2. 아두이노 보드를 USB 포트에 연결
  3. Tools > Board에서 보드 선택
  4. 코드를 IDE 편집기에 복사/붙여넣기
  5. 검증(✔) 클릭
  6. 업로드(➤) 클릭

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

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

이 부분이 가장 좋아하는 단계입니다. PC로 아두이노 프로젝트를 자동화하는 것은 향후 보드 및 다른 프로젝트 제어 능력을 향상시키는 좋은 시작이었습니다.

고정된 각도 위치에 도달하는 것은 쉽지 않았습니다. 처음에는 'Processing 3'이라는 서드파티 앱으로 이 문제를 해결했습니다.

초기에는 키보드로 로봇 팔 서보(베이스, 숄더, 엘보, 그리퍼)를 시뮬레이션하는 인터페이스를 만들어 '각도별로' 개별적으로 움직여 미리 준비된 고정 위치에 도달하게 했습니다.

준비된 위치에 도달하면 네 서보의 각도(A, B, C, D)를 코드 배열에 기록했습니다. 나중에 이 다중 배열을 윈도우 애플리케이션에서 사용해 각 서보 모터의 각도 제한을 파악하는 데 큰 도움이 되었습니다.

이 수집된 제한값을 사용자 인터페이스 사이드바의 가이드라인으로 넣어 로봇 팔을 제어하고 재생 기능도 지원합니다.

이 애플리케이션으로 로봇 팔을 다음과 같이 제어, 기록, 모니터링할 수 있습니다:

1. 모션 제어

두 가지 모드로 제어 가능합니다. 첫 번째는 트랙바를 드래그해 수동으로 제어하는 방식입니다:

2. 모션 기록

로봇 팔 움직임을 자동화하려면 'Rec. Position' 버튼 클릭 또는 키보드 R 키로 각 단계의 위치를 기록합니다. 애플리케이션이 이동한 모터 위치를 감지해 리스트에 따로 저장합니다.

'Start Auto mood' 버튼을 클릭하면 저장된 위치가 순차 명령 형태로 전송됩니다.

3. 모니터링

모든 단계를 그래프로 그려 비정상적인 변화를 감지할 수 있는 그래픽 인터페이스를 만들었습니다. 동시에 오른쪽 데이터 테이블에 각도와 정확한 이동 시간이 표시됩니다.

이 기능들로 제조 자동화처럼 직접 움직임을 구성해 로봇 팔에 작업으로 보낼 수 있습니다.

9단계: 업데이트

2018년 8월:

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기
아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

최근 레이저 커팅 머신으로 3mm MDF를 사용해 같은 디자인을 수정 제작했습니다. 커스텀 조이스틱을 추가한 것이 특히 멋진 아이디어였습니다.

코드

Task.ino (아두이노)
int delayT = 350;

void Home() {
  MyServo0.write(valGripper); delay(15);
  MyServo.write(valBase); delay(30);
  MyServo2.write(valShoulder); delay(30);
  MyServo3.write(valElbow); delay(delayT);
}

void Pick() {
  MyServo.write(4); delay(delayT);
  MyServo3.write(125);
  MyServo2.write(95); delay(delayT);
  MyServo0.write(50); delay(delayT);
  MyServo0.write(2); delay(delayT);
  MyServo2.write(60);
  MyServo3.write(80); delay(delayT);
  Serial.println("Object Picked");
}

void Drop() {
  MyServo.write(145); delay(delayT);
  MyServo2.write(80); delay(15);
  MyServo3.write(115); delay(delayT);
  MyServo0.write(40); delay(delayT);
  MyServo3.write(90); delay(delayT);
  Serial.println("Object Dropped");
}

void Playback() {
  char* command = strtok(ByteReceived, "&");
  while (command != 0) {
    char* separator = strchr(command, ':');
    if (separator != 0) {
      *separator = 0;
      int servoId = atoi(command);
      ++separator;
      int angle = atoi(separator);
      if (servoId = 1) { MyServo.write(angle); delay(delayT); }
      else if (servoId = 2) { MyServo2.write(angle); delay(delayT); }
      else if (servoId = 3) { MyServo3.write(angle); delay(delayT); }
    }
    command = strtok(0, "&");
  }
}
RobotArm.ino (아두이노)
// written by AhmedAzouz
#include <Servo.h>

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);
  pinMode(ledPin, OUTPUT);
  digitalWrite(13, LOW);
  MyServo0.attach(12); // 그리퍼
  MyServo.attach(11);  // 베이스
  MyServo2.attach(13); // 숄더
  MyServo3.attach(10); // 엘보
  
  MyServo0.write(valGripper); delay(15);
  MyServo.write(valBase); delay(30);
  MyServo2.write(valShoulder); delay(30);
  MyServo3.write(valElbow); delay(300);
}

void loop() {
  Serial.print("Base: "); Serial.print(valBase); Serial.print("\t");
  Serial.print("Shou: "); Serial.print(valShoulder); Serial.print("\t");
  Serial.print("Elbow: "); Serial.print(valElbow); Serial.print("\t");
  Serial.print("Grip: "); Serial.println(valGripper);

  while (Serial.available() > 0) {
    ByteReceived = Serial.read();
    switch (ByteReceived) {
      case 'n': digitalWrite(ledPin, HIGH); Serial.println("LED on"); break;
      case 'f': digitalWrite(ledPin, LOW); Serial.println("LED off"); break;
      case 'l': MyPosition = MyServo.read() + 2; MyServo.write(MyPosition); delay(15); break;
      case 'r': MyPosition = MyServo.read() - 2; MyServo.write(MyPosition); delay(15); break;
      case 'u': MyPosition2 = MyServo2.read() + 2; MyServo2.write(MyPosition2); delay(15); break;
      case 'd': MyPosition2 = MyServo2.read() - 2; MyServo2.write(MyPosition2); delay(15); break;
      case 'w': MyPosition3 = MyServo3.read() + 2; MyServo3.write(MyPosition3); delay(15); break;
      case 's': MyPosition3 = MyServo3.read() - 2; MyServo3.write(MyPosition3); delay(15); break;
      case 'o': MyServo0.write(30); delay(15); break;
      case 'c': MyServo0.write(1); delay(15); break;
      case 'q': digitalWrite(ledPin, HIGH); Pick(); Drop(); Home(); digitalWrite(ledPin, LOW); break;
      case 'h': Home(); digitalWrite(ledPin, LOW); break;
      default: digitalWrite(ledPin, HIGH); Pick(); Playback(); Home(); digitalWrite(ledPin, LOW); break;
    }
  }
}

커스텀 파트 및 인클로저

f98t2axin238k2n_khGWAEIqdl.skp (SketchUp 파일)

회로도

아두이노 나노와 타워프로 MG996R 서보로 정밀 PC 제어 로봇 팔 만들기

제조공정

  1. Makerarm: 메이커를 위한 올인원 데스크톱 로봇 팔
  2. 로봇 암(Robot Arm) 구조와 작동 원리 – 설계부터 조립까지
  3. 산업용 로봇 암이 제조업을 혁신하는 9가지 핵심 이점
  4. 산업용 로봇 팔: 생산 효율과 인적 가치 동시 향상
  5. 유압 로봇팔 제조 현장 가이드: 작동 원리, 장점, 적용 분야 총정리
  6. 원격 IoT 제어 커스텀 로봇 팔: 아두이노 MKR1000과 심링크(Simulink) 활용
  7. 아두이노 구동 3D 프린팅 로봇 팔 만들기: 단계별 가이드
  8. 아두이노 메가 기반 닌텐도 눙크 컨트롤 6자유도 로봇 암 키트
  9. SCARA 로봇 시장, 2026년까지 147.8억 달러로 성장해 자동화 성장 견인
  10. 산업용 로봇 팔: 제조 혁신을 이끄는 핵심 기술