부품설명

자주 사용하는 부품들의 사용법에 대하여 알아봅니다.

초음파 거리 센서 사용하기

2014-08-05 16:35:54

개요

초음파 거리센서는 초음파를 대상에게 발사하여 반사되어 오는 반사파를 받을 때까지의 시간을 확인하여 거리를 측정하는 센서 입니다.


사진 출처 : DangerousPrototypes

초음파 거리센서를 이용해 거리측정을 하여 물체가 가까이 있을 경우 진동이 울리는 시각장애인들을 위한 장갑을 만들 수도 있고, 



사진 출처 : MCU on Eclipse

로봇에 부착하여 로봇이 물체에 충돌하지 않도록 움직임을 제어 할 수 있습니다.


이 컨텐츠에서는 초음파 거리 센서를 아두이노와 연결해 보고, 물체와의 거리를 측정 해보겠습니다.

 

 

미리 보기 동영상

 

 
 

 

초음파 거리 센서(링크)

  - 초음파는 사람의 귀로 들을 수 없는 주파수가 20Khz 이상의 음을 말합니다.
  - 초음파 거리 센서는 초음파를 보내고 받는 시간을 측정하여 거리를 재는 센서입니다.

 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지보드 1 아두이노
2 초음파 거리 센서 1 초음파 거리 센서
3 브레드보드 1 브레드보드
4 점퍼케이블 4 점퍼케이블

 

 

부품명 오렌지보드 초음파 거리 센서 브레드보드 점퍼케이블
파트 x1 x1 x1 x4


 

 

하드웨어 making

회로도

 

 

브레드보드 레이아웃

 

 

소프트웨어 coding

 

//초음파 센서의 핀번호를 설정한다.
int echoPin = 12;
int trigPin = 13;

void setup() {
	Serial.begin(9600);
	// trig를 출력모드로 설정, echo를 입력모드로 설정
	pinMode(trigPin, OUTPUT);
	pinMode(echoPin, INPUT);
}

void loop() {
	float duration, distance;
	
	// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
	digitalWrite(trigPin, HIGH);
	delay(10);
	digitalWrite(trigPin, LOW);
	
	// echoPin 이 HIGH를 유지한 시간을 저장 한다.
	duration = pulseIn(echoPin, HIGH); 
	// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
	distance = ((float)(340 * duration) / 10000) / 2;  
	
	Serial.print(distance);
	Serial.println("cm");
	// 수정한 값을 출력
	delay(500);
}

 

 

 

소프트웨어 설명

 * 이 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.

  duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  distance = ((float)(340 * duration) / 10000) / 2;  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.

위의 코드를 이해하기 위해서는 초음파 센서의 원리 알아야 합니다.

간단하게 설명하면 trig이 HIGH 가 되면 초음파를 보내게 됩니다. 초음파를 다 보내면 echo가 HIGH상태를 유지하면서 되돌아오는 초음파를 받을 준비를 합니다.

초음파가 앞에 물질에 부딪혀 다시 돌아오면 echo가 LOW 로 바뀌게 됩니다. HIGH 에서 LOW로 바뀔 동안의 시간을 측정하여 duration에 저장합니다.
(pulseIn(pin, state)은 어느 pin에서 어떤 상태(state)로 얼마나 유지되고 있는지를 구합니다.)

초음파는 340m/s의 속도로 날라갑니다.(온도가 25도 일 때)
이 때 속도와 센서가 보낸 시간을 이용하여 거리를 구합니다.(왕복해서 오는 것이므로 결과를 2로 나눠줘야 합니다)

 

기술문서 

 

  • 부품목록
  • 회로도
  • 브레드보드 레이아웃
  • 소스 코드

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

초급, 초음파 거리 센서, 아두이노

최의택 2015-05-17 13:51:22

실내에서 사용해 볼까 하는데요. 겨울과 여름, 그러니까 실내 온도에 따라 거리값이 많이 차이나나요? 1cm 단위 측정이 필요한데 오차율도 궁금합니다.

판다마니아 2015-05-18 18:15:36

1. 초음파가 온도에 변화가 있다고는 하나 아주 미세한 차이라 무시해도 될 것 같습니다.

2. 위에서 사용한 초음파 센서 hc-sr04는 데이터 시트상 2cm ~ 4m의 범위에 오차범위가 3mm라고 하는데, 직접 사용해 본 결과 가까운 거리(최대 1m 안)까지는 정확한 값을 측정하지만 이 이상부터는 1cm단위로 측정하실꺼면 다른 센서를 찾아보시는게 좋을 것 같습니다.

HC-SR04 데이터시트 : http://www.micropik.com/PDF/HCSR04.pdf

Nix 2015-12-13 19:48:25

회로도랑 똑같이 만들고 소스코드도 그대로 해줬는데 왜 시리얼 모니터에 아무것도 안뜨는건가요?

ssagri 2015-12-26 16:29:15

혹시 pulseIn을 엔트리에서 구현하는 방법이 있을까요?

정동순 2015-12-28 02:22:45

처음엔 거리측정(가까운곳) 이 잘 되다가 다른곳(먼곳)에 초음파를 보낸 이후 거리가 0cm 로 계속나오고 그 뒤엔 잘 나오던 거리도 계속 0cm 로 나오던데 소스에 버그가 있는건가요?