초음파 센서
초음파(Ultrasonic) = 인간의 들을 수 있는 영역(가청영역)은 약 20~20KHz이며, 이것보다 주파수가 더 높은 음
거리측정을 위한 초음파 센서는 송신부와 수신부로 나뉘어져 있습니다. 송신부 에서 일정한 시간의 간격을 둔 짧은 초음파 펄스를 방사하고, 대상물에 부딪혀 돌아온 에코 신호를 수신부에서 받습니다. 이에 대한 시간차를 기반으로 거리를 산출하고, 이를 통해 장애물의 유무, 물체의 거리 또는 속도 등을 측정할 수 있습니다
초음파센서 사용법
초음파 센서의 송신부(Trig)에서는 초음파 펄스를 방사하고, 대상물에 부딪혀 돌아온 에코 신호를 수신부(Echo)에서 받아 거리를 측정합니다
초음파 센서의 송신부(Trig)에서 일정한 시간의 간격을 둔 짧은 초음파 펄스를 방 사하고, 대상물에 부딪혀 돌아온 에코 신호를 수신부(Echo)에서 받아, 이에 대한 시간차를 기반으로 거리를 산출합니다. 1cm를 이동하는데 걸리는 시간은 다음과 같이 구할 수 있습니다.
따라서, t = 2 0.01 / 340 = 58.824μs* 로, 초음파가 1cm를 이동하는데 걸리는 시간은 약 29μs가 걸리며, 초음파가 반사된 물체와의 거리는 다음과 같이 구할 수 있습니다.
거리(cm) = duration (왕복에 걸린시간) / 29 / 2 (왕복).
부품명 | 수량 |
---|---|
아두이노 우노 R3 | 1 |
브레드보드 | 1 |
초음파 거리 센서 | 1 |
점퍼케이블 | 5 |
회로도
브레드보드 레이아웃
coding
int echoPin = 12;
int trigPin = 13;
//초음파 센서의 핀번호를 설정한다.
void setup(){
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// trig를 출력모드로 설정, echo를 입력모드로 설정
}
void loop(){
float duration, distance;
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance = ((float)(340 * duration) / 10000) / 2; // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
Serial.print(distance);
Serial.println("cm");
// 수정한 값을 출력
delay(500);
}
- 스케치 설명
duration = pulseIn(echoPin, HIGH);
distance = ((float)(340 * duration) / 10000) / 2;
trig이 HIGH 가 되면 초음파를 보내게 됩니다. 초음파를 다 보내면 echo가 HIGH상태를 유지하면서 되돌아오는 초음파를 받을 준비를 합니다
초음파가 앞에 물질에 부딪혀 다시 돌아오면 echo가 LOW 로 바뀌게 됩니다. HIGH 에서 LOW로 바뀔 동안의 시간을 측정하여 duration에 저장합니다. (pulseIn(pin, state)은 어느 pin에서 어떤 상태(state)로 얼마나 유지되고 있는지를 구합니다.)
초음파는 340m/s의 속도로 날라갑니다.(온도가 25도 일 때) 이 때 속도와 센서가 보낸 시간을 이용하여 거리를 구합니다.(왕복해서 오는 것이므로 결과를 2로 나눠줘야 합니다)