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

첫 Arduino 로봇 만들기 - 최고의 초보자 안내서!

구성품 및 소모품

Arduino UNO
× 1
Adafruit L293D 모터 실드
저가 장치이며 사용하기 쉽습니다. 이전 기술이 필요하지 않은 일반적으로 사용 가능한 모터 실드입니다. Adafruit 라이브러리를 사용하여 쉽게 프로그래밍할 수도 있습니다.
× 1
HC-SR4 초음파 센서
× 1
HC-05 블루투스 모듈
× 1
기어드 모터
× 2
× 2
캐스터 휠
× 2
9V 배터리(일반)
× 3
9V 배터리 클립
× 3
암/암 점퍼 와이어
× 8
플라스틱 상자
× 1

필요한 도구 및 기계

납땜 인두(일반)
뜨거운 글루건(일반)
나사 드라이버

앱 및 온라인 서비스

블루투스 전자 제품
Arduino IDE
Adafruit-Motor-Shield 라이브러리

이 프로젝트 정보

Arduino의 초보자이고 첫 번째 로봇을 만들 계획이 있다면 여기 튜토리얼이 있습니다. 오늘 구축할 이미지를 살펴보세요.

이 튜토리얼에서는 다양한 기능을 가진 아두이노 로봇을 만드는 방법을 보여줄 것입니다. 우리는 장애물 회피, 벽 추종자 및 미로 해결 기능이 있는 스마트폰 제어 로봇을 중심으로 다양한 기능에 대해 서로 다른 프로그램의 사용을 배울 수 있습니다. 또는 단일 기능으로만 만들 수도 있습니다.

재료 및 도구

2단계:섀시 만들기

모터용 구멍 2개 뚫기:

두 개의 모터 연결:

캐스터 휠용 구멍 3개 만들기:

캐스터 휠 연결:

정확한 직경을 측정 및 표시한 후 상자 양쪽에 모터 연결용 구멍 2개와 캐스터 휠 연결용 구멍 3개 하단을 만드십시오. 그런 다음 모터와 캐스터를 설치합니다.

배터리

배터리 연결.

연결 다이어그램.

상자 안에 배터리를 붙입니다.

캐스터 위의 상자 안에 2개의 9볼트 배터리를 장착합니다. 그런 다음 위 그림과 같이 병렬로 배선하고 스위치를 연결합니다.

Arduino와 모터 실드 연결

Arduino 위에 모터 실드를 부착합니다.

배터리 전선을 PWR 에 연결합니다. 모터 실드 단자.

모터를 모터 실드에 연결합니다.

이 포트에서 점퍼를 제거하십시오.

Arduino 위에 모터 실드를 연결하고 배터리 위에 놓습니다. 그런 다음 모터와 배터리의 전선을 모터 실드에 연결합니다. 연결도는 매우 중요하므로 연결하기 전에 확인하십시오.

배선 지침:

