장애물 회피 로봇 은 앞의 장애물을 자동으로 감지하여 다른 방향으로 회전하여 회피 할 수있는 지능형 장치입니다. 이 설계를 통해 로봇은 모든 자율 이동 로봇의 주요 요구 사항 인 충돌을 방지하여 알 수없는 환경에서 탐색 할 수 있습니다. 장애물 회피 로봇의 적용은 제한되지 않으며 현재 대부분의 군사 조직에서 사용되어 군인이 할 수없는 많은 위험한 작업을 수행하는 데 도움이됩니다.
우리는 이전에 Raspberry Pi와 PIC 마이크로 컨트롤러를 사용하여 장애물 회피 로봇을 구축했습니다. 이번에 는 초음파 센서와 아두 이노를 이용하여 장애물 회피 로봇을 만들어 보겠습니다 . 여기서 초음파 센서는 로봇과 장애물 사이의 거리를 계산하여 경로에있는 장애물을 감지하는 데 사용됩니다. 로봇이 장애물을 발견하면 방향을 바꾸고 계속 움직입니다.
초음파 센서를 이용한 장애물 회피 로봇 제작 방법
로봇을 만들기 전에 초음파 센서가 장애물을 감지하는 데 중요한 역할을 할 것이기 때문에 초음파 센서가 어떻게 작동하는지 이해하는 것이 중요합니다. 초음파 센서 작동의 기본 원리는 센서가 표면에 닿은 후 초음파 빔을 전송하고 초음파 빔을 수신하는 데 걸리는 시간을 기록하는 것입니다. 그런 다음 공식을 사용하여 거리를 계산합니다. 이 프로젝트에서는 널리 사용되는 HC-SR04 초음파 센서 가 사용됩니다. 이 센서를 사용하려면 위에서 설명한 유사한 접근 방식을 따릅니다.
따라서 HC-SR04의 Trig 핀은 최소 10 us 동안 높게 설정됩니다. 음파 빔은 각각 40KHz의 8 개 펄스로 전송됩니다.
그런 다음 신호는 표면에 닿아 다시 돌아와 HC-SR04의 수신기 에코 핀에 캡처됩니다. 에코 핀은 하이를 보낼 때 이미 하이를 기록했습니다.
빔이 복귀하는 데 걸리는 시간은 변수에 저장되고 아래와 같은 적절한 계산을 통해 거리로 변환됩니다.
거리 = (시간 x 공기 중 음속 (343m / s)) / 2
우리는 많은 프로젝트에서 초음파 센서를 사용하여 초음파 센서에 대해 더 많이 배우고 초음파 센서와 관련된 다른 프로젝트를 확인했습니다.
이 장애물 회피 로봇의 구성 요소를 쉽게 찾을 수 있습니다. 섀시를 만들기 위해 모든 장난감 섀시를 사용하거나 맞춤 제작할 수 있습니다.
필요한 구성 요소
- Arduino NANO 또는 Uno (모든 버전)
- HC-SR04 초음파 센서
- LM298N 모터 드라이버 모듈
- 5V DC 모터
- 배터리
- 바퀴
- 차대
- 점퍼 와이어
회로도
이 프로젝트의 전체 회로도는 Arduino nano를 사용하는 것을 볼 수 있듯이 아래에 나와 있습니다. 그러나 동일한 회로 (동일한 핀아웃을 따름)와 코드로 Arduino UNO 를 사용하여 장애물을 피하는 로봇을 만들 수도 있습니다.
회로가 준비되면 아래와 같이 로봇 섀시 위에 회로를 조립하여 장애물을 피하는 자동차 를 만들어야합니다.
Arduino를 이용한 장애물 회피 로봇-코드
이 프로젝트의 끝에 데모 비디오가 포함 된 전체 프로그램이 제공됩니다. 이 프로그램에는 HC-SR04 모듈을 설정하고 그에 따라 모터 방향을 이동하기 위해 모터 핀에 신호를 출력하는 것이 포함됩니다. 이 프로젝트에서는 라이브러리가 사용되지 않습니다.
먼저 프로그램에서 HC-SR04의 trig 및 echo 핀을 정의 하십시오. 이 프로젝트에서 trig 핀은 GPIO9에 연결되고 echo 핀은 Arduino NANO의 GPIO10에 연결됩니다.
int trigPin = 9; // HC-SR04의 트리거 핀 int echoPin = 10; // HC-SR04의 에코 핀
LM298N 모터 드라이버 모듈의 입력을위한 핀을 정의합니다. LM298N에는 연결된 모터의 방향을 제어하는 데 사용되는 4 개의 데이터 입력 핀이 있습니다.
int revleft4 = 4; // 왼쪽 모터의 움직임을 되돌립니다. int fwdleft5 = 5; // 왼쪽 모터의 ForWarD 모션 int revright6 = 6; // 오른쪽 모터의 움직임을 되돌립니다. int fwdright7 = 7; // 오른쪽 모터의 ForWarD 모션
에서 설정 () 함수를 이용 GPIO 핀의 데이터의 방향을 정의한다. 4 개의 Motor 핀과 Trig 핀은 OUTPUT으로 설정되고 Echo Pin은 Input으로 설정됩니다.
pinMode (revleft4, OUTPUT); // 모터 핀을 출력으로 설정 pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // trig 핀을 출력으로 설정 pinMode (echoPin, INPUT); // 반사파를 포착하기 위해 에코 핀을 입력으로 설정
에서는 루프 () 함수, HC-SR04로부터의 거리를 좀 과의 거리에 기초하여 상기 모터의 방향을 이동. 거리는 로봇 앞에 오는 물체 거리를 보여줍니다. 거리는 최대 10us까지 초음파 빔을 터뜨려 10us 후에 수신합니다. 초음파 센서와 Arduino를 사용한 거리 측정에 대해 자세히 알아 보려면 링크를 따르십시오.
digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // 10 us 동안 웨이브를 보냅니다. delayMicroseconds (10); 기간 = pulseIn (echoPin, HIGH); // 반사파 수신 distance = duration / 58.2; // 거리로 변환 delay (10);
거리가 정의 된 거리보다 크면 경로에 장애물이없고 전방으로 이동 함을 의미합니다.
if (거리> 19) { digitalWrite (fwdright7, HIGH); // 앞으로 이동 digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
장애물을 피하기 위해 거리가 정의 된 거리보다 작 으면 전방에 장애물이 있음을 의미 합니다. 따라서이 상황에서 로봇은 잠시 멈췄다가 다시 뒤로 이동하고 잠시 멈춘 다음 다른 방향으로 돌아갑니다.
if (거리 <18) { digitalWrite (fwdright7, LOW); // 중지 digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); 지연 (500); digitalWrite (fwdright7, LOW); // 백 워드 이동 digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); 지연 (500); digitalWrite (fwdright7, LOW); // 중지 digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); 지연 (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); 지연 (500); }
이것이 로봇이 아무데도 걸리지 않고 경로에있는 장애물을 피할 수있는 방법입니다. 아래 에서 전체 코드와 비디오를 찾으 십시오.