[실습] 초음파 센서 이용한 거리 측정
필기자
2024-02-27 16:58
2,187
0
본문
초음파 센서 이용한 거리 측정
목 적
1. 초음파 센서 모듈 설치
2. 초음파 센서 모듈 구동
목 적
- 라즈베리파이에 센서 측정 구현에 대해 이해한다.
- 라즈베리파이에 초음파 센서를 통해 거리 측정 구현에 대해 이해한다.
1. 초음파 센서 모듈 설치
2. 초음파 센서 모듈 구동
2. 초음파 센서 모듈 구동
1. 초음파 센서 모듈 설치
- HC-SRO4 초음파 모듈
- HC-SR04 초음파 센서 모듈은 거리를 측정하는 데 널리 사용되는 장치임.
- 초음파 파동을 발사하여 목표물에 부딪힌 후 반사되어 돌아오는 시간을 측정함으로써 거리를 산출함.
- 로봇, 장애물 회피 시스템, 자동 주차 시스템 등 다양한 어플리케이션에서 사용됨.
- 기본 사양
- 전원 공급: 5V DC
- 소비 전류: 15mA
- 작동 주파수: 40kHz
- 최대 범위: 약 4m
- 최소 범위: 2cm
- 측정 각도: 약 15도
- 인터페이스: VCC, Trig(Trigger), Echo, GND
- GPIO 연결
- GND : Ground 접지(핀 14)
- Echo : GPIO 24(핀 18)
- Trig : GPIO 23(핀 16)
- Vcc : 5V Power(핀 2)
- HC-SRO4 초음파 모듈 작동원리
- 트리거 신호: 사용자가 트리거 핀에 10µs 이상의 고주파 신호를 보냄으로써 초음파 파동 발사를 시작함.
- 초음파 발사: 센서는 40kHz의 초음파 파동을 8개 연속으로 발사함.
- 에코 신호: 초음파 파동이 목표물에 반사되어 센서로 돌아오면, 에코 핀이 HIGH 상태가 됨.
- 이 상태의 지속 시간은 초음파가 목표물에 도달하는 데 걸린 왕복 시간과 직접적으로 관련이 있음.
- 거리 계산: 거리는 에코 핀이 HIGH 상태를 유지한 시간을 측정하여 계산됨.
- 소리의 속도(대략 초당 343m)를 알고 있으므로, 다음 공식을 사용하여 거리를 계산할 수 있음.
- 거리 = (시간 × 소리의 속도) / 2.
2. 초음파 센서 모듈 구동
- 라즈베리파이 가상환경에서 파이썬 코딩
- VSCode에서 ultrasonic_wave.py 파일 생성
- GPIO 17, 23 핀을 출력 모드로 설정, GPIO 24 핀을 입력 모드로 설정
- GPIO 24 핀의 감지되는 초음파(거리) 측정에 따라 LED 색상 밝기 변경
import RPi.GPIO as GPIO
import time
# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
# 핀 번호 할당
TRIG = 23
ECHO = 24
LED = 17
# 입출력 설정
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(LED, GPIO.OUT)
# PWM 설정
pwm = GPIO.PWM(LED, 100) # 100Hz
pwm.start(0) # 초기 듀티 사이클 0
def get_distance():
GPIO.output(TRIG, False)
time.sleep(0.5)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO) == 0:
pulse_start = time.time()
while GPIO.input(ECHO) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance, 2)
return distance
try:
while True:
dist = get_distance()
print("Distance:", dist, "cm")
if dist > 100 :
dist = 99
pwm.ChangeDutyCycle(dist)
time.sleep(0.1)
except KeyboardInterrupt:
pwm.stop()
GPIO.cleanup()
- def get_distance() 함수
- def get_distance() : 함수는 센서로부터 거리 정보를 측정하고 그 값을 반환하는 역할을 한다.
- time.sleep(0.5) : 센서가 안정 대기 시간
- time.sleep(0.00001) : 트리거 신호의 정확한 길이를 제어
- GPIO.output(TRIG, False) : TRIG 핀을 False(0V)로 설정해 초음파 센서의 트리거 핀을 초기화한다. 측정 전에 트리거 핀을 정리해 신호가 없는 상태로 만든다.
- time.sleep(0.5) : 센서가 이전 측정의 잔여 신호로 인해 올바른 측정값을 제공하지 못할 수 있다. 이전 측정에서 완전히 안정화되기 위해 대기시간을 준다.
- GPIO.output(TRIG, True) : TRIG 핀을 True(3.3V 또는 5V)로 설정해 초음파 센서의 트리거 핀에 10μs(0.00001초) 동안의 고전압 신호를 보낸다. 초음파 파동을 발생한다.
- time.sleep(0.00001) : 초음파 펄스를 발생시키기 위한 대기시간, 10μs시간 동안의 펄스는 센서로 하여금 충분한 에너지를 가진 초음파 파동을 발생시키도록 한다.
- GPIO.output(TRIG, False) : TRIG 핀을 다시 False로 설정해 트리거 신호를 종료한다.
- while GPIO.input(ECHO) == 0: : ECHO 핀이 1(True)로 바뀔 때까지 초음파 파동이 발사되고 반사되어 돌아 온 첫 신호 시간 측정한다.
- 루프는 ECHO 핀이 HIGH 상태로 전환되기를 기다림
- 초음파 펄스가 ECHO에 처음 도착한 시간
- pulse_start = time.time()는 이 시점의 시간을 기록
- while GPIO.input(ECHO) == 1: : ECHO 핀이 다시 0(False)로 바뀔 때까지 초음파 파동이 센서에 도달하여 신호가 종료될 시간을 측정한다.
- 루프는 ECHO 핀이 LOW 상태로 돌아갈 때까지 기다림.
- 초음파 펄스 ECHO에 마지막 도착한 시간
- pulse_end = time.time()는 이 시점의 시간을 기록
- pulse_duration = pulse_end - pulse_start : 초음파 파동이 발사되어 돌아오는 데 걸린 전체 시간을 계산한다.
- distance = pulse_duration * 17150 : 거리를 계산한다.
- 소리의 속도는 공기 중에서 약 343m/s(34,300cm/s)
- 왕복 거리로 나누기 위해 2로 나눈 값인 17,150을 곱함
- distance = round(distance, 2) : 거리를 소수점 둘째 자리까지 반올림한다.
- def get_distance() : 함수는 센서로부터 거리 정보를 측정하고 그 값을 반환하는 역할을 한다.
- ultrasonic_wave.py 실행
- VSCode > 상단 ▷ 실행
댓글목록0