HC-SR04 초음파 센서 완전 가이드: 동작 원리부터 아두이노 연동까지
초음파(Ultrasound)는 사람이 들을 수 없는 20kHz 이상의 고주파 음파입니다. HC-SR04는 최대 4m(약 13ft) 거리 측정용으로 가장 널리 쓰이는 저가 초음파 센서 모듈입니다. 본문에서는 HC-SR04의 하드웨어 구조, 핀아웃, 동작 원리, 거리 계산 공식, 아두이노 연동 예제 코드, 한계점까지 실전 중심으로 설명합니다.
주파수 대역 비교: 가청역 vs 초음파
HC-SR04 하드웨어 개요 및 사양
구성 요소
- 송신부(Transmitter, T): 전기 신호 → 40kHz 초음파 펄스 변환
- 수신부(Receiver, R): 반사된 초음파 수신 → 전기 신호 출력
- 제어 회로: 발진, 타이밍, 증폭, 펄스 폭 변환 내장
송신부(T)와 수신부(R) 배치
주요 사양 (Specifications)
| 항목 | 값 |
| 크기 | 45 × 20 × 15 mm |
| 동작 전압 | DC 5V |
| 동작 전류 | 약 15mA |
| 트리거 입력 | 10µs 이상 High 펄스 (TTL 레벨) |
| 동작 주파수 | 40 kHz |
| 측정 각도 | 15° (원뿔형 빔) |
| 측정 범위 | 2 cm ~ 400 cm (4 m) |
| 정확도 | ±3 mm |
| 분해능 | 0.3 cm |
핀아웃 (Pinout)
HC-SR04 핀아웃 (4핀)
| 핀 번호 | 이름 | 기능 |
| 1 | VCC | 전원 입력 (5V) |
| 2 | Trig (Trigger) | 입력: 10µs High 펄스로 측정 시작 트리거 |
| 3 | Echo | 출력: 초음파 왕복 시간만큼 High 유지 (펄스 폭 = 비행 시간) |
| 4 | GND | 그라운드 |
동작 원리 (Working Principle)
초음파 센서 동작 원리: 펄스 발사 → 반사 → 수신
- 트리거: Trig 핀에 10µs 이상 High 펄스 인가
- 버스트 발사: 내부에서 8사이클(8주기) 40kHz 초음파 버스트 송출
- Echo High 시작: 버스트 송출 완료 시점 Echo 핀 High로 전환
- 전파 및 반사: 초음파가 공기 중 전파(음속 ~340m/s) → 물체에서 반사
- Echo Low 전환: 반사파 수신 순간 Echo 핀 Low로 전환
- 펄스 폭 = 왕복 시간: Echo High 유지 시간 = 초음파 왕복 비행 시간
거리 계산 공식
거리(cm) = (음속 × 시간) / 2 = (34000 cm/s × t_us / 1,000,000) / 2 = t_us × 0.017
또는 거리(cm) = t_us / 58.8 (t_us: Echo High 펄스 폭, 마이크로초 단위)
예시 계산
Echo High 펄스 폭 = 1500µs (1.5ms) 일 때:
거리 = 1500 × 0.017 = 25.5 cm
타임아웃 처리
- 장애물 없을 때: 약 38ms 후 Echo 자동 Low (최대 측정 거리 4m → 왕복 약 23.5ms, 마진 포함)
- 코드에서 30~40ms 타임아웃 설정 권장
치수 (Dimensions)
HC-SR04 치수도 (제조사별 미세 차이 존재)
아두이노 연동 실전 (Arduino Integration)
준비물
- 아두이노 우노 (또는 나노, 메가 등)
- HC-SR04 모듈
- 브레드보드, 점퍼 와이어
- USB 케이블
하드웨어 연결
| 아두이노 핀 | HC-SR04 핀 |
| 5V | VCC |
| GND | GND |
| D2 (또는 임의 디지털 핀) | Trig |
| D3 (또는 임의 디지털 핀) | Echo |
아두이노 우노 - HC-SR04 배선도
소프트웨어: 라이브러리 없이 직접 구현 (권장)
const uint8_t TRIG_PIN = 2;
const uint8_t ECHO_PIN = 3;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(115200);
}
void loop() {
// 1. Trig Low로 안정화
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// 2. 10µs High 펄스로 트리거
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// 3. Echo High 펄스 폭 측정 (마이크로초, 타임아웃 30ms)
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
// 4. 거리 계산 (cm)
float distance_cm = duration * 0.017f; // duration / 58.8
// 5. 결과 출력
if (duration == 0) {
Serial.println("Out of range / Timeout");
} else {
Serial.print("Distance: ");
Serial.print(distance_cm, 1);
Serial.println(" cm");
}
delay(100); // 측정 주기 100ms (10Hz)
}
코드 핵심 포인트 해설
pulseIn(pin, HIGH, timeout): Echo 핀이 High인 시간(µs) 측정, 타임아웃 시 0 반환
- 음속 340m/s = 34000cm/s = 0.034cm/µs → 왕복이므로 /2 → 0.017cm/µs
- 부동소수점 연산 대신 정수 연산 최적화 가능:
distance_mm = duration * 17 / 1000
- 평활화(이동 평균 필터) 적용 시 노이즈 감소 효과적
라이브러리 사용 시 (NewPing 등)
NewPing 라이브러리는 다중 센서, 인터럽트 방식, 중간값 필터 등 고급 기능 제공. 단순 프로젝트는 위 직접 구현으로 충분.
응용 한계점 및 주의사항 (Limitations)
- 부드럽고 불규칙한 표면(솜, 털, 스펀지 등): 음파 흡수 → 반사 약함 → 측정 실패
- 낮은 장착 높이: 바닥 반사파가 주 신호와 간섭 → 바닥면에서 최소 10~15cm 이상 이격 권장
- 작은 물체: 반사 면적 작아 수신 신호 약함 → 감지 거리 단축
- 얕은 입사각: 거울처럼 반사되어 센서로 돌아오지 않음 (입사각 ≈ 반사각)
- 4m 초과 거리: 신호 감쇠로 수신 불가
- 온도/습도 영향: 음속 변화 → 보정 필요 시 온도 센서 병용
- 다중 센서 동시 사용: 상호 간섭 방지 위해 순차 트리거(시분할) 필수
결론
HC-SR04는 저렴한 가격(약 $1~2), 쉬운 인터페이스, 저전력 소모로 배터리 구동 기기에 최적화된 초음파 거리 센서입니다. 2cm~400cm 범위에서 ±3mm 정확도로 장애물 감지, 거리 측정, 매핑, 수위 측정, 주차 보조 등 다양한 용도에 쓰입니다. 본문의 아두이노 예제 코드를 기반으로 프로젝트에 맞게 확장해 보세요. 추가 기술 문의는 언제든 환영합니다.