parent
a89fae5dbe
commit
627ec1709c
|
|
@ -0,0 +1,70 @@
|
|||
import RPi.GPIO as GPIO
|
||||
import time
|
||||
|
||||
# GPIO 핀 설정 (BCM 모드 사용)
|
||||
# 실제 연결한 핀 번호에 맞게 수정하세요.
|
||||
GPIO_TRIGGER = 23 # TRIG 핀
|
||||
GPIO_ECHO = 24 # ECHO 핀 (전압 분배 회로를 거쳐 라즈베리 파이에 연결)
|
||||
|
||||
# GPIO 모드 설정: BCM 모드는 GPIO 번호를 사용합니다.
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
|
||||
# TRIG 핀을 출력으로, ECHO 핀을 입력으로 설정합니다.
|
||||
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
|
||||
GPIO.setup(GPIO_ECHO, GPIO.IN)
|
||||
|
||||
print("HC-SR04 초음파 센서 테스트 시작")
|
||||
print("Ctrl+C를 눌러 종료하세요.")
|
||||
|
||||
def measure_distance():
|
||||
# TRIG 핀을 LOW로 설정하여 센서 안정화
|
||||
GPIO.output(GPIO_TRIGGER, False)
|
||||
time.sleep(0.000002) # 2 마이크로초 대기 (안정화)
|
||||
|
||||
# TRIG 핀을 HIGH로 설정하여 10 마이크로초 동안 펄스 발생
|
||||
GPIO.output(GPIO_TRIGGER, True)
|
||||
time.sleep(0.00001)
|
||||
GPIO.output(GPIO_TRIGGER, False)
|
||||
|
||||
# ECHO 핀이 HIGH가 될 때까지 기다립니다 (펄스 수신 시작 시간)
|
||||
pulse_start = time.time()
|
||||
while GPIO.input(GPIO_ECHO) == 0:
|
||||
pulse_start = time.time()
|
||||
# 타임아웃 방지: 너무 오래 기다리지 않도록
|
||||
if time.time() - pulse_start > 0.04: # 약 4미터까지 측정, 0.04초면 충분
|
||||
return 999 # 측정 실패 또는 너무 멀리 있음
|
||||
|
||||
# ECHO 핀이 LOW가 될 때까지 기다립니다 (펄스 수신 종료 시간)
|
||||
pulse_end = time.time()
|
||||
while GPIO.input(GPIO_ECHO) == 1:
|
||||
pulse_end = time.time()
|
||||
# 타임아웃 방지
|
||||
if time.time() - pulse_end > 0.04:
|
||||
return 999
|
||||
|
||||
# 펄스 지속 시간 계산
|
||||
pulse_duration = pulse_end - pulse_start
|
||||
|
||||
# 거리 계산 (소리의 속도: 343m/s 또는 34300 cm/s)
|
||||
# 왕복 거리이므로 2로 나눔
|
||||
# cm 단위로 변환: (시간 * 34300) / 2
|
||||
distance = (pulse_duration * 34300) / 2
|
||||
|
||||
# 거리를 소수점 둘째 자리까지 반올림
|
||||
distance = round(distance, 2)
|
||||
|
||||
return distance
|
||||
|
||||
try:
|
||||
while True:
|
||||
dist = measure_distance()
|
||||
if dist == 999:
|
||||
print("측정 실패 또는 범위 밖")
|
||||
else:
|
||||
print(f"거리: {dist} cm")
|
||||
time.sleep(1) # 1초마다 측정
|
||||
|
||||
except KeyboardInterrupt:
|
||||
# Ctrl+C가 눌리면 GPIO 설정을 정리합니다.
|
||||
print("\n프로그램 종료 및 GPIO 정리.")
|
||||
GPIO.cleanup()
|
||||
Loading…
Reference in New Issue