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

원격 제어 그리퍼 봇

구성품 및 소모품

Runt Rover 하프 파인트 섀시
× 1
Arduino UNO
× 1
V5 실드
× 1
암컷/암놈 점퍼 와이어
× 1
L9110S
× 1
90° 단일 각도 채널 브래킷(585424)
× 1
경량 서보 허브, Futaba
× 1
표준 그리퍼 키트 A(637094)
× 1
MG995
× 1
표준 서보 플레이트
× 1
90° 단일 각도 채널 브래킷
× 1
5슬롯 AA 홀더
× 1
AA 충전식 배터리
× 5
.750" 8-32 나일론 스페이서
× 2
.500" 너트가 있는 6-32 나사
× 8
.3125" 6-32 나사
× 8

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

몇 달 전 제 아들이 원격 제어 봇을 만들어 달라고 했습니다. 그는 그가 원하는 목록을 제게 주셨고 우리는 그것을 관리 가능한 목록으로 좁혔습니다 :) 이것이 제가 그를 위해 구축한 것입니다...

<울>
  • UNO와 V5 센서 실드를 잡고 함께 맞춥니다.
  • 결합된 UNO/센서 ​​보드를 봇 중앙 내부의 클립 홀더에 넣습니다.
  • 양면 테이프를 이용하여 왼쪽 안쪽 벽에 모터 드라이버를 붙이고 오른쪽 벽에 블루투스 어댑터를 붙입니다.
  • 이 프로젝트의 경우 섀시를 직접 만들 수도 있고 다른 섀시를 선택할 수도 있습니다. 선택은 여러분의 몫입니다.

    1단계:필요한 소프트웨어

    다운로드해야 할 항목:

    <울>
  • Arduino IDE
  • Python 2.7(tkinter로 전체 설치)
  • pySerial 라이브러리
  • .zip으로 첨부된 L9110S 모터 컨트롤러 라이브러리(이 단계의 파일 참조)
  • 아래 로봇 코드 또는 첨부된 .zip(이 단계의 파일 참조)
  • Python 원격 제어 애플리케이션(이 단계의 파일 참조)
  • 2단계:하드웨어 BOM

    필요한 부품은 다음과 같습니다.

    <울>
  • Runt Rover 하프 파인트 섀시 또는 적합한 4wd 동봉 교체품
  • Arduino Uno 또는 USB 케이블이 있는 유사한 보드
  • V5 센서 실드
  • L9110S 모터 드라이버 (저렴하니 몇 개 사세요)
  • MG995 서보 또는 다른 적절한 교체 x2
  • HC-05 또는 HC-06 블루투스 어댑터 x1
  • 표준 서보 플레이트 B x1
  • 90도 브래킷 x1
  • 단일 브래킷 x2
  • 경량 서보 허브(Futaba용 525125) x1
  • 표준 그리퍼 키트 A x1
  • 암-암 점퍼 와이어
  • 5개의 충전식 AA 배터리(NiMH) 및 충전기
  • 양면 접착 테이프 및 작은 집타이
  • 'AA' 5슬롯 배터리 팩(AA 충전식 옵션을 선택하는 경우)
  • 6v NiMH 또는 7.4v 리튬 이온 배터리 팩 및 충전기
  • 1.250" 6-32 나사 x2
  • .750" 8-32 나일론 스페이서 x2
  • .500" 6-32 나사, 너트 x8
  • .3125" 6-32 나사 x8
  • eBay 또는 Sparkfun, Adafruit 및 ServoCity와 같은 다른 공급업체로부터 많은 부품을 직접 소싱할 수 있습니다.

    구매, 수집 및 다운로드한 후 빌드를 시작할 준비가 된 모든 것을 다운로드하십시오.

    3단계:조립 - 섀시

    먼저 섀시 또는 비디오에 포함된 지침에 따라 섀시를 조립합니다. 완료 후 이미지와 같은 것이 있어야 합니다. 컨트롤러를 고정하는 플레이트를 봇에 놓을 때 반드시 가운데 구멍에 놓으십시오. 이렇게 하면 봇의 전면과 후면에 공간이 남습니다.

    참고:더 진행하기 전에 4개의 바퀴를 모두 제거하여 다른 봇 구성 요소를 장착하는 동안 모터가 손상되지 않도록 하십시오.

    4단계:그리퍼 조립

    이 동영상에 제공된 지침에 따라 그리퍼를 조립하세요. 완료되면 이미지와 같은 것이 있어야 합니다.

    5단계:그리퍼 장착 - 1단계

    이 단계를 위해 90도 브래킷, 경량 서보 허브 및 4개의 .3125" 나사를 사용합니다.

    서보 허브를 가져 와서 브래킷의 한쪽에 놓고 그림과 같이 .2125 "나사로 함께 고정하고 따로 보관하십시오. 두 개의 짧은 나사에 너트를 놓고 조입니다. 이제 두 개의 단일 브래킷, 1.250 " 나사 및 너트가 있는 2개의 .500" 나사, 2개의 나일론 스페이서 및 서보 플레이트 B. 하나의 브래킷을 가져 와서 하프 파인트 봇 내부에 놓고 왼쪽 구멍에 2개의 1.259" 나사를 끼웁니다. 내부) 및 오른쪽에 2.500" 나사. 모든 나사 머리는 그림과 같이 봇 내부에 있습니다. 이제 두 번째 단일 브래킷을 봇 외부의 나사에 배치합니다. 다음 나일론 스페이서를 더 긴(1.250") 튀어나온 부분에 놓고 서보 플레이트를 긴 나사에 조입니다. 서보 플레이트로 가는 나사를 적절한 크기의 육각 키로 조이거나 일반 나사를 사용한 경우 드라이버를 사용합니다.

    필요에 따라 참조용으로 사진을 사용하십시오.

    6단계:그리퍼 장착 - 2단계

    <울>
  • 다음으로 남은 서보를 가져와 척추가 위쪽으로 오도록 서보 브래킷에 넣습니다. 0.3125" 나사 4개로 고정합니다.
  • 다음으로 서보 허브가 있는 90도 브래킷을 잡고 그림과 같이 브래킷과 그리퍼 사이의 스페이서로 8-32 너트 중 2개를 사용하여 .500" 나사 4개로 그리퍼를 장착합니다. 그리퍼 상단의 다른 너트로 고정합니다(나사를 반대 방향으로 돌리면 브래킷 아래에 있음)
  • 이제 그리퍼 어셈블리를 서보에 놓고 서보 나사(서보 패킷에서)를 사용하여 제자리에 고정하고 단단히 고정합니다.
  • 작업이 끝나면 두 개의 서보 와이어를 플랫 브래킷 구멍을 통해 봇 내부로 연결합니다.

    자세한 내용과 참조는 사진을 참조하세요.

    7단계:전자 장치 장착

    <울>
  • UNO와 V5 센서 실드를 잡고 함께 맞춥니다.
  • 결합된 UNO/센서 ​​보드를 봇 중앙 내부의 클립 홀더에 넣습니다.
  • 양면 테이프를 이용하여 왼쪽 안쪽 벽에 모터 드라이버를 붙이고 오른쪽 벽에 블루투스 어댑터를 붙입니다.
  • 8단계:배선 - 모터

    <울>
  • 모터 드라이버의 A-1A 핀을 센서 실드의 핀 5에 연결
  • 모터 드라이버의 A-1B 핀을 센서 실드의 핀 6으로 연결
  • 모터 드라이버의 B-1A 핀을 센서 실드의 핀 3으로 연결
  • 모터 드라이버의 B-1B 핀을 센서 실드의 핀 11에 연결
  • 이제 로봇 전면이 당신에게서 멀어지게 하고 왼쪽의 전선을 잡고 -

    <울>
  • 왼쪽에 있는 두 개의 검은색 선을 모터 A의 첫 번째 출력 나사 단자에 연결합니다.
  • 왼쪽에 있는 두 개의 빨간색 선을 모터 A의 두 번째 출력 나사 단자에 연결합니다.
  • 오른쪽에 있는 전선을 잡고 -

    <울>
  • 왼쪽에 있는 두 개의 검은색 선을 모터 B의 첫 번째 출력 나사 단자에 연결합니다.
  • 왼쪽에 있는 두 개의 빨간색 선을 모터 B의 두 번째 출력 나사 단자에 연결합니다.
  • 서보:

    <울>
  • 이제 Y 서보 와이어를 센서 실드의 핀 라인 2에 연결합니다. 흰색 또는 주황색 와이어는 항상 신호 와이어입니다.
  • 이제 X(그리퍼) 서보 와이어를 센서 실드의 핀 라인 7에 연결합니다. 흰색 또는 주황색 와이어는 항상 신호 와이어입니다.
  • 9단계:블루투스 모듈 배선

    <울>
  • 블루투스 어댑터 Tx -> 센서 실드 핀 0
  • 블루투스 어댑터 Rx -> 센서 실드 핀 1
  • 10단계:전원 추가

    5 'aa'(또는 기타 6v 팩) 배터리 팩의 전원 리드를 센서 실드의 전원 나사 터미널에 연결합니다.

    <울>
  • Vcc에 빨간색
  • 검정에서 GND로
  • 다음으로 V5 ​​센서 실드의 점퍼가 점퍼 핀의 제자리에 있는지 확인합니다.
  • L9110s 드라이버의 GND 핀을 센서 실드의 GND 핀에 연결합니다.
  • 6v 또는 7.2v 배터리 또는 모터용으로 선택한 다른 배터리의 양극 와이어를 L9110S 모터 드라이버의 Vcc 핀에 연결합니다.
  • 모터 배터리의 음극(GND) 와이어를 모터 실드의 GND 핀에 연결합니다.
  • 11단계:HC05/HC06 블루투스 모듈 구성

    이제 OS의 "제어" 또는 "시스템" 패널에서 PC의 블루투스 장치 설정으로 이동하거나 Google을 사용하여 도움을 받아야 합니다.

    가능한 OS 블루투스 설정 정보:

    <울>
  • 창문
  • Linux(저는 Linux Mint에서 blueman을 사용하지만 자세한 내용은 배포판을 참조하십시오.)
  • 할당된 직렬 포트 장치 이름 또는 번호를 기록해 두어야 합니다.

    12단계:코드 로드

    배선 점검 및 재점검 , 코드를 로드할 시간입니다. Arduino IDE 설치 방법은 Arduino 사이트의 지침을 따르세요.

    IDE를 설치한 후 L9110 모터 드라이버 라이브러리를 설치할 수 있습니다. L9110Driver.zip이라는 1단계에 포함된 zip 파일을 다운로드하고 Arduino 라이브러리 폴더에 압축을 풀거나 라이브러리를 추가하는 방법에 대한 다음 지침을 따르면 됩니다.

    이제 IDE 및 모터 드라이버 라이브러리가 설치되었으므로 1단계에서 찾은 blue_t_slave.zip이라는 zip 파일에서 로봇 코드를 Arduino IDE에 로드합니다. 이 파일도 이 단계에 포함됩니다.

    USB 케이블로 PC와 Arduino를 연결하십시오. 이제 IDE의 도구->보드 메뉴에서 보드를 선택하고 이 프로젝트에 대해 Uno를 선택합니다(Uno와 다른 경우 보드 선택). 이제 도구->포트 메뉴에서 COM 포트를 선택합니다. 이 작업이 완료되면 업로드 버튼을 클릭합니다. 모든 것이 잘 되었다면 코드가 로드되었으며, 그렇지 않은 경우 IDE 및 관련 문제에 대한 도움말을 참조하십시오.

    13단계:Python 제어 애플리케이션 실행

    Python 원격 제어 응용 프로그램을 실행하려면 이 단계에서 zip 파일을 다운로드하고 실행하려는 위치에 압축을 풉니다. 그런 다음 명령 셸(예:터미널, cmd.exe 등)을 열고 파일을 추출한 디렉터리로 이동합니다. 이제 다음을 입력합니다. python rover.py 명령줄에서 이미지와 같은 창이 팝업되어야 합니다. 그렇지 않은 경우 Python 오류를 찾아 수정합니다(예:누락된 라이브러리 등). 필요한 경우 Python 사이트가 도움이 될 수 있습니다.

    앱이 실행되면 사용할 준비가 된 것입니다.

    이제 봇의 전원을 켭니다. 그런 다음 어댑터의 통신 포트를 입력하고 "연결" 버튼을 클릭합니다. 몇 초 후에 다른 컨트롤이 활성화되고 연결 버튼이 비활성화된 것을 볼 수 있습니다. 이것은 당신이 로봇에 연결되었음을 의미합니다. 블루투스 어댑터에 연결할 수 없으면 Google의 마법을 사용하여 도와야 합니다!

    제어 응용 프로그램은 사용이 간편하며 마우스 또는 키보드 제어가 가능합니다.

    키보드 컨트롤:

    <울>
  • 화살표는 전진, 후진, 좌회전 90도, 우회전 90도
  • a - 좌회전 45도
  • s - 우회전 45도
  • h - 정지(중지)
  • y - 그리퍼 Y축 설정
  • u - 그리퍼 열기/닫기 설정
  • c - 그리퍼 홈
  • 정방향 및 역방향 명령은 일정합니다. 즉, 실행 후 새 방향이 전송되거나 중단 명령이 전송될 때까지 봇이 계속 움직입니다.

    90도 및 45도 회전은 일시적입니다. 즉, 약간의 지연 후에 봇이 움직이는 것을 멈춥니다.

    그리퍼 슬라이더는 봇에 그리퍼를 자동으로 설정하지 않습니다. 세트를 실제로 실행하려면 해당 "설정" 버튼이나 키를 눌러야 합니다.

    슬라이더 값의 범위는 0-180입니다.

    <울>
  • 그리퍼 Y축:0은 끝까지 올라가고 180은 끝까지 내려갑니다.
  • 그리퍼 열기/닫기:0은 완전히 닫혀 있고 180은 완전히 열려 있습니다.
  • 프로그램 사용을 중지하려면 "연결 끊기" 버튼을 사용하십시오. 이렇게 하면 봇을 중지하고 그리퍼를 홈으로 이동하라는 명령이 전송됩니다.


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

    코드

    <울>
  • Python 드라이버 GUI
  • 로버 코드
  • 파이썬 드라이버 GUI파이썬
    #!/usr/bin/env python## Linux, BSD 또는 Mac OSX의 경우 이 스크립트에서 chmod +x를 실행하여 실행 파일로 만들 수 있습니다.############# Rover control app## Scott Beasley 작성 - 2015# 사용 또는 수정이 무료입니다. 즐기세요.############import sysimport serialimport timefrom Tkinter import *import tkFontimport tkMessageBox# 응용 프로그램 클래스용 창 만들기 App(Frame):# 창 만들기 def createWidgets(self):self.connected =False self.message =StringVar ( ) # 그리퍼 설정 버튼을 위한 작은 글꼴을 만듭니다. helv6 =tkFont.Font (패밀리 ='헬베티카', 사이즈 =6, 무게 ='보통') self.frame =프레임(self.master) self.frame.pack( ) self.f1 =프레임(self.frame) self .l1 =레이블(self.f1, 텍스트 ="통신 포트:") self.l1.pack(측면 =LEFT) self.comm_entry =항목(self.f1, bd =5, 이름 ="comm_entry") self.comm_entry .pack(측면 =LEFT) self.connectButton =버튼(self.f1, 텍스트 ="연결", 명령 =self.SerialConnect, 이름 ="b_connect") self.connectButton.pack(측면 =LEFT) self.disconnectButton =버튼 (self.f1, 텍스트 ="연결 끊기", 명령 =self.SerialDisconnect, 이름 ="b_disconnect") self.disconnectButton.pack(측면 =오른쪽) self.f1.grid(행 =0, 열 =0) self.f2 =LabelFrame(self.frame, bd =3, 양각 ="groove", text="Ground Control") self.g_vert_fm =프레임(self.f2) self.grip_vert =축척(self.g_vert_fm, from_ =0, to =180) self.grip_vert.grid (행 =0, 열 =0, 행 스팬 =4, 고정 =W) self.grip_vert_set =버튼 (self.g_vert_fm, 텍스트 ="설정", 명령 =self.GripperY, 이름 ="b_grip_vert_set", 너비 =1, 높이 =2, 글꼴 =helv6) self.grip_vert_set.grid (행 =5, 열 =0, 고정 =W) self.master.bind ("", self.GripperY) 자체. g_vert_fm.grid (row =0, column =0, rowspan =4,sticky =W) self.leftforwardButton =Button (self.f2, text ="\\", command =self.TurnLeft45, name ="b_left_forward") self .leftforwardButton.grid(행 =0, 열 =1) self.master.bind("", self.TurnLeft45) self.leftButton =버튼(self.f2, 텍스트 ="<", 명령 =self.TurnLeft, 이름 ="b_left") self.leftButton.grid(행 =1, 열 =1) self.master.bind("
    ", self.TurnLeft ) self.rightforwardButton =버튼(self.f2, 텍스트 ="/", 명령 =self.TurnRight45, 이름 ="b_right_forward") self.rightforwardButton.grid(행 =0, 열 =3) self.master.bind(" 
    ", self.TurnRight45) self.haltButton =버튼(self.f2, text ="Halt!", 명령 =self.Halt, 이름 ="b_halt") self.haltButton .grid(행 =1, 열 =2) self.master.bind("", self.Halt) self.rightButton =버튼(self.f2, text=">", 명령 =self.TurnRight, 이름 ="b_right") self.rightButton.grid( 행 =1, 열 =3) self.master.bind("
    ", self.TurnRight) self.upButton =버튼(self.f2, text="^", 명령 =self.Forward, 이름 ="b_forward") self.upButton.grid(행 =0, 열 =2) self.master.bind("
    ", self.Forward) self.leftdownButton =버튼(self.f2, 텍스트 ="/", 명령 =self.TurnRight45, 이름 ="b_left_down") self.leftdownButton.grid(행 =2, 열 =1) self.downButton =버튼(self. f2, text="V", command=self.Reverse, 이름 ="b_reverse") self.downButton.grid(행=2, 열=2) self.master.bind("
    ", self.Reverse) self.f2.grid(행 =1, 열 =0, 패디 =25) self.rightdownButton =버튼(self.f2, 텍스트 ="\\", 명령 =self.TurnLeft45, name ="b_right_down") self.rightdownButton.grid(행 =2, 열 =3) self.g_horz_fm =프레임(self.f2) self.grip_horz =축척(s elf.g_horz_fm, from_ =0, to =180, orient =HORIZONTAL) self.grip_horz.grid (row =0, column =0, columnspan =7,sticky =E) self.grip_horz_set =버튼(self.g_horz_fm, text ="설정", 명령 =self.GripperX, 이름 ="b_grip_horz_set", 너비 =1, 높이 =2, 글꼴 =helv6) self.grip_horz_set.grid (행 =0, 열 =8) self.master.bind ("", self.GripperX) self.g_horz_fm.grid(행 =4, 열 =0, 열 범위 =7, 고정 =E) self.master.bind("
    ", self.GripperHome) self.f3 =프레임(self.frame) self.l2 =레이블(self.f3, text ="마지막 작업:") self.l2.pack(측면 =LEFT) self.l3 =Label (self.f3, text=" ", textvariable =self.message) self.l3.pack (side =RIGHT) self.f3.grid (row =3, column =0, pady =8) # 봇 제어 버튼의 상태를 설정합니다. 연결되면 활성화, # 그렇지 않으면 비활성화됩니다. def CtrlButtonsState (self, bstate):self.leftforwardButton.config (state =bstate) self.leftButton.config (state =bstate) self.rightforwardButton.config (state =bstate) self.rightButton.config (state =bstate) self. upButton.config (상태 =bstate) self.leftdownButton.config (상태 =bstate) self.downButton.config (상태 =bstate) self.rightdownButton.config (상태 =bstate) self.haltButton.config (상태 =bstate) self. disconnectButton.config (state =bstate) self.grip_horz.config (state =bstate) self.grip_vert.config (state =bstate) self.grip_horz_set.config (state =bstate) self.grip_vert_set.config (state =bstate) # 설정 통신 포트 항목의 상태입니다. 연결되지 않을 때 활성화, # 봇이 연결되면 비활성화됩니다. def ConnCtrlsState (self, bstate):self.connectButton.config (state =bstate) self.comm_entry.config (state =bstate) # comm entry 필드에 입력한 comm 포트에 연결합니다. def SerialConnect (self):try:# 여기에서 전송 속도를 변경하십시오. if diffrent then 9600 self.ser =serial.Serial (self.comm_entry.get ( ), 9600) except IOError:tkMessageBox.showerror ("Invalid comm port", " 통신 포트를 찾을 수 없습니다.") return self.ConnCtrlsState (DISABLED) self.CtrlButtonsState (NORMAL) self.message.set ("SerialConnect") self.connected =True time.sleep (3) # 연결이 일어나기 위해 잠시 기다리세요 # 봇에서 연결을 끊습니다(통신 포트를 닫습니다). def SerialDisconnect (self):try:# 봇이 여전히 움직이고 있는 경우를 대비하여 Halt 명령을 보냅니다. self.send_cmd ('h', "Halt!") time.sleep (1) self.ser.close ( ) IOError 제외:print "Could not close port..." self.message.set ("SerialDisconnect") self .ConnCtrlsState (NORMAL) self.CtrlButtonsState (DISABLED) self.connected =False time.sleep (2) # 연결이 끊길 때까지 잠시 기다리십시오 # 열린 통신 포트로 명령을 보냅니다 def send_cmd (self, action, msg):if self.connected ==True:for val in action:self.ser.write (val) self.ser.flush ( ) self.message.set (msg) # 봇에게 좌회전 명령을 보냅니다. def TurnLeft (self, event =None):self.send_cmd ('a', "Left") # 봇에게 좌회전 명령을 보냅니다. def TurnLeft45 (self, event =None):self.send_cmd ('q', "Left45") # 봇에게 우회전 명령을 보냅니다. def TurnRight (self, event =None):self.send_cmd ('s', "Right") # 봇에게 우회전 명령을 보냅니다. def TurnRight45 (self, event =None):self.send_cmd ('e', "Right45") # 봇에게 Forward 명령을 보냅니다. def Forward (self, event =None):self.send_cmd ('w', "Up") # 봇에게 역방향 명령을 보냅니다. def Reverse (self, event =None):self.send_cmd ('z', "Down") # 봇에 Halt 명령을 보냅니다. def Halt (self, event =None):self.send_cmd ('h', "Halt!") # 그리퍼(X)를 설정합니다. def GripperX (self, event =None):# 슬라이더 컨트롤을 읽고 봇 컨트롤러에 값을 보냅니다. # 참고:0은 완전히 닫혀 있고 180은 완전히 열려 있습니다. grp_change =('>', chr (self. grip_horz.get ( )), chr (255)) self.send_cmd (grp_change, "Gripper X") # 그리퍼 Y를 설정합니다. def GripperY (self, event =None):# 슬라이더 컨트롤을 읽고 값을 봇 컨트롤러 # 참고:0은 위쪽이고 180은 아래쪽입니다. grp_change =('^', chr (self.grip_vert.get ( )), chr (255)) self.send_cmd (grp_change, "Gripper Y ") # 그리퍼를 "홈" 위치로 설정합니다. def GripperHome (self, event =None):self.send_cmd (('c', chr (255)), "Gripper Home") def __init__ (self, master =None):Frame.__init__ (self, master) self. pack ( ) self.createWidgets ( ) self.CtrlButtonsState (DISABLED)# GUI (Tk)를 시작한 다음 앱의 크기와 제목을 지정합니다. windowdef main ( ):root =Tk ( ) root.geometry ("450x350") root.wm_title ( "로버 제어 센터(RCC)") 앱 =앱(마스터 =루트) app.mainloop( )if __name__ =='__main__':메인( )
    로버 코드Arduino
    /* 블루투스 로버. 인생의 목표는... 공중을 통해 마법처럼 보내진 명령을 따르십시오! 또는 USB에서 :) 작성:Scott Beasley - 2015 사용 또는 수정이 무료입니다. 즐기십시오.*//* L9110S 라이브러리를 사용합니다. L9110S h 브리지와 함께 작동합니다. https://github.com/jscottb/L9110Driver에서 다운로드하거나 https://github.com에서 zip을 복제하여 아카이브 파일 이름에서 '-master'를 제거하여 라이브러리를 추가합니다.*/#include  #include #define SERVO_Y 2 // 핀 그리퍼 Y 서보#define SERVO_CLAW 7 // 핀 그리퍼 그리퍼 서보#define pinAIN1 5 // I1 인터페이스 정의#define pinAIN2 6 // I2 인터페이스 정의#define pinBIN1 3 / / I3 인터페이스 정의#define pinBIN2 11 // I4 인터페이스 정의// 속도 정의#define MAXFORWARDSPEED 225 // 앞으로 나아가고자 하는 최대 속도#define MAXBACKWARDSPEED 225 // 최대 역방향 속도#define TOPSPEED 255 // 더 잘 켜도록 돕기 위해 사용 카페트와 거친 표면.// 운전 및 서보에 사용되는 다양한 시간 지연#define TURNDELAY 475#define TURNDELAY45 235#define BACKUPDELAY 400#define SERVOMOVEDELAY 200#define SERVOSEARCHDELAY 85/* 모터, 서보 개체 생성 L9110_Motor motor_left와 인터페이스하기 위해(pinAIN1, pinAIN2); // 왼쪽 모터 객체 생성L9110_Motor motor_right (pinBIN1, pinBIN2); // 오른쪽 모터 objectServo 생성 그립_y_servo; // 그리퍼 Y axisServo에 대한 서보 객체 생성 grip_servo; // 그리퍼 clawvoid 설정을 위한 서보 객체 생성( ){ // 전송 속도가 9600과 다를 경우 여기에서 변경합니다. Serial.begin (9600); 그립_y_servo.attach(SERVO_Y); // 서보 부착 SERVO_LR 그립_y_servo.write (90); 그립_서보.부착(SERVO_CLAW); // 서보 부착 SERVO_LR grip_servo.write (90); 지연(500);} 무효 루프( ){ 바이트 명령 =0, val =0; if (Serial.available ( )> 0) { // 들어오는 명령 바이트 읽기 command =Serial.read ( ); } 스위치(명령어) { case 'w':go_forward( ); //Serial.println("앞으로"); 부서지다; 케이스 'z':go_backward( ); //Serial.println("뒤로가기"); 부서지다; 케이스 'a':go_left( ); 지연(TURNDELAY); 정지( ); //Serial.println("좌회전"); 부서지다; case 's':go_right( ); 지연(TURNDELAY); 정지( ); //Serial.println("우회전"); 부서지다; 경우 'q':go_left( ); 지연(TURNDELAY45); 정지( ); //Serial.println("좌회전"); 부서지다; '케이스':go_right( ); 지연(TURNDELAY45); 정지( ); //Serial.println("우회전"); 부서지다; case 'h':정지( ); //Serial.println("중단"); 부서지다; case '>':// 그리퍼 X 이동은 서보 설정 값을 전송합니다. val =Serial.read( ); // 값을 설정의 실제 이동 제한으로 제한합니다. grip_servo.write (constrain (val, 64, 179)); //Serial.println("GripperX"); 부서지다; case '^':// 그리퍼 Y 이동이 서보 설정 값을 전송합니다. val =Serial.read( ); // 값을 설정의 실제 이동 제한으로 제한합니다. grip_y_servo.write (constrain (val, 53, 179)); //Serial.println("그리퍼Y"); 부서지다; case 'c':// 값을 설정의 실제 이동 제한으로 제한합니다. grip_y_servo.write (90); 그립_서보.쓰기(90); //Serial.println("그리퍼홈"); 부서지다; case 255:// 모든 그리퍼 명령 이후에 전송됨 Serial.flush ( ); 부서지다; } 직렬.플러시( ); delay(125);}void go_forward( ){ //Serial.println("앞으로..."); // 모터를 속도까지 올립니다. // 일부 표면에서 회전하는 데 도움이 되고 GM의 ramp_it에서 도자기 및 용기 무게 측정을 지원합니다(MAXFORWARDSPEED, FORWARD, FORWARD). // 램프 마지막 vat가 전부가 아닌 경우를 대비하여 모든 설정 속도로 설정합니다. // motor_left.setSpeed(MAXFORWARDSPEED); motor_right.setSpeed(MAXFORWARDSPEED); motor_left.run (FORWARD|RELEASE); motor_right.run(FORWARD|RELEASE);}void go_backward( ){ //Serial.println("뒤로가는 중..."); // 모터를 속도까지 올립니다. // 일부 표면에서 회전하는 데 도움이 되고 GM의 ramp_it에서 도자기 및 용기 무게 측정을 지원합니다(MAXBACKWARDSPEED, BACKWARD, BACKWARD). // 램프 마지막 vat가 전부가 아닌 경우를 대비하여 모든 설정 속도로 설정합니다. // motor_left.setSpeed(MAXBACKWARDSPEED); motor_right.setSpeed(MAXBACKWARDSPEED); motor_left.run (BACKWARD|RELEASE); motor_right.run(BACKWARD|RELEASE);}void go_left( ){ //Serial.println("왼쪽으로 갑니다..."); // 모터를 속도까지 올립니다. // 일부 표면에서 회전하는 데 도움이 되고 GM의 ramp_it에서 도자기 및 용기 무게 측정을 지원합니다(TOPSPEED, BACKWARD, FORWARD). // 램프 마지막 vat가 전부가 아닌 경우를 대비하여 모든 설정 속도로 설정합니다. // motor_left.setSpeed ​​(TOPSPEED); motor_right.setSpeed ​​(TOPSPEED); motor_left.run (BACKWARD|RELEASE); motor_right.run(FORWARD|RELEASE);}void go_right( ){ //Serial.println("오른쪽으로 진행 중..."); // 모터를 속도까지 올립니다. // 일부 표면에서 회전하는 데 도움이 되고 GM의 ramp_it에서 도자기 및 용기 무게 측정(TOPSPEED, FORWARD, BACKWARD); // 램프 마지막 vat가 전부가 아닌 경우를 대비하여 모든 설정 속도로 설정합니다. // motor_left.setSpeed ​​(TOPSPEED); motor_right.setSpeed ​​(TOPSPEED); motor_left.run (FORWARD|RELEASE); motor_right.run (BACKWARD|RELEASE);}void 정지( ){ //Serial.println("Halt!"); //ramp_it(0, BRAKE, BRAKE); motor_left.setSpeed(0); motor_right.setSpeed(0); motor_left.run(브레이크); motor_right.run (BRAKE);} void 램프_it (uint8_t 속도, uint8_t lf_dir, uint8_t rt_dir){ uint8_t ramp_val =0, step_val =0; step_val =abs (속도 / 4); if (! 속도) step_val =-step_val; for (uint8_t i =0; i <4; i++) { 램프_val +=step_val; motor_left.setSpeed(ramp_val); motor_right.setSpeed(ramp_val); motor_left.run (lf_dir|RELEASE); motor_right.run (rt_dir|RELEASE); 지연(25); }}
    L9110 드라이버
    Arduino용 L9110 모터 드라이버https://github.com/jscottb/L9110Driver

    맞춤형 부품 및 인클로저

    4wdgripperbt2.fzz

    회로도

    4wdgripperbt2.fzz

    제조공정

    1. 다중 온도 센서
    2. 862D+용 DIY 납땜 인두 제어
    3. 모션센스
    4. 3D 프린터 화재 안전
    5. Arduino 반발 전자기 부상
    6. Arduino 기반 날씨 풍선 데이터 로거
    7. ArduFarmBot - 2부:IoT 구현과 원격 스테이션
    8. CoroFence - 열 감지기🖖
    9. 클라우드 모니터링, 원격 제어 시스템
    10. 원격 생산 제어의 5가지 장점