초음파 센서 이용한 거리 측정 > IoT 유무선제어

본문 바로가기

IoT 유무선제어

[실습] 초음파 센서 이용한 거리 측정

필기자
2026-04-01 14:20 17 1

본문

초음파 센서 이용한 거리 측정

목 적
  • 라즈베리파이에 센서 측정 구현에 대해 이해한다.
  • 라즈베리파이에 초음파 센서를 통해 거리 측정 구현에 대해 이해한다.
목 차
1. 초음파 센서 모듈 설치
2. 초음파 센서 모듈 구동

1. 초음파 센서 모듈 설치
  • HC-SRO4 초음파 모듈
    • HC-SR04 초음파 센서 모듈은 거리를 측정하는 데 널리 사용되는 장치임.
    • 초음파 파동을 발사하여 목표물에 부딪힌 후 반사되어 돌아오는 시간을 측정함으로써 거리를 산출함.
    • 로봇, 장애물 회피 시스템, 자동 주차 시스템 등 다양한 어플리케이션에서 사용됨.
    • 기본 사양
      • 전원 공급: 5V DC
      • 소비 전류: 15mA
      • 작동 주파수: 40kHz
      • 최대 범위: 약 4m
      • 최소 범위: 2cm
      • 측정 각도: 약 15도
    • 인터페이스 및 구성
      • VCC
        • 5V 전원 입력
        • 센서 내부 회로 및 송신(T)/수신(R) 동작에 필요한 전원 공급
      • GND
        • 접지 (0V 기준)
        • 전체 회로 기준 전위 역할
      • Trig (Trigger)
        • 측정 시작 입력 핀
        • 10µs 이상 HIGH 신호 입력 시 초음파 발사 시작
      • Echo
        • 거리 측정 결과 출력 핀
        • 초음파 발사 시 HIGH (타이머 시작)
        • 반사파가 수신부(R)에 도달하면 LOW (타이머 종료)
    • 초음파 송수신 구조
      • T (Transmitter, 송신기)
        • 40kHz 초음파를 공기 중으로 발사
        • 내부 발진 신호를 물리적 진동으로 변환
      • R (Receiver, 수신기)
        • 물체에 반사된 초음파를 감지
        • 수신 순간 Echo 신호를 LOW로 전환시키는 기준 역할
GPIO 연결
  • GND : Ground 접지(핀 14)
  • Echo : GPIO 24(핀 18)
  • Trig : GPIO 23(핀 16)
  • Vcc : 5V Power(핀 2)  
3529946169_W5LM8Oed_8ac033be8dbab70541bacbee185beebe8ee6ace5.png


3529946169_tyFlanNj_296caea0b041a137fadb225d24a7600c90010f7c.png
  • 초음파 발사 및 수신 과정
    • Trig 핀에 10µs 이상의 HIGH 신호 입력 시 측정 시작
    • 초음파 발사 (T: Transmitter)
      • 센서 내부에서 40kHz 초음파를 8사이클(약 200µs) 생성
      • 이 신호가 송신부(T)를 통해 공기 중으로 방사됨
      • 1초 / 40,000Hz = 0.000025sec = 25µs → 1사이클
      • 25µs × 8 = 약 200µs 동안 초음파 발사, 즉 200µs 동안 8개 파동 발사
    • 에코 수신 (R: Receiver)
      • 초음파가 물체에 반사되어 수신부(R)로 돌아옴
      • 초음파 발사 시작과 동시에 Echo 핀은 HIGH 상태로 전환됨
      • 반사된 초음파가 수신부(R)에 도달하는 순간 Echo 핀이 LOW로 변경됨
    • 시간 측정
      • Echo 핀의 HIGH 유지 시간 = 초음파가 T에서 출발하여 물체를 거쳐 R로 돌아오는 왕복 시간
    • 거리 계산
      • 거리 = (시간 × 음속) / 2
        • 거리(cm) = (시간(sec) × 34300) / 2
      • 또는 거리(cm) = 시간(µs) / 58
