본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #1. 초음파 센서

728x90
반응형

pulseIn

pulseIn 이란 초음파를 이용하여 특정 핀에서 하나의 사각 파형(HIGH/LOW)를 읽는 명령어이다.

 

pulseIn(pin,value);

pulseIn 함수는 특정 핀 상의 사각 파형을 읽는데, value값이 HIGH이면, pulseIn 함수는 핀이 LOW에서 HIGH가 될 때까지 기다린다. 그리고 다시 핀이 LOW가 될 때까지 기다리게된다. 이때 HIGH 구간의 길이를 마이크로 초 단위로 돌려주는데 이때의 값을 바탕으로 길이를 계산할 수 있다.

 

다시 말해, 송신부에서 내보낸 초음파가 물체에 부딪혀서 수신부로 들어오는 시간을 계산하여 거리를 계산하게된다.

 

이때 [거리 = 속력* 시간] 공식을 사용하여 거리를 구한다. 단 왕복 길이이므로 물체와의 거리는 좌변의 1/2배이다.

거리 = 340m/s * (측정 시간) / 2  

 

초음파 센서 회로도

 일반적으로 사용하는 초음파 센서는 HC-SR04로, 효율적으로 물체를 인식하는 각도는 15도 정도이며 물체인식거리는 2~400cm이다.

초음파 센서의 송신과 수신

Trig(tr) 시작 신호를 주는 핀: OUTPUT
Echo(ec) 입력 신호를 받는 핀으로, 거리를 계산함: INPUT

tirg 파형은 거리를 시작하기 위해 아두이노에서 초음파 센서로 내보내는 신호로 10 마이크로 초 동안 HIGH 신호를 준다. 그러면 초음파 센서는 8개의 초음파를 40kHz의 속도로 외부에 내보내게 되는데, 초음파 센서는 곧이어 echo 핀을 HIGH 신호로 올려주면서 거리 측정을 시도한다.

 

내보낸 초음파 신호가 반향되어 센서에 도달하여 거리 측정이 완련되면 초음파 센서는 echo핀을 LOW 신호로 내려 측정이 완료되었음을 아두이노에 알리게된다.

코드 살펴보기

const int ec = 2;
const int tr = 3;

void setup() {

 pinMode(tr,OUTPUT);
 pinMode(ec,INPUT);

 Serial.begin(9600);
}

void loop() {
 digitalWrite(tr,LOW);
 delayMicroseconds(2);
 
 digitalWrite(tr,HIGH);
 delayMicroseconds(10);
 
 digitalWrite(tr,LOW);
 
 long Distance = (pulseIn(ec,HIGH)/2)/29.1;

 delay(100);
 Serial.print(Distance);
 Serial.println( "cm");


}

setup() 

const int ec = 2;
const int tr = 3;

void setup() {

 pinMode(tr,OUTPUT);
 pinMode(ec,INPUT);

 Serial.begin(9600);
}

echo핀과 trig핀을 각각 2번과 3번 핀으로 할당 후, echo핀과 trig핀을 출력과 입력으로 선언한다. 이후 시리얼 통신속도를 9600으로 초기화한다.

loop()

void loop() {
 digitalWrite(tr,LOW);
 delayMicroseconds(2);
 
 digitalWrite(tr,HIGH);
 delayMicroseconds(10);
 
 digitalWrite(tr,LOW);
 
 long Distance = (pulseIn(ec,HIGH)/2)/29.1;

 delay(100);
 Serial.print(d);
 Serial.println( "cm");
}
  1. trig핀을 LOW로 설정하고 2 마이크로 초 기다린다.
  2. trig핀을 HIGH로 설정하고 10 마이크로 초 기다린다. (10 마이크로 초 동안 초음파를 발생한다.)
  3. trig핀을 LOW로 설정한다.
  4. 거리를 계산한다. 이때 서식지정자로 long을 사용한다.
  5. delay를 100 마이크로 초(0.1초)주고 계산한 거리를 시리얼 모니터에 출력한다.
728x90
반응형
댓글