아두이노로 초음파 센서 이용하기

초음파(Ultrasonic)란, 인간이 들을 수 있는 20~20000Hz 사이의 영역보다 더 높은 주파수를 가진다.

초음파의 속도는 일반 공기중에서 약 340m/s이며, 파동의 성질인 확산, 흡수, 산란 등에 의해 감쇠하는 성질을 가지고 있다.

hc-sr04에 대한 이미지 검색결과
초음파 센서, HC-SR04

초음파 센서는 이미 로봇 청소기 같은 가전제품에서부터 자동차의 감지 센서, 초음파 탐지기 등 의료용, 산업용에 이르기까지 매우 다양한 분야에서 활용되고 있다. 초음파 센서는 종류에 따라 생성하는 주파수 대역이 다르며, 최대 측정할 수 있는 거리가 다르다. 우리가 사용할 초음파 센서는 5V 기준 2cm~450cm까지 측정 가능하다.

사용할 초음파 센서

거리측정을 위한 초음파 센서는 송신부(Trigger)와 수신부(Echo)로 나뉘어져 있으며, 송신부에서 일정한 시간의 간격을 둔 짧은, 초음파를 발생시키고, 사물에 부딪혀 돌아온 초음파 신호를 수신부에서 받아, 이에 대한 시간차를 통해 거리를 계산한다. 이를 통해 장애물의 유무, 물체의 거리 또는 속도 등을 측정할 수 있다. 초음파를 발생시키는 원리는 피에조 부저가 소리나는 원리인 피에조효과(압전효과)와 같다.

초음파센서로 거리 계산하는 방법

1cm를 이동하는데 걸리는 시간은 다음과 같이 구할 수 있다.

따라서, t = 2 * 0.01 / 340 = 58.824µs 로, 초음파가 1cm를 이동하는데 걸리는 시간은 약 29µs가 걸리며, 초음파가 반사된 물체와의 거리는 다음과 같이 구할 수 있다.


준비물

NO부품명수량
1아두이노 UNO R31
2초음파 센서(HC-SR04)1
4330Ω 저항1
5브레드 보드1
6점퍼 케이블6

회로도

코드

코드 보기

int trig = 8; // 송신부
int echo = 9; // 수신부

float duration=0;
float distance=0;

void setup() 
{
  Serial.begin(9600);
 
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}
 
void loop() 
{
  digitalWrite(trig, HIGH); // 초음파 송신
  delay(10);
  digitalWrite(trig, LOW);
 
  duration = pulseIn(echo, HIGH); // Echo pin이 HIGH를 유지한 시간 저장
  distance = ((float)(340 * duration) / 10000) / 2; // 거리 계산
 
  // 측정된 거리 값를 시리얼 모니터에 출력
  Serial.print(distance);
  Serial.println("cm");
 
 }

실습