※ 송신부(T)에서 발사된 초음파가 물체에 반사되어 수신부(R)에 도달하는 순간 Echo 신호가 LOW로 전환됨

2. 초음파 센서 모듈 구동
  • 라즈베리파이 가상환경에서 파이썬 코딩
    • VSCode에서 ultrasonic_wave.py 파일 생성
    • GPIO 17, 23 핀 → 출력 (LED 제어)
    • GPIO 24 핀 → 입력 (Echo 신호 수신)
    • Echo HIGH 유지 시간을 측정하여 거리 계산
    • 측정된 거리에 따라 LED 밝기 또는 색상 제어
3529946169_ShLMp7wx_aa1419399d5dd8c2de58ba3ebcf07f6852561ee2.png

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, GPIO.LOW)
    time.sleep(0.5)
    GPIO.output(TRIG, GPIO.HIGH)
    time.sleep(0.00001) #신호 송신부에서 40kHz 신호 8개 송신(200µs)
    GPIO.output(TRIG, GPIO.LOW)

    while GPIO.input(ECHO) == GPIO.LOW:
        pulse_start = time.time()
    while GPIO.input(ECHO) == GPIO.HIGH:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * (34300 / 2) # 소리속도 34300 cm/s
    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() : 초음파 센서를 이용하여 거리 값을 측정하고 반환하는 함수이다.
    • GPIO.output(TRIG, GPIO.LOW) : TRIG 핀을 LOW(0V)로 설정하여 센서를 초기화한다.
    • time.sleep(0.5) : 센서가 안정화될 수 있도록 대기한다.
    • GPIO.output(TRIG, GPIO.HIGH) : TRIG 핀을 HIGH로 설정하여 측정을 시작한다.
    • time.sleep(0.00001) : 10µs 동안 HIGH 상태 유지 (초음파 발사 트리거)
    • GPIO.output(TRIG, GPIO.LOW) : TRIG 핀을 다시 LOW로 설정하여 트리거 신호 종료
    • while GPIO.input(ECHO) == GPIO.LOW :
      • Echo 핀이 HIGH로 전환될 때까지 대기 (측정 시작 지점)
      • Echo 신호의 상승 시점(Rising Edge)을 의미
      • pulse_start = time.time() : 이 시점의 시간을 기록
    • while GPIO.input(ECHO) == GPIO.HIGH :
      • Echo 핀이 LOW로 떨어질 때까지 대기 (측정 종료 지점)
      • Echo 신호의 하강 시점(Falling Edge)을 의미
      • pulse_end = time.time() : 이 시점의 시간을 기록
    • pulse_duration = pulse_end - pulse_start :
      • Echo 핀의 HIGH 유지 시간 계산
      • 초음파가 송신(T)되어 물체에 반사된 후 수신(R)될 때까지의 왕복 시간
    • distance = pulse_duration * 17150 :
      • 거리 계산 (단위: cm)
      • 음속 34300cm/s ÷ 2 = 17150
    • distance = round(distance, 2) : 소수점 둘째 자리까지 반올림
    • return distance : 계산된 거리 반환
※ Echo HIGH 구간 전체 = 초음파가 T(송신기)에서 출발하여 물체를 거쳐 R(수신기)에 도달하는 왕복 시간
  • ultrasonic_wave.py 실행
    • VSCode > 상단 ▷ 실행
3529946169_QXr1Vwgo_21e7ba0305f06cc264d1eddff1db85fc41f18ac6.png

3529946169_WivqBSRG_b83ba17a2528f77b4b6612b53c79ceaa57d25ca5.gif

댓글목록1

필기자님의 댓글

필기자
2026-04-01 14:20
- 첨부파일 : HC-SR04Users_Manual.pdf (561.0K) - 다운로드
데이터시트
게시판 전체검색