로봇은 산업, 공장, 병원 등의 작업을 자동화하여 무거운 작업에서 인간의 노력을 줄이는 기계입니다. 대부분의 로봇은 일부 제어 장치 또는 푸시 버튼, 리모컨, 조이스틱, PC, 제스처와 같은 구성 요소를 사용하여 실행됩니다. 컨트롤러 또는 프로세서를 사용하여 일부 명령을 실행합니다. 그러나 오늘 우리는 경로의 모든 장애물을 피하면서 외부 이벤트없이 자율적으로 움직이는 자동 로봇을 가지고 있습니다. 예, 우리는 장애물 회피 로봇 에 대해 이야기 합니다. 이 프로젝트에서는 Raspberry Pi 및 Motor 드라이버 를 사용하여 로봇을 구동하고 로봇 경로에있는 물체를 감지하기위한 초음파 센서 를 사용했습니다.
이전에 우리는 많은 유용한 로봇을 다루었으며 로봇 공학 프로젝트 섹션에서 찾을 수 있습니다.
필요한 구성 요소:
- 라즈베리 파이
- 초음파 센서 모듈 HC-SR04
- 나사로 완성 된 ROBOT 섀시
- DC 모터
- L293D IC
- 바퀴
- 브레드 보드
- 저항기 (1k)
- 커패시터 (100nF)
- 전선 연결
- 전원 공급 장치 또는 전원 은행
초음파 센서 모듈:
장애물 Avoider 로봇 자동화 로봇이며이 원격를 사용하여 제어 할 필요가 없습니다. 이러한 유형의 자동화 로봇에는 장애물 감지기, 소리 감지기, 열 감지기 또는 금속 감지기와 같은 '육감'센서가 있습니다. 여기서 우리는 초음파 신호를 사용하여 장애물 감지를 수행했습니다. 이를 위해 초음파 센서 모듈을 사용했습니다.
초음파 센서는 일반적으로 물체를 감지하고 센서에서 장애물까지의 거리를 결정하는 데 사용됩니다. 탱크 내 수위 측정, 거리 측정, 장애물 회피 로봇 등과 같이 물리적 접촉없이 거리를 측정 할 수있는 훌륭한 도구입니다. 그래서 여기에서는 초음파 센서와 라즈베리 파이를 사용하여 물체를 감지하고 거리를 측정했습니다.
초음파 센서 HC-SR04 는 3mm의 정확도로 2cm-400cm 범위의 거리를 측정하는 데 사용됩니다. 센서 모듈은 초음파 송신기, 수신기 및 제어 회로로 구성됩니다. 초음파 센서는 두 개의 원형 눈으로 구성되며, 그중 하나는 초음파를 전송하고 다른 하나는이를 수신하는 데 사용됩니다.
초음파가 센서로 돌아 오는 데 걸리는 시간을 기준으로 물체의 거리를 계산할 수 있습니다. 소리의 시간과 속도를 알고 있으므로 다음 공식으로 거리를 계산할 수 있습니다.
- 거리 = (시간 x 공기 중 음속 (343m / s)) / 2.
파도가 같은 거리를 앞뒤로 이동하므로 값을 2로 나눈 값이므로 장애물에 도달하는 데 걸리는 시간은 총 소요 시간의 절반에 불과합니다.
그래서 우리는 아래와 같이 장애물로부터의 거리 (센티미터)를 계산했습니다.
pulse_start = time.time () while GPIO.input (ECHO) == 1: # ECHO가 HIGH인지 확인 GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end-pulse_start 거리 = pulse_duration * 17150 거리 = round (distance, 2) avgDistance = avgDistance + distance
여기서 pulse_duration 은 초음파 신호를 보내고받는 사이의 시간입니다.
회로 설명:
회로는 Raspberry Pi를 사용하는 장애물 회피 로봇에 대해 매우 간단합니다. 초음파 센서 모듈 검출 물체에 사용은, GPIO 핀 (17)과 라즈베리 파이 27에 접속되어있다. 모터 드라이버 IC L293D는 로봇의 모터를 구동하기위한 라즈베리 파이 (3)에 접속된다. 모터 드라이버의 입력 핀 2, 7, 10 및 15는 각각 Raspberry Pi GPIO 핀 번호 12, 16, 20 및 21에 연결됩니다. 여기서는 두 개의 DC 모터 를 사용 하여 하나의 모터가 모터 드라이버 IC의 출력 핀 3 및 6에 연결되고 다른 모터가 모터 드라이버 IC의 핀 11 및 14에 연결된 로봇을 구동했습니다.
작동 원리:
이 자율 로봇의 작업 은 매우 쉽습니다. 로봇의 전원을 켜고 실행을 시작하면 Raspberry Pi는 초음파 센서 모듈을 사용하여 앞에있는 물체의 거리를 측정하고 변수에 저장합니다. 그런 다음 RPi는이 값을 미리 정의 된 값과 비교하고 그에 따라 로봇을 왼쪽, 오른쪽, 앞으로 또는 뒤로 이동하도록 결정합니다.
이 프로젝트에서는 Raspberry Pi의 결정 을 내리기 위해 15cm 거리를 선택했습니다. 이제 Raspberry Pi가 물체로부터 15cm 미만 거리에 도달 할 때마다 Raspberry Pi는 로봇을 멈추고 뒤로 이동 한 다음 왼쪽 또는 오른쪽으로 돌립니다. 이제 다시 앞으로 이동하기 전에 Raspberry Pi는 15cm 거리 범위 내에 장애물이 있는지 다시 확인하고, 그렇다면 이전 프로세스를 다시 반복하고, 그렇지 않으면 장애물이나 물체를 다시 감지 할 때까지 로봇을 앞으로 이동합니다.
프로그래밍 설명:
우리가 사용하는 파이썬 언어 여기에 프로그램을. 코딩하기 전에 사용자가 Raspberry Pi를 구성해야합니다. Raspberry Pi 시작하기 및 Pi에서 Raspbian Jessie OS 설치 및 구성에 대한 이전 자습서를 확인할 수 있습니다.
이 프로젝트의 프로그래밍 부분은 모든 작업을 수행하는 데 매우 중요한 역할을합니다. 먼저 필요한 라이브러리를 포함하고 변수를 초기화하며 초음파 센서, 모터 및 구성 요소에 대한 핀을 정의합니다.
import RPi.GPIO as GPIO import time #Import time library GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) TRIG = 17 ECHO = 27……………..
그 후, 우리는 로봇을 앞, 뒤로, 왼쪽 또는 오른쪽 방향으로 각각 움직이기 위해 def forward (), def back (), def left (), def right () 함수를 만들고 로봇 을 멈추기 위해 def stop () 함수를 만들었습니다. 아래 코드에서 기능을 확인하십시오.
그런 다음 메인 프로그램에서 초음파 센서를 시작하고 신호 송수신 사이의 시간을 읽고 거리를 계산했습니다. 정확도를 높이기 위해이 과정을 5 번 반복했습니다. 초음파 센서를 사용하여 거리를 계산하는 과정은 이미 설명했습니다.
i = 0 avgDistance = 0 for i in range (5): GPIO.output (TRIG, False) time.sleep (0.1) GPIO.output (TRIG, True) time.sleep (0.00001) GPIO.output (TRIG, False) while GPIO.input (ECHO) == 0: GPIO.output (led, False) pulse_start = time.time () while GPIO.input (ECHO) == 1: # ECHO가 HIGH인지 확인 GPIO.output (led, False) pulse_end = time.time () pulse_duration = pulse_end-pulse_start 거리 = pulse_duration * 17150 거리 = round (distance, 2) avgDistance = avgDistance + distance
마지막으로 로봇이 앞에있는 장애물을 발견하면 장애물에서 멀어지면 로봇이 다른 경로로 이동하도록 프로그래밍했습니다.
if avgDistance <15: count = count + 1 stop () time.sleep (1) back () time.sleep (1.5) if (count % 3 == 1) & (flag == 0): right () flag = 1 else: left () flag = 0 time.sleep (1.5) stop () time.sleep (1) else: forward () flag = 0
이 Raspberry Pi 장애물 회피 로봇의 전체 코드 는 데모 비디오와 함께 아래에 제공됩니다.