2012년 6월 24일 일요일

초음파 센서 활용


초음파 모듈을 이용하여 
거리를 측정해보자.

사용한 초음파 모듈은
이다.

핀이 3개로 SIG,VCC,GND다
SIG로 아두이노의 디지털 포트를 연결
출력과 입력을 교대로 받는다.
즉 초음파 신호를 보내고 반사되어 되돌아 오는 초음파를 입력 받는다.
그 시간 차이를 이용하면 거리를 계산할 수 있다.

소스 스케치
-----------------------------------------------------------------------------------
/* 초음파센서를 이용한 거리 측정*/

int ulPin=9;   //초음파 SIG연결 핀
void setup(){
  Serial.begin(9600);   //컴퓨터화면에 data값을 확인할 수 있도록 시리얼 통신 설정
}
void loop(){
  pinMode(ulPin,OUTPUT);     //초음파센서를 출력으로 설정
  digitalWrite(ulPin, LOW);  // 신호를 끄고 (2마이크로 초동안)
  delayMicroseconds(2);
  digitalWrite(ulPin, HIGH); //초음파 신호를 보낸다(5마이크로 초동안)
  delayMicroseconds(5);
  digitalWrite(ulPin, LOW); // 신호를 끈다.

  pinMode(ulPin, INPUT);    // 초음파센서를 입력으로 설정
  long duration = pulseIn(ulPin,HIGH);  
                              // 초음파센서에 반사되어 돌아온 초음파가 측정될 시간을 저장(마이크로초 단위)
  long cm = mtocm(duration);  // cm거리 계산 함수
  long inch = mtoinch(duration);  //inch거리 계산 함수
  Serial.print(cm);
  Serial.print("cm  ");
  Serial.print(inch);
  Serial.print("inch ");
  Serial.println();

  delay(500);
}
long mtocm(long a){
return a/29/2;      //초음파는 1초에 340m이동한다. 즉 1000000마이크로 초에 34000cm를 이동한다.
                        //따라서 cm거리는 시간x속력으로 a는 왕복시간이므로 (a/2)x34000/1000000이다.
}
long mtoinch(long b){
return b/74/2;    // 1000000마이크로 초동안 대략 13386inch를 이동하므로
                      // inch거리는 시간x속력으로 b는 왕복시간이므로 (b/2)x13386/1000000이다.
}

/* pulseIn(ulPin,HIGH)은
ulPin이 HIGH값을 입력받을때까지의 시간을 마이크로초단위로 읽어온다. */
--------------------------------------------------------------------------------------------


작동 영상은 시리얼LCD에 출력하는 영상이다.




댓글 없음:

댓글 쓰기