초음파 센서

초음파(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);
}
  1. 스케치 설명
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로 나눠줘야 합니다)