초음파(Ultrasonic)란, 인간이 들을 수 있는 20~20000Hz 사이의 영역보다 더 높은 주파수를 가진다.
초음파의 속도는 일반 공기중에서 약 340m/s이며, 파동의 성질인 확산, 흡수, 산란 등에 의해 감쇠하는 성질을 가지고 있다.
초음파 센서, HC-SR04
초음파 센서는 이미 로봇 청소기 같은 가전제품에서부터 자동차의 감지 센서, 초음파 탐지기 등 의료용, 산업용에 이르기까지 매우 다양한 분야에서 활용되고 있다. 초음파 센서는 종류에 따라 생성하는 주파수 대역이 다르며, 최대 측정할 수 있는 거리가 다르다. 우리가 사용할 초음파 센서는 5V 기준 2cm~450cm까지 측정 가능하다.
사용할 초음파 센서
거리측정을 위한 초음파 센서는 송신부(Trigger)와 수신부(Echo)로 나뉘어져 있으며, 송신부에서 일정한 시간의 간격을 둔 짧은, 초음파를 발생시키고, 사물에 부딪혀 돌아온 초음파 신호를 수신부에서 받아, 이에 대한 시간차를 통해 거리를 계산한다. 이를 통해 장애물의 유무, 물체의 거리 또는 속도 등을 측정할 수 있다. 초음파를 발생시키는 원리는 피에조 부저가 소리나는 원리인 피에조효과(압전효과)와 같다.
초음파센서로 거리 계산하는 방법
1cm를 이동하는데 걸리는 시간은 다음과 같이 구할 수 있다.
따라서, t = 2 * 0.01 / 340 = 58.824µs 로, 초음파가 1cm를 이동하는데 걸리는 시간은 약 29µs가 걸리며, 초음파가 반사된 물체와의 거리는 다음과 같이 구할 수 있다.
준비물
NO
부품명
수량
1
아두이노 UNO R3
1
2
초음파 센서(HC-SR04)
1
4
330Ω 저항
1
5
브레드 보드
1
6
점퍼 케이블
6
회로도
코드
코드 보기코드 접기
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int trig = 8; // 송신부
int echo = 9; // 수신부
float duration=0;
float distance=0;
voidsetup()
{
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
voidloop()
{
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");
}
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");
}
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");
}