<울>
  • 왼쪽 모터를 모터 실드의 "M1"에 연결
  • <울>
  • 오른쪽 모터를 모터 실드의 "M3"에 연결
  • <울>
  • 배터리의 전선을 모터 실드의 "ext pwr"에 연결
  • 두 개의 구멍을 만들고 Arduino에 전원을 공급하세요.

    구멍을 뚫을 지점을 표시하십시오.

    구멍을 만드십시오.

    배터리 클립을 DC 수 잭에 연결하고 9V 배터리에 연결합니다.

    이 9볼트 배터리를 상자 안에 넣습니다.

    Arduino의 USB 포트와 DC 입력 포트에 접근하기 위한 두 개의 구멍을 만드십시오. 다른 9볼트 배터리를 가져와 배터리 클립을 DC 수 잭 어댑터에 연결한 다음 DC 수 잭을 Arduino DC 입력 포트에 연결하여 Arduino에 전원을 공급합니다. 그런 다음 상자 안에 있는 모터와 Arduino 사이에 배터리를 넣습니다.

    블루투스 모듈과 스위치 연결

    연결 다이어그램과 같이 Bluetooth 모듈을 Arduino에 연결하고 상자 안에 넣습니다. 그런 다음 상자 뒷면에 스위치를 장착할 구멍을 만들고 스위치를 연결합니다(여기서는 납땜 문제로 인해 이전에 사용했던 스위치를 변경했습니다).

    블루투스 모듈의 배선 지침:

    <울>
  • Bluetooth 모듈의 "TX"가 Arduino의 "RX"로 이동
  • <울>
  • Bluetooth 모듈의 "RX"가 Arduino의 "TX"로 이동
  • <울>
  • Bluetooth 모듈의 "VCC"가 Arduino의 "5v"로 이동
  • <울>
  • Bluetooth 모듈의 "GND"가 Arduino의 "GND"로 이동
  • <울>
  • BT 모듈의 상태 및 키 핀은 사용하지 않은 상태로 유지됩니다.
  • 전체 회로도

    센서 초음파 장착

    초음파 센서를 가지고 작은 'L'자 모양의 플라스틱 조각을 그것에 붙이고 플라스틱 상자 위에 붙입니다(또는 접착제 스틱이 없는 경우 양면 테이프 사용). 그런 다음 위의 회로도와 같이 점퍼선을 연결합니다.

    초음파 센서의 배선 지침:

    <울>
  • 초음파 센서의 "VCC"가 Arduino의 "+5"로 이동
  • <울>
  • 초음파 센서의 "GND"가 Arduino의 "GND"로 이동
  • <울>
  • 초음파 센서의 "Trig" 핀이 Arduino의 "아날로그 핀 1"에 연결됨
  • <울>
  • 초음파 센서의 "에코" 핀이 Arduino의 "아날로그 핀 0"으로 이동
  • 이제 모든 연결이 완료되었으며 프로그래밍할 시간입니다.

    마지막 단계 - Arduino 코드 및 Bluetooth 앱 편집

    "최종 스케치 업로드 " 코드 섹션에 제공됩니다. 오류가 발생하면 AFmotor 라이브러리를 설치했는지 확인하세요.

    이제 우리는 Arduino를 쉽게 프로그래밍하는 방법을 배웠습니다. 여기에서 이 로봇을 장애물 회피 로봇, 벽 추종자 및 Bluetooth 제어로 작동시키는 몇 가지 프로그램을 보여 주었습니다. 그리고 마침내 이 세 가지 기능을 함께 결합했습니다. 자세한 내용과 정보를 보려면 동영상을 시청하십시오.

    블루투스 앱 시작하기

    벽 추종자 및 장애물 회피와 함께하는 재미

    여기에서 내 블로그를 방문하십시오. -robotechmaker.com

    질문이나 제안 사항이 있으면 아래에 의견을 말하십시오.

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

    코드

    <울>
  • 블루투스(제어 로봇) 스케치
  • 최종 스케치(최종 코드)
  • 장애물 회피 스케치
  • 벽 추종자 스케치
  • 블루투스(제어 로봇) 스케치Arduino
    /*저자:Marcelo Moraes 이 프로젝트에는 공개 도메인 코드가 포함되어 있습니다. 예고 없이 수정이 허용됩니다. *///라이브러리#include //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 1번 모터 생성, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 모터 #3 생성, 64KHz pwm//상수 및 변수char dataIn ='S';char determinant;char det;int vel =0; //Bluetooth Stuffvoid setup() { Serial.begin(9600); // 9600bps로 직렬 라이브러리 설정 //초기화 메시지 Serial.println("ArduinoBymyself - ROVERBot"); Serial.println(" AF 모터 테스트!"); //모터 끄기 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(릴리스); motorLeft.run(RELEASE); } 무효 루프() { det =체크(); // 시리얼 코드를 얻기 위해 check() 서브로틴을 호출 // 시리얼 코드 분석 switch (det){ case 'F':// F, 앞으로 이동 motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'B':// B, 뒤로 이동 motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'L':// L, 바퀴를 왼쪽으로 이동합니다. motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'R':// R, 휠을 오른쪽으로 이동합니다. motorRight.setSpeed(vel/4); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'I':// 나, 우회전 motorRight.setSpeed(vel/2); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'J':// J, 우회전 motorRight.setSpeed(vel/2); motorLeft.setSpeed(벨); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'G':// G, 좌회전 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'H':// H, 좌회전 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'S':// S, stop motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(릴리스); motorLeft.run(RELEASE); det =체크(); 부서지다; }}//직렬 포트에서 수신된 블루투스 코드 가져오기 check(){ if (Serial.available()> 0){// 직렬 포트에 유효한 데이터가 있는 경우 dataIn =Serial.read();// 데이터를 다음 위치에 저장 a varialbe //코드 확인 if (dataIn =='F'){//Forward determinant ='F'; } else if (dataIn =='B'){//역방향 행렬식 ='B'; } else if (dataIn =='L'){//왼쪽 행렬식 ='L'; } else if (dataIn =='R'){//오른쪽 행렬식 ='R'; } else if (dataIn =='I'){//앞으로 오른쪽 결정자 ='I'; } else if (dataIn =='J'){//오른쪽 후진 행렬식 ='J'; } else if (dataIn =='G'){//좌측 정방향 행렬식 ='G'; } else if (dataIn =='H'){//좌측 후진 행렬식 ='H'; } else if (dataIn =='S'){//중지 행렬식 ='S'; } else if (dataIn =='0'){//속도 0 vel =0; } else if (dataIn =='1'){//속도 25 vel =25; } else if (dataIn =='2'){//속도 50 vel =50; } else if (dataIn =='3'){//속도 75 vel =75; } else if (dataIn =='4'){//속도 100 vel =100; } else if (dataIn =='5'){//속도 125 vel =125; } else if (dataIn =='6'){//속도 150 vel =150; } else if (dataIn =='7'){//속도 175 vel =175; } else if (dataIn =='8'){//속도 200 vel =200; } else if (dataIn =='9'){//속도 225 vel =225; } else if (dataIn =='q'){//속도 255 vel =255; } else if (dataIn =='U'){//백라이트 켜짐 결정자 ='U'; } else if (dataIn =='u'){//백 라이트 끄기 결정자 ='u'; } else if (dataIn =='W'){//전면 조명 켜짐 결정자 ='W'; } else if (dataIn =='w'){//전면 조명 끄기 결정자 ='w'; } else if (dataIn =='V'){//Horn On determinant ='V'; } else if (dataIn =='v'){//혼 오프 결정자 ='v'; } else if (dataIn =='X'){//Extra On determinant ='X'; } else if (dataIn =='x'){//Extra Off 행렬식 ='x'; } } 반환 결정자;}
    최종 스케치(최종 코드)Arduino
    /*저자:Muhammed Azharvisit - robotechmaker.com*/#include #define trigPin 14 // 센서 핀 정의#define echoPin 15 //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 1번 모터 생성, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 모터 #3 생성, 64KHz pwm//상수 및 변수char dataIn ='S';char determinant;char det;int vel =255; //Bluetooth Stuffvoid setup() { Serial.begin(9600); // 직렬 라이브러리를 9600bps로 설정 pinMode(trigPin, OUTPUT);// trig 핀을 출력으로 설정(음파 보내기) pinMode(echoPin, INPUT);// 에코 핀을 입력으로 설정(음파 수신) / /초기화 메시지 Serial.println(" Mr.robot"); Serial.println(" 출근하세요!"); //모터 끄기 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(릴리스); motorLeft.run(RELEASE);} 무효 루프() { det =check(); // 시리얼 코드를 얻기 위해 check() 서브로틴을 호출 // 시리얼 코드 분석 switch (det){ case 'F':// F, 앞으로 이동 motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'B':// B, 뒤로 이동 motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'L':// L, 바퀴를 왼쪽으로 이동합니다. motorRight.setSpeed(vel); motorLeft.setSpeed(vel/4); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'R':// R, 휠을 오른쪽으로 이동합니다. motorRight.setSpeed(vel/4); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'I':// 나, 우회전 motorRight.setSpeed(vel/2); motorLeft.setSpeed(벨); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'J':// J, 우회전 motorRight.setSpeed(vel/2); motorLeft.setSpeed(벨); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'G':// G, 좌회전 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(앞으로); motorLeft.run(앞으로); det =체크(); 부서지다; case 'H':// H, 좌회전 motorRight.setSpeed(vel); motorLeft.setSpeed(vel/2); motorRight.run(뒤로); motorLeft.run(뒤로); det =체크(); 부서지다; case 'S':// S, stop motorRight.setSpeed(vel); motorLeft.setSpeed(벨); motorRight.run(릴리스); motorLeft.run(RELEASE); det =체크(); 부서지다; case '''://벽 추종자 로봇용. motorRight.setSpeed(벨); //모터의 속도를 0-255 사이로 설정합니다. motorLeft.setSpeed ​​(vel); 긴 기간, 거리; // 스캔 시작 digitalWrite(trigPin, LOW); 지연 마이크로초(2); // 성공적인 센서 작동을 위해서는 지연이 필요합니다. digitalWrite(trigPin, HIGH); 지연마이크로초(10); //이 지연도 필요합니다! digitalWrite(trigPin, LOW); 지속 시간 =pulseIn(echoPin, HIGH); 거리 =(지속 시간/2) / 29.1; // 거리를 센티미터로 변환합니다. if (distance <30)/*벽과 유지해야 하는 거리 */ { Serial.println("벽이 감지되었습니다!" );Serial.println(" 벽을 따라 시작됨 ");Serial.println(" 돌고 있어!"); motorRight.setSpeed(벨); motorLeft.setSpeed(0); motorRight.run(앞으로); motorLeft.run(RELEASE); 지연(500); // 1초 동안 기다립니다. else { Serial.println("벽이 감지되지 않습니다. 회전합니다."); 지연(15); motorRight.setSpeed(0); motorLeft.setSpeed(벨); motorRight.run(릴리스); motorLeft.run(앞으로); } 부서지다; case 'b'://장애물 회피 로봇 motorRight.setSpeed(vel); //모터의 속도를 0-255 사이로 설정합니다. motorLeft.setSpeed ​​(vel); 긴 지속 시간, 거리; // 스캔 시작 digitalWrite(trigPin, LOW); 지연 마이크로초(2); // 성공적인 센서 작동을 위해서는 지연이 필요합니다. digitalWrite(trigPin, HIGH); 지연마이크로초(10); //이 지연도 필요합니다! digitalWrite(trigPin, LOW); 지속 시간 =pulseIn(echoPin, HIGH); 거리 =(Aduration/2) / 29.1;// 거리를 센티미터로 변환합니다. if (Adistance <25)/*25센티미터 앞에 장애물이 있는 경우 다음을 수행합니다. */ { Serial.println("Close Obstacle detected!" );Serial.println("장애물 세부정보:");Serial.print ("Distance From Robot is " );Serial.print ( Adistance);Serial.print ( " CM!");// 거리를 센티미터 단위로 출력합니다.Serial.println (" 장애물은 근거리로 인해 위협으로 선언되었습니다. . ");Serial.println("돌아가는 중!"); motorRight.setSpeed(벨); motorLeft.setSpeed(벨); motorLeft.run(뒤로); // 앞에 장애물이 있는 한 회전합니다. motorRight.run(FORWARD);} else { Serial.println("장애물이 감지되지 않았습니다. 앞으로 진행 중입니다."); 지연(15); motorRight.setSpeed(벨); motorLeft.setSpeed(벨); motorRight.run(앞으로); //앞에 장애물이 없다면 Go Forward! motorLeft.run(앞으로); } 부서지다; }}//직렬 포트에서 수신된 블루투스 코드 가져오기 check(){ if (Serial.available()> 0){// 직렬 포트에 유효한 데이터가 있는 경우 dataIn =Serial.read();// 데이터를 다음 위치에 저장 a varialbe // 코드 확인 if (dataIn =='F'){//Forward determinant ='F'; } else if (dataIn =='B'){//역방향 행렬식 ='B'; } else if (dataIn =='L'){//왼쪽 행렬식 ='L'; } else if (dataIn =='R'){//오른쪽 행렬식 ='R'; } else if (dataIn =='I'){//앞으로 오른쪽 결정자 ='I'; } else if (dataIn =='J'){//오른쪽 후진 행렬식 ='J'; } else if (dataIn =='G'){//좌측 정방향 행렬식 ='G'; } else if (dataIn =='H'){//좌측 후진 행렬식 ='H'; } else if (dataIn =='S'){//중지 행렬식 ='S'; } else if (dataIn =='0'){//속도 0 vel =0; } else if (dataIn =='1'){//속도 25 vel =25; } else if (dataIn =='2'){//속도 50 vel =50; } else if (dataIn =='3'){//속도 75 vel =75; } else if (dataIn =='4'){//속도 100 vel =100; } else if (dataIn =='5'){//속도 125 vel =125; } else if (dataIn =='6'){//속도 150 vel =150; } else if (dataIn =='7'){//속도 175 vel =175; } else if (dataIn =='8'){//속도 200 vel =200; } else if (dataIn =='9'){//속도 225 vel =225; } else if (dataIn =='b'){//Extra On determinant ='b'; } else if (dataIn =='m'){//Extra On 행렬식 ='m'; } } 반환 결정자;}
    장애물 회피 스케치Arduino
    /*저자:Muhammed Azharvisit - robotechmaker.com*/#include #define trigPin 14 // 센서 핀 정의#define echoPin 15 int vel =255; // 로봇의 속도//ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 1번 모터 생성, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 3번 모터 생성, 64KHz pwmvoid setup() { Serial.begin(9600); // 직렬 라이브러리를 9600bps로 설정 pinMode(trigPin, OUTPUT);// trig 핀을 출력으로 설정(음파 보내기) pinMode(echoPin, INPUT);// 에코 핀을 입력으로 설정(음파 수신) / /초기화 메시지 Serial.println(" Mr.robot"); Serial.println(" 출근하세요!"); //모터 끄기 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(릴리스); motorLeft.run(RELEASE);}void loop() { //장애물 회피 로봇 motorRight.setSpeed(vel); //모터의 속도를 0-255 사이로 설정합니다. motorLeft.setSpeed ​​(vel); 긴 기간, 거리; // 스캔 시작 digitalWrite(trigPin, LOW); 지연 마이크로초(2); // 성공적인 센서 작동을 위해서는 지연이 필요합니다. digitalWrite(trigPin, HIGH); 지연마이크로초(10); //이 지연도 필요합니다! digitalWrite(trigPin, LOW); 지속 시간 =pulseIn(echoPin, HIGH); 거리 =(지속 시간/2) / 29.1; // 거리를 센티미터로 변환합니다. if (distance <25)/*25센티미터 앞에 장애물이 있는 경우 다음을 수행합니다. */ { Serial.println("Close Obstacle detected!" );Serial.println("장애물 세부정보:");Serial.print ("Distance From Robot is " );Serial.print ( distance);Serial.print ( " CM!");// 거리를 센티미터 단위로 출력합니다.Serial.println (" 장애물은 근거리로 인해 위협이 된다고 선언되었습니다. . ");Serial.println("돌아가는 중!"); motorRight.setSpeed(벨); motorLeft.setSpeed(벨); motorLeft.run(뒤로); // 앞에 장애물이 있는 한 회전합니다. motorRight.run(FORWARD);} else { Serial.println("장애물이 감지되지 않았습니다. 앞으로 진행 중입니다."); 지연(15); motorRight.setSpeed(벨); motorLeft.setSpeed(벨); motorRight.run(앞으로); //앞에 장애물이 없다면 Go Forward! motorLeft.run(앞으로); } } 
    벽 추종자 스케치Arduino
    /*저자:Muhammed Azharvisit - robotechmaker.com*/#include #define trigPin 14 // 센서 핀 정의#define echoPin 15 int vel =255; // 로봇의 속도 //ObjectsAF_DCMotor motorRight(1, MOTOR12_64KHZ); // 1번 모터 생성, 64KHz pwmAF_DCMotor motorLeft(3, MOTOR12_64KHZ); // 3번 모터 생성, 64KHz pwmvoid setup(){ Serial.begin(9600); // 직렬 라이브러리를 9600bps로 설정 pinMode(trigPin, OUTPUT);// trig 핀을 출력으로 설정(음파 보내기) pinMode(echoPin, INPUT);// 에코 핀을 입력으로 설정(음파 수신) / /초기화 메시지 Serial.println(" Mr.robot"); Serial.println(" 출근하세요!"); //모터 끄기 motorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(릴리스); motorLeft.run(RELEASE);}void loop(){ //벽 추종자 로봇용. motorRight.setSpeed(벨); //모터의 속도를 0-255 사이로 설정합니다. motorLeft.setSpeed(vel); 긴 기간, 거리; // 스캔 시작 digitalWrite(trigPin, LOW); 지연 마이크로초(2); // 성공적인 센서 작동을 위해서는 지연이 필요합니다. digitalWrite(trigPin, HIGH); 지연마이크로초(10); //이 지연도 필요합니다! digitalWrite(trigPin, LOW); 지속 시간 =pulseIn(echoPin, HIGH); 거리 =(지속 시간 / 2) / 29.1; // 거리를 센티미터로 변환합니다. if (distance <30)/*벽과 유지해야 하는 거리 */ { Serial.println("Wall is ditected!"); Serial.println(" 벽을 따라가기 시작했습니다 "); Serial.println("돌아갑니다!"); motorRight.setSpeed(벨); motorLeft.setSpeed(0); motorRight.run(앞으로); motorLeft.run(RELEASE); 지연(500); // 1초 동안 기다립니다. } else { Serial.println("벽이 감지되지 않았습니다. 회전합니다."); 지연(15); motorRight.setSpeed(0); motorLeft.setSpeed(벨); motorRight.run(릴리스); motorLeft.run(앞으로); }}

    회로도


    제조공정

    1. Raspberry Pi를 위한 최고의 액세서리
    2. 자산 추적 모범 사례:힘들게 번 자산 데이터를 최대한 활용하는 방법
    3. 지금 공급망을 최대한 활용하는 방법
    4. 멋진 실내 내비게이션용 로봇
    5. 모터 마운트 101:최고의 모터 마운트 재료 선택 가이드
    6. 최고의 산업 농산물에 대한 궁극적인 가이드
    7. 최고의 크레인 브랜드 가이드
    8. 기계 공장을 위한 최고의 3D 프린터 구매 가이드
    9. IoT 프로토타입을 구축하는 가장 좋은 방법
    10. CNC Wire EDM:작업장에서 가장 친한 친구