장애물 회피 로봇 은 임베디드 프로젝트를 향상시키는 또 다른 유명한 로봇입니다. 새로운 장애물 회피 로봇이라면 장애물에 부딪히지 않고 길을 이동할 수있는 일반 바퀴 달린 로봇 일뿐입니다. 프로젝트에서 장애물 회피 로봇을 만드는 방법에는 여러 가지가 있습니다. 우리 로봇은 세 방향 모두에서 눈을 갖도록 초음파 센서 (전면) 1 개와 IR 센서 2 개 (왼쪽 / 오른쪽)를 사용할 것입니다. 이렇게하면 세면 모두에서 물체를 감지하고 그에 따라 조작하여 훨씬 더 스마트하고 빠르게 만들 수 있습니다. 여기서 우리는 이 장애물 회피 로봇에 대해 PIC 마이크로 컨트롤러 PIC16F877A 를 고소 합니다.
장애물 회피 로봇의 동작은 홈 청소 로봇이라는 실시간 제품에서 관찰 할 수 있습니다. 여기에 사용되는 기술과 센서는 매우 복잡하지만 개념은 동일합니다. 일반 센서와 PIC 마이크로 컨트롤러를 사용하여 얼마나 많은 것을 달성 할 수 있는지 살펴 보겠습니다.
다른 장애물 회피 로봇 도 확인하십시오.
- 라즈베리 파이 기반 장애물 회피 로봇
- Arduino를 사용한 DIY 스마트 진공 청소 로봇
필요한 재료:
- PIC16F877A
- IR 센서 (2Nos)
- 초음파 센서 (1Nos)
- DC 기어 모터 (2Nos)
- L293D 모터 드라이버
- 의자 (골판지를 사용하여 직접 만들 수도 있습니다)
- 파워 뱅크 (사용 가능한 모든 전원)
장애물 회피 로봇의 개념:
장애물 회피 로봇의 개념은 매우 간단합니다. 우리는 센서를 사용하여 로봇 주변의 물체의 존재를 감지하고이 데이터를 사용하여 로봇이 해당 물체에 충돌하지 않도록합니다. 물체를 감지하기 위해 우리는 IR 센서 및 초음파 센서와 같은 사용 센서를 사용할 수 있습니다.
우리 로봇에서는 US 센서를 전면 센서로 사용하고 두 개의 IR 센서를 왼쪽과 오른쪽에 각각 사용했습니다. 로봇은 앞에 물체가 없을 때 전진합니다. 따라서 로봇은 초음파 (US) 센서가 물체를 감지 할 때까지 전진합니다.
US 센서가 물체를 감지하면 로봇의 방향을 바꿔야합니다. 왼쪽 또는 오른쪽 으로 회전 할 수 있으며 회전 방향을 결정하기 위해 IR 센서 를 사용 하여 로봇의 왼쪽 또는 오른쪽 근처에 물체가 있는지 확인합니다.
로봇 의 앞면과 오른쪽에 물체가 감지되면 로봇이 돌아와서 좌회전합니다. 로봇이 회전하는 동안 물체에 충돌하지 않도록 일정 거리를 뒤로 달립니다.
로봇 의 앞쪽과 왼쪽에 물체가 감지되면 로봇이 돌아와서 우회전합니다.
로봇이 방의 구석에 도달하면 네 곳 모두에있는 물체를 감지합니다. 이 경우 한쪽이 자유 로워 질 때까지 로봇을 뒤로 움직여야합니다.
또 다른 가능한 경우는 앞에 물체가 있지만 왼쪽이나 오른쪽에 물체가 없을 수 있다는 것 입니다.이 경우 임의의 방향으로 회전해야합니다.
이것이 장애물 회피 기가 어떻게 작동하는지 대략적인 아이디어를 얻었 기를 바랍니다. 이제 회로 다이어그램을 진행하여이 봇을 만들고 실제로 즐기십시오.
회로도 및 설명:
이 PIC 기반 장애물 회피 로봇 의 전체 회로도 가 위 그림에 나와 있습니다. 보시다시피 두 개의 IR 센서를 사용하여 로봇의 왼쪽과 오른쪽에있는 물체를 각각 감지하고 초음파 센서를 사용하여 로봇 앞에있는 물체의 거리를 측정했습니다. 우리는 또한 L293D 모터 드라이버 모듈 을 사용 하여이 프로젝트에있는 두 개의 모터를 구동했습니다. 이는 휠용 일반 DC 기어 모터 이므로 매우 쉽게 유도 할 수 있습니다. 다음 표는 연결에 도움이 될 것입니다.
S. 아니 |
다음에서 연결됨 |
연결됨 |
1 |
IR 센서 왼쪽 핀 |
RD2 (핀 21) |
2 |
IR 센서 오른쪽 핀 |
RD3 (핀 22) |
4 |
모터 1 채널 A 핀 |
RC4 (23 번 핀) |
5 |
모터 1 채널 B 핀 |
RC5 (핀 25) |
6 |
모터 2 채널 A 핀 |
RC6 (핀 26) |
7 |
모터 2 채널 B 핀 |
RC7 (핀 27) |
8 |
미국 트리거 핀 |
RB1 (34 번 핀) |
9 |
미국 에코 핀 |
RB2 (핀 35) |
L293D 와 같은 모터 드라이버 모듈 은 DC 기어 모터를 실행하는 데 필요한 전류량을 PIC 마이크로 컨트롤러의 I / O 핀에서 공급할 수 없기 때문에 필수입니다. 센서와 모듈은 7805에 의해 조절되는 + 5V 전원에 의해 전원이 공급됩니다. 모터 드라이버 모듈은 + 12V를 사용하여 전원을 공급받을 수 있지만이 프로젝트에서는 사용 가능한 + 5V에 고정했습니다.
완전한 로봇은 제 경우에 파워 뱅크 로 구동됩니다. 또한 일반 파워 뱅크를 사용하고 레귤레이터 섹션을 통과하거나 위의 회로를 사용하고 위의 회로도에 표시된 것처럼 로봇에 9V 또는 12V 배터리를 사용할 수 있습니다. 연결이 완료되면 아래와 같이 보일 것입니다.
PIC 마이크로 컨트롤러 프로그래밍:
장애물 회피를 위해 PIC를 프로그래밍하는 것은 정말 쉽습니다. 이 세 센서의 값을 읽고 그에 따라 모터를 구동하면됩니다. 이 프로젝트에서는 초음파 센서를 사용하고 있습니다. 우리는 이미 초음파를 PIC 마이크로 컨트롤러와 인터페이스하는 방법을 배웠습니다. 만약 당신이 처음이라면이 튜토리얼로 돌아가서 미국 센서가 PIC와 어떻게 작동하는지 이해하십시오.
완전한 프로그램 또는이 로봇이 페이지의 마지막에 제공됩니다, 본인은 아래의 프로그램의 중요한 덩어리를 설명했다.
우리가 알고 있듯이 모든 프로그램은 입력 및 출력 핀 선언으로 시작 합니다. 여기서 모터 드라이버 모듈의 4 개 핀과 트리거 핀은 출력 핀이고 에코 핀과 2 개의 IR 출력 핀이 입력됩니다. 초음파 센서와 함께 사용하려면 타이머 1 모듈을 초기화해야합니다.
TRISD = 0x00; // LCD 인터페이스를위한 출력으로 선언 된 PORTD TRISB1 = 0; // 미국 센서의 트리거 핀이 출력 핀으로 전송됩니다. TRISB2 = 1; // 미국 센서의 에코 핀이 입력 핀으로 설정 됨 TRISB3 = 0; // RB3은 LED TRISD2 = 1의 출력 핀입니다. TRISD3 = 1; // 두 IR 센서 핀 모두 입력으로 선언됩니다. TRISC4 = 0; TRISC5 = 0; // 출력으로 선언 된 모터 1 핀 TRISC6 = 0; TRISC7 = 0; // 출력으로 선언 된 모터 2 핀 T1CON = 0x20;
이 프로그램에서는 센서와 물체 사이의 거리를 자주 확인해야하므로 미국 센서 인터페이스 튜토리얼에서 논의한 방법으로 거리를 측정 할 내부에 calculate_distance () 라는 함수를 만들었습니다. 코드는 아래와 같습니다.
void calculate_distance () // 미국 거리를 계산하는 함수 {TMR1H = 0; TMR1L = 0; // 타이머 비트 지우기 Trigger = 1; __delay_us (10); 트리거 = 0; 동안 (에코 == 0); TMR1ON = 1; while (에코 == 1); TMR1ON = 0; time_taken = (TMR1L-(TMR1H << 8)); 거리 = (0.0272 * time_taken) / 2; }
다음 단계는 초음파 센서와 IR 센서의 값 을 비교하고 그에 따라 로봇을 움직이는 것 입니다. 여기이 프로그램에서는 로봇이 방향 변경을 시작해야하는 임계 거리로 cm 값을 사용했습니다. 선호하는 값을 사용할 수 있습니다. 물체가 없으면 로봇은 전진합니다.
if (거리> 5) {RC4 = 0; RC5 = 1; // 모터 1 앞으로 RC6 = 1; RC7 = 0; // 모터 2 앞으로}
물체가 감지되면 거리가 cm 미만으로 이동합니다. 이 경우 우리는 좌우 초음파 센서의 값을 고려합니다. 이 값에 따라 좌회전 또는 우회전을 결정합니다. ms의 지연이 사용되어 변경 방향이 표시됩니다.
if (RD2 == 0 && RD3 == 1 && distance <= 5) // 왼쪽 센서가 차단됨 {back_off (); RC4 = 1; RC5 = 1; // 모터 1 정지 RC6 = 1; RC7 = 0; // 모터 2 앞으로 __delay_ms (500); } calculate_distance (); if (RD2 == 1 && RD3 == 0 && 거리 <= 5) // 오른쪽 센서가 차단됨 {back_off (); RC4 = 0; RC5 = 1; // 모터 1 앞으로 RC6 = 1; RC7 = 1; // 모터 2 정지 __delay_ms (500); }
때때로 초음파 센서는 물체를 감지하지만 IR 센서는 물체를 감지하지 못합니다. 이 경우 로봇은 기본적으로 좌회전합니다. 선호도에 따라 우회전하거나 임의의 방향으로 돌릴 수도 있습니다. 양쪽에 물체가 있으면 뒤로 이동합니다. 동일한 작업을 수행하는 코드는 아래와 같습니다.
계산 거리 (); if (RD2 == 0 && RD3 == 0 && 거리 <= 5) // 두 센서 모두 열림 {back_off (); RC4 = 0; RC5 = 1; // 모터 1 앞으로 RC6 = 1; RC7 = 1; // 모터 2 정지 __delay_ms (500); } calculate_distance (); if (RD2 == 1 && RD3 == 1 && 거리 <= 5) // 두 센서 모두 차단됨 {back_off (); RC4 = 1; RC5 = 0; // 모터 1 역방향 RC6 = 1; RC7 = 1; // 모터 2 정지 __delay_ms (1000); }
작동중인 장애물 회피 로봇:
프로젝트 작업은 매우 흥미롭고 보는 재미가 있습니다. 회로 및 코드 작업이 끝나면 봇의 전원을 켜고 바닥에 두십시오. 장애물을 식별하고 현명하게 피할 수 있어야합니다. 그러나 여기에 재미있는 부분이 있습니다. 코드를 수정하고 계단을 피하고 귀중한 회전을 저장하여 더 똑똑하게 만드는 것과 같은 더 많은 일을 할 수 있습니다.
이 로봇은 프로그래밍의 기본을 이해하고 실제 하드웨어가 코드에 어떻게 반응하는지 배우는 데 도움이됩니다. 이 로봇을 프로그래밍하고 실제 세계에서 코드에 대해 어떻게 작동하는지 보는 것은 항상 재미 있습니다.
여기서 우리는 PIC 마이크로 컨트롤러를 사용하여 LED 점멸을 위해 만든 것과 동일한 PIC 성능 보드를 사용했으며이 보드를 PIC Tutorial Series의 다른 프로젝트에서 사용했습니다.
로봇은 위 그림에 표시된 것과 비슷한 모습이어야합니다. 이 프로젝트의 전체 작업은 아래 비디오에 나와 있습니다.
프로젝트를 이해하고 재미있게 만들었기를 바랍니다. 궁금한 점이 있거나 문제가있는 경우 댓글 섹션을 사용하여 질문을 게시 할 수 있으며 최선을 다해 답변 해 드리겠습니다.