제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 2 | ||||
| × | 8 | ||||
| × | 8 |
|
몇 달 전 제 아들이 원격 제어 봇을 만들어 달라고 했습니다. 그는 그가 원하는 목록을 제게 주셨고 우리는 그것을 관리 가능한 목록으로 좁혔습니다 :) 이것이 제가 그를 위해 구축한 것입니다...
<울>이 프로젝트의 경우 섀시를 직접 만들 수도 있고 다른 섀시를 선택할 수도 있습니다. 선택은 여러분의 몫입니다.
1단계:필요한 소프트웨어
다운로드해야 할 항목:
<울>
2단계:하드웨어 BOM
필요한 부품은 다음과 같습니다.
<울>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단계 <울>
작업이 끝나면 두 개의 서보 와이어를 플랫 브래킷 구멍을 통해 봇 내부로 연결합니다.
자세한 내용과 참조는 사진을 참조하세요.
그림> 그림> 그림> 그림>
7단계:전자 장치 장착 <울>
8단계:배선 - 모터 <울>
이제 로봇 전면이 당신에게서 멀어지게 하고 왼쪽의 전선을 잡고 -
<울>오른쪽에 있는 전선을 잡고 -
<울>서보:
<울>
9단계:블루투스 모듈 배선 <울>
10단계:전원 추가
5 'aa'(또는 기타 6v 팩) 배터리 팩의 전원 리드를 센서 실드의 전원 나사 터미널에 연결합니다.
<울>
11단계:HC05/HC06 블루투스 모듈 구성
이제 OS의 "제어" 또는 "시스템" 패널에서 PC의 블루투스 장치 설정으로 이동하거나 Google을 사용하여 도움을 받아야 합니다.
가능한 OS 블루투스 설정 정보:
<울>할당된 직렬 포트 장치 이름 또는 번호를 기록해 두어야 합니다.
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도 및 45도 회전은 일시적입니다. 즉, 약간의 지연 후에 봇이 움직이는 것을 멈춥니다.
그리퍼 슬라이더는 봇에 그리퍼를 자동으로 설정하지 않습니다. 세트를 실제로 실행하려면 해당 "설정" 버튼이나 키를 눌러야 합니다.
슬라이더 값의 범위는 0-180입니다.
<울>프로그램 사용을 중지하려면 "연결 끊기" 버튼을 사용하십시오. 이렇게 하면 봇을 중지하고 그리퍼를 홈으로 이동하라는 명령이 전송됩니다.
#!/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__':메인( )
/* 블루투스 로버. 인생의 목표는... 공중을 통해 마법처럼 보내진 명령을 따르십시오! 또는 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); }}
제조공정
구성품 및 소모품 Arduino MKR1000 × 1 마이크로 레이싱 드론 × 1 커패시터 100μF × 4 저항 221옴 × 4 점퍼 와이어(일반) × 12 브레드보드(일반) × 1 Mindwave Neurosky × 1 필요한 도구 및 기계 납땜 인두(일반) Digilent 드라이버 앱 및 온라인 서비스 처리 3
구성품 및 소모품 SparkFun Arduino Pro Mini 328 - 5V/16MHz × 5 5 초음파 센서 × 5 Perfboard × 5 진동 모터 × 5 부저 × 5 5mm LED:빨간색 × 5 슬라이드 스위치 × 5 암컷 헤더 8 위치 1 행(0.1) × 2 남성 헤더 40 위치 1 행(0.1) × 2 점퍼 와이어(일반) × 4