초음파 센서인 HC-SR04를 이용하여 거리를 측정해보자.
이 센서는 나의 테스트 결과 1m 안의 물체에 대해서는 상당히 정확한 거리값을 구해 준다.
하지만 1m를 넘어가면 값이 별로 정확하지는 않은 것 같다.
초음파로 거리를 계산하는 원리는 다음과 같다.
초음파의 속도는 340m/s 이다.(일반적인 소리의 속도와 같다.) 초음파가 발생되어 대상물체에 부딪히게 되면 반사되어 돌아오게 된다. 이의 시간차를 계산하면 거리를 계산할 수 있다. 박쥐가 동굴에서 빛 없이도 장애물을 파악하고 피해가는 원리와 비슷하며, 번개가 치고 1초뒤 천둥소리가 들렸다면 번개가 친 곳과의 거리가 340m 인 것을 파악하는 원리와 같다고 생각하면 된다.
초음파 센서를 보면 스피커 같은 것이 2개가 달려 있는데 한 쪽은 초음파를 발생시키고 다른 한 쪽은 물체에 반사되는 초음파를 감지하는 역할을 한다. 즉, 초음파 발생 시간과 물체에 부딪혀 반사되어 오는 시간의 차를 이용하여 거리를 측정하게 되는 것이다.
위의 단자에서 Trig 가 초음파를 발생하는 신호이며, Echo가 반사되어 오는 초음파를 받는 역할을 한다. 데이터시트와 매뉴얼은 다음과 같다.
HC-SR04 데이터시트:
HC-SR04 매뉴얼:
연결:
Vcc ---- 아두이노 5V
GND ---- 아두이노 GND
Trig ---- 아두이노 디지털 9번핀
Echo ---- 아두이노 디지털 8번핀
##소스##
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | //출력핀(trig)과 입력핀(echo) 연결 설정, 다른 핀을 연결해도 됨. int trigPin = 9; int echoPin = 8; //시리얼 속도설정, trigPin을 출력, echoPin을 입력으로 설정 void setup(){ Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } //초음파를 보낸다. 다 보내면 echo가 HIGH(신호받기) 상태로 대기 void loop(){ float duration, distance; digitalWrite(trigPin, HIGH); delay(10); digitalWrite(trigPin, LOW); // echoPin 이 HIGH를 유지한 시간을 저장 한다. duration = pulseIn(echoPin, HIGH); // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다. // 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠준다. distance = ((float)(340 * duration) / 10000) / 2; //시리얼모니터에 Echo가 HIGH인 시간 및 거리를 표시해준다. Serial.print("Duration:"); Serial.print(duration); Serial.print("\nDIstance:"); Serial.print(distance); Serial.println("cm\n"); delay(500); } |
위의 소스를 업로드 후 초음파 센서에서 7cm 거리에 물체를 두었다.
약간의 오차가 있지만 시리얼모니터상에서 거의 근접한 거리를 보여준다.
'아두이노' 카테고리의 다른 글
[아두이노] 빛의 감지, 포토레지스터(Photo Resistor)의 사용 (0) | 2015.09.03 |
---|---|
[아두이노] 적외선(IR)센서의 사용 - VS1838B (4) | 2015.09.03 |
[아두이노] 스텝핑 모터(Stepping Motor) 사용하기 (2) | 2015.08.31 |
[아두이노] 시계(RTC: Real Time Clock) 모듈의 사용 (4) | 2015.08.27 |
[아두이노] 아두이노 사운드 디텍트 센서(Sound Detect Sensor)의 이용 (0) | 2015.08.27 |