제조공정
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 3 | |||
![]() |
| × | 8 | |||
| × | 1 |
![]() |
| |||
![]() |
| |||
|
| ||||
![]() |
| |||
|
Arduino의 초보자이고 첫 번째 로봇을 만들 계획이 있다면 여기 튜토리얼이 있습니다. 오늘 구축할 이미지를 살펴보세요.
이 튜토리얼에서는 다양한 기능을 가진 아두이노 로봇을 만드는 방법을 보여줄 것입니다. 우리는 장애물 회피, 벽 추종자 및 미로 해결 기능이 있는 스마트폰 제어 로봇을 중심으로 다양한 기능에 대해 서로 다른 프로그램의 사용을 배울 수 있습니다. 또는 단일 기능으로만 만들 수도 있습니다.
재료 및 도구
2단계:섀시 만들기
모터용 구멍 2개 뚫기:
두 개의 모터 연결:
캐스터 휠용 구멍 3개 만들기:
캐스터 휠 연결:
정확한 직경을 측정 및 표시한 후 상자 양쪽에 모터 연결용 구멍 2개와 캐스터 휠 연결용 구멍 3개 하단을 만드십시오. 그런 다음 모터와 캐스터를 설치합니다.
배터리
배터리 연결.
연결 다이어그램.
상자 안에 배터리를 붙입니다.
캐스터 위의 상자 안에 2개의 9볼트 배터리를 장착합니다. 그런 다음 위 그림과 같이 병렬로 배선하고 스위치를 연결합니다.
Arduino와 모터 실드 연결
Arduino 위에 모터 실드를 부착합니다.
배터리 전선을 PWR 에 연결합니다. 모터 실드 단자.
모터를 모터 실드에 연결합니다.
이 포트에서 점퍼를 제거하십시오.
Arduino 위에 모터 실드를 연결하고 배터리 위에 놓습니다. 그런 다음 모터와 배터리의 전선을 모터 실드에 연결합니다. 연결도는 매우 중요하므로 연결하기 전에 확인하십시오.
배선 지침:
<울>
두 개의 구멍을 만들고 Arduino에 전원을 공급하세요.
구멍을 뚫을 지점을 표시하십시오.
구멍을 만드십시오.
배터리 클립을 DC 수 잭에 연결하고 9V 배터리에 연결합니다.
이 9볼트 배터리를 상자 안에 넣습니다.
Arduino의 USB 포트와 DC 입력 포트에 접근하기 위한 두 개의 구멍을 만드십시오. 다른 9볼트 배터리를 가져와 배터리 클립을 DC 수 잭 어댑터에 연결한 다음 DC 수 잭을 Arduino DC 입력 포트에 연결하여 Arduino에 전원을 공급합니다. 그런 다음 상자 안에 있는 모터와 Arduino 사이에 배터리를 넣습니다.
블루투스 모듈과 스위치 연결
연결 다이어그램과 같이 Bluetooth 모듈을 Arduino에 연결하고 상자 안에 넣습니다. 그런 다음 상자 뒷면에 스위치를 장착할 구멍을 만들고 스위치를 연결합니다(여기서는 납땜 문제로 인해 이전에 사용했던 스위치를 변경했습니다).
블루투스 모듈의 배선 지침:
<울>
전체 회로도
센서 초음파 장착
초음파 센서를 가지고 작은 'L'자 모양의 플라스틱 조각을 그것에 붙이고 플라스틱 상자 위에 붙입니다(또는 접착제 스틱이 없는 경우 양면 테이프 사용). 그런 다음 위의 회로도와 같이 점퍼선을 연결합니다.
초음파 센서의 배선 지침:
<울>이제 모든 연결이 완료되었으며 프로그래밍할 시간입니다.
마지막 단계 - Arduino 코드 및 Bluetooth 앱 편집
"최종 스케치 업로드 " 코드 섹션에 제공됩니다. 오류가 발생하면 AFmotor 라이브러리를 설치했는지 확인하세요.
이제 우리는 Arduino를 쉽게 프로그래밍하는 방법을 배웠습니다. 여기에서 이 로봇을 장애물 회피 로봇, 벽 추종자 및 Bluetooth 제어로 작동시키는 몇 가지 프로그램을 보여 주었습니다. 그리고 마침내 이 세 가지 기능을 함께 결합했습니다. 자세한 내용과 정보를 보려면 동영상을 시청하십시오.
블루투스 앱 시작하기
벽 추종자 및 장애물 회피와 함께하는 재미
여기에서 내 블로그를 방문하십시오. -robotechmaker.com
질문이나 제안 사항이 있으면 아래에 의견을 말하십시오.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">/*저자: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'; } } 반환 결정자;}
/*저자: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'; } } 반환 결정자;}
/*저자: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(앞으로); } }
/*저자: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. 프로토타입 유형 다양한 유형의 프로토타입에 익숙해야 합니다. 프로토타입을 만들고 싶었을 때 어떤 것이 나에게 적합하고 어떤 것이 추가인지 결정하기 위해 많은 조사를 해야 했습니다. 다양한 유형은 스토리보
AMS1117 핀아웃은 선형 전압 조정기이며 종종 SMD 구성 요소 또는 DCY 패키지로 제공됩니다. 3핀 장치는 그에 따라 전압 조정기를 제공하는 가변/조정 및 고정 전압을 가지고 있습니다. 그 외에도 1A 미만의 부하를 필요로 하는 부하를 작동할 수 있습니다. 오늘의 기사에서는 ams1117의 애플리케이션, 구성, 기능, 애플리케이션 회로 및 대안을 살펴봅니다. am1117 핀아웃 구성 AMS1117 핀아웃 왼쪽에서 오른쪽으로; 접지, 출력 및 입력 핀 AMS1117에는 아래에서 논의할 핀아웃 구성에 3개