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

로컬 및 원격 프로그래밍 가능 로봇 팔

구성품 및 소모품

Arduino Mega 2560
× 1
Arduino UNO용 SainSmart DIY 3축 제어 팔레타이징 로봇 팔 모델 MEGA2560
× 1
MeArm DIY 로봇 암 키트
× 1
Adafruit RGB 백라이트 LCD - 16x2
× 1
Android 기기
× 1
회전 전위차계(일반)
10Kohm
× 4
SparkFun 푸시버튼 스위치 12mm
× 3
LED(일반)
빨간색, 파란색, 녹색, 노란색
× 4

앱 및 온라인 서비스

Arduino IDE
MIT 앱 인벤터 2

이 프로젝트 정보

이 튜토리얼의 목적은 산업용 로봇의 기본 기능을 시뮬레이션하는 로봇 암의 제어 및 프로그래밍을 위한 프로젝트를 단계별로 개발하는 것입니다.

1단계:사양

로봇에는 두 가지 기본 기능이 있습니다.

<울>
  • 프로그램 :팔 위치를 3차원으로 기록합니다(각 기록은 "단계"임)
  • <울>
  • 실행 :"프로그램"에 기록된 위치를 순서대로 수행합니다. 로봇은 "ABORT" 명령이 사용될 때까지 프로그램을 실행합니다.
  • 주요 특징:

    <울>
  • 이 프로젝트는 3 또는 4 DOF("자유도")로 로봇을 제어하는 ​​데 사용할 수 있습니다.
  • <울>
  • 로봇은 "LOCAL" 및 "REMOTE" 모드에서 제어할 수 있습니다(마지막 하나는 Android 기기를 통해).
  • <울>
  • 프로그램 단계에서 사용자는 제어 모드를 "LOCAL"에서 "REMOTE"로 또는 그 반대로 변경할 수 있습니다.
  • <울>
  • 색상 LED, 2줄 LED 디스플레이 및 사운드(부저)를 통해 사용자에게 정보를 제공합니다.
  • <울>
  • 소리 경보는 원격으로 작동될 수도 있습니다.
  • 2단계:프로젝트

    이전 단계의 블록 다이어그램은 이 프로젝트에서 사용될 "Bill of Material"을 보여줍니다.

    사용 가능한 Arduino 포트(I/O)의 수에 대해 걱정하지 않기 위해 Arduino MEGA를 선택했습니다. 예를 들어 UNO는 문제 없이 작동하지만 포트 확장 방법을 사용해야 합니다. 예를 들어 74138 디코더와 같이 인터넷에서 쉽게 찾을 수 있는 몇 가지 옵션이 있습니다.

    여기, "로컬 모드"에서 프로그래밍되는 첫 번째 프로토타입입니다.

    블루투스 네트워크의 경우 HC-06이 사용됩니다.

    "원격 모드에 사용되는 Android 앱 "는 Android 기기를 기반으로 하는 이러한 종류의 앱을 위한 강력한 단일 플랫폼인 MIT Appinventor2 도구를 사용하여 개발되었습니다. 이 앱은 Google 스토어 MJRoBot Arduino Robot Arm Control에서 무료로 다운로드할 수 있습니다.

    아래 비디오는 원격 프로그래밍을 사용한 최종 프로젝트가 무엇인지에 대한 아이디어를 제공합니다.

    3단계:프로젝트 개발

    로봇 팔은 "관절" 또는 "자유도"(DOF)의 수에 따라 분류할 수 있습니다.

    <울>
  • "베이스 " 또는 "허리 ", 일반적으로 사용되는 서보 유형에 따라 암을 180o 또는 360o 돌릴 수 있습니다(이 프로젝트에서는 180o 서보가 사용됨).
  • <울>
  • "어깨 ", 팔을 수직으로 "올리거나 내리는" 책임이 있습니다.
  • <울>
  • "팔꿈치 "는 팔을 "앞으로 또는 뒤로" 가게 합니다.
  • <울>
  • "발톱 " 또는 "그리퍼 "는 "물건을 잡기 위해" 열거나 닫아 작동합니다.
  • 4단계:서킷

    서보 모터는 Arduino에 직접 연결된 조인트를 구동하는 데 사용됩니다. 더 큰 토크와 정밀도를 위해 베이스에 사용되는 "스테퍼 모터"를 참조하는 것은 드문 일이 아닙니다. 서보의 적절한 선택은 매우 중요합니다(불행히도 내 SanSmart 3DOF AARM과 함께 제공되는 MG995와 같이 매우 열악한 구성의 저렴한 중국 서보가 있습니다). 그러나이 프로젝트의 제안은 잘 작동했습니다.

    서보의 DC 전원은 Arduino 및 기타 구성 요소와 분리되어야 합니다. 5V 또는 6V의 외부 전원 공급 장치는 문제 없이 작동해야 합니다(적절한 전압 범위를 확인하려면 서보의 DataSheet를 확인하십시오). 일반적인 관행은 VCC와 GND 사이에 470uF 커패시터를 사용하여 서보 내부의 DC 모터에서 발생하는 노이즈를 최소화하는 것입니다. 모든 "접지"(Arduino GND 핀이 있는 외부 전원)를 연결해야 합니다.

    서보에 문제가 있고 많이 진동하는 경우 코드의 "지연"을 조정하십시오. 서보가 새로운 명령을 받기 전에 특정 지점에 도달할 시간을 갖는 것이 중요합니다. 또한 서보가 디지털인지 아날로그인지 확인할 가치가 있습니다. 마치 기계적으로 유사한 것처럼 디지털은 300Hz의 주파수로 작동하고 아날로그는 50Hz의 주파수로 작동합니다. 표준 Arduino 라이브러리 "Servo.h "는 아날로그 서보용으로 개발되었으며 디지털 서보에서 더 나은 기능을 위해 필요한 경우 수정할 수 있습니다.

    위의 그림은 전체 회로를 보여줍니다.

    5단계:코드

    프로젝트는 복잡하지 않지만 많은 변수가 있습니다. 가장 신중한 방법은 명확하게 정의하고 고유한 파일에 주석을 남겨두는 것입니다.

    ArmDefine.h

    이 파일은 또한 최소, 최대 및 초기 서보 각도를 설정해야 합니다. 이 튜토리얼에 포함된 코드에는 내 프로젝트에서 테스트한 로봇 팔에 대한 두 가지 매개변수 세트가 있습니다(물론 상수 그룹만 사용해야 함).

    // MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip midBase 87#define midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 midGrip 100#define midBase 90#define midShou 90#define midElbw 0 */ 

    각 유형의 팔에는 서로 다른 매개변수 세트가 있으며 자신에게 맞는 것을 찾는 것이 중요합니다. 내가 제안하는 것은 초기에 전위차계(pots)가 중간점에 남아 있고 PWM 출력의 매핑이 기본값으로 설정된다는 것입니다. Max =255 , 최소 =0중간 =126 ( "#define " 위). 그런 다음 포트를 하나씩 변경하기 시작하고 직렬 모니터(또는 LCD)에서 arm이 제대로 작동하는 최소값과 최대값을 따라야 합니다. 이것이 최종적으로 사용되는 값입니다. 설정(ArmDefine.h에서 내 원래 값 변경) .

    로봇이 재생해야 하는 일련의 좌표(또는 단계)를 "기록"하기 위해 데이터 배열을 사용합니다.

    <사전><코드>int gripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // 기록된 작업에 사용되는 위치 배열에서 사용할 인덱스

    "저장된" 위치를 유지하지 않고 "로봇" 프로그램이 끝나면 인덱스가 다시 0으로 돌아가고 로봇은 새 시퀀스의 기록을 기다립니다(프로그램이 손실됨). 또는 이러한 데이터 배열을 예를 들어 Arduino EEPROM에 보관할 수 있습니다. 그렇게 하면 프로그램이 다시 실행되거나 하나 이상의 프로그램이 저장될 수 있습니다.

    6단계:프로그램 로직

    메인 블록("Loop")은 정말 간단합니다.

    "프로그램"(단계의 순서)을 실행하는 명령이 사용되었는지 확인하십시오.

    <울>
  • 그렇다면 실행하십시오.
  • <울>
  • 그렇지 않으면 "프로그램"이 완전하지 않고 여전히 새 단계를 작성해야 합니다.
  • <울>
  • "새 위치"가 정의되면 프로그램에 추가합니다.
  • <울>
  • 먼저 Android 기기에서 직렬 버퍼에 도착하는 메시지를 확인합니다.
  • <울>
  • 다음으로 제어 모드가 "로컬"인지 "원격"인지 확인합니다(기본값은 로컬).
  • <울>
  • 처음으로 돌아가 1단계를 다시 수행합니다.
  • void 루프(){ checkBTcmd(); 정의LocalRemote(); execTaskCmd =디지털 읽기(execTaskPin); if (execTaskCmd ==|| HIGH 명령 =="runon") { RunProgram(); } 그렇지 않으면 recArmPosition(); 명령 ="";} 

    checkBTcmd() 함수 BT 모듈에서 도착한 개별 문자를 사용하여 문자열을 어셈블합니다. 이 문자열은 "command 변수에 전달됩니다. ".

    defineLocalRemote() 함수 "명령 변수를 고려합니다. " 모드를 원격으로 변경하는 명령이 하나 수신되었는지 또는 그 반대인지 확인합니다. 여기에서 알람 명령도 분석됩니다. 프로그램 로직을 위해 Android 장치에서 "알람"이 트리거되면 암은 반드시 원격으로 이동해야 합니다. 모드.

    RunProgram() 기능 준비, LED 켜기/끄기 등을 수행하고 특히 다음 기능을 호출합니다. ExecuteTask() . 후자는 일련의 단계에 대한 실행 논리를 포함하는 기능입니다. 이 함수는 "positionIndex " armPosition(그립, 베이스, 어깨, 팔꿈치) 도구를 사용하여 위치 데이터를 팔에 하나씩 전송 .

    마지막으로, 실제로 서보에 명령을 내리고 "단계"를 작성하는 함수는 recArmPosition()입니다. . Android 명령 수신에 따라 이 기능은 포트를 통하거나 Android 앱의 "슬라이더"를 통할 수 있는 서보의 위치를 ​​정의합니다. 각 위치가 변경될 때 이 함수는 armPosition을 사용하여 좌표를 서보에 보냅니다. 기능(그립, 베이스, 어깨, 팔꿈치). 포트 또는 슬라이더의 실제 위치 읽기 및 해당하는 서보 활성화는 "SAVE" 또는 "PROGRAM" 명령이 트리거될 때 발생합니다. 그 순간 배열의 위치 인덱스가 증가하고 단계가 저장됩니다.

    이해를 단순화하기 위해 모든 코드는 특정 기능을 기반으로 했습니다. "설정 ", "루프 " 및 위에서 설명한 기능은 거의 모두 MJRoBot_Arm_Robot_Task_Prgm.ino 파일에 있습니다.

    BT 명령 읽기와 같은 보다 일반적인 기능:void checkBTcmd() ; 사운드 생성기:무효 신호음(int pin, int freq, long ms) 및 디바운싱:부울 디바운스(int 핀) ; 파일:General_Functions.ino

    중요한 사실:Arduino가 16Mhz의 클럭을 기반으로 명령을 실행하기 때문에 제어 버튼은 초당 수백 또는 수천 번 읽힐 것으로 예상되므로 녹음 단계를 설정하는 "디바운싱" 버튼을 만드는 것이 중요합니다. .

    네 번째이자 마지막 파일은 Arm_Ctrl_and_Display.ino입니다.

    이 파일에는 전위차계의 읽기 기능이 있습니다. bool readPotenciometers() ; Android 슬라이더 읽기:bool readSliders() ; 서보 배치:void armPosition(int 그립, int basee, int 어깨, 팔꿈치 int) . 파일에 포함된 다른 기능은 LCD에 데이터 표시, 시리얼 모니터, 알람 등입니다.

    비디오는 Android 앱을 통해 원격으로 프로그래밍되는 로봇 팔 4DOF "meArm"을 보여줍니다. .

    프로젝트의 전체 소스 코드는 GITHUB에서 찾을 수 있습니다:

    https://github.com/Mjrovai/MJRoBot-Programmed-Arm

    또는 여기:

    F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

    7단계:결론

    항상 그렇듯이 이 프로젝트가 다른 사람들이 전자, 로봇 공학 및 IoT의 흥미진진한 세계에서 길을 찾는 데 도움이 되기를 바랍니다! 더 많은 프로젝트를 보려면 제 블로그를 방문하십시오:MJRoBot.org

    세계 남쪽에서 온 살루도스! 다음 튜토리얼에서 만나요!

    감사합니다

    마르셀로

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

    코드

    <울>
  • 코드 스니펫 #1
  • 코드 스니펫 #2
  • 코드 스니펫 #3
  • 코드 스니펫 #1Arduino
    <사전>// MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 Base 7define midGrip 30# define midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 mid 0define # maxElbw 정의 midBase 90#define midShou 90#define midElbw 0 */
    코드 스니펫 #2Arduino
    <사전>int gripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // 기록된 작업에 사용되는 위치 배열에서 사용할 인덱스
    코드 스니펫 #3Arduino
    <사전>무효 루프(){ checkBTcmd(); 정의LocalRemote(); execTaskCmd =디지털 읽기(execTaskPin); if (execTaskCmd ==|| HIGH 명령 =="runon") { RunProgram(); } 그렇지 않으면 recArmPosition(); 명령 ="";}
    깃허브
    https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

    회로도

    로봇 암
    https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

    제조공정

    1. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
    2. 제조 분야의 로봇 팔과 그 이점
    3. 로봇 매니퓰레이터와 로봇 암의 차이점
    4. LCD 애니메이션 및 게임
    5. Arduino와 스마트폰을 사용한 DIY 전압계
    6. IoT를 사용하여 로봇 팔 원격 제어
    7. Arduino 3D 인쇄 로봇 팔
    8. Nunchuk 제어 로봇 팔(Arduino 포함)
    9. Arduino 및 Nokia 5110 디스플레이가 있는 DIY 전압계
    10. Arduino를 사용한 간단하고 스마트한 로봇 팔