<다뤄볼 센서>
초음파 센서중에서 가장 흔히 사용하는 HC-SR04 센서에 대해서 글을 작성해본다.
초음파 센서중에서 가장 저렴하며, 제일 쉽게 구할 수 있는 장점이 있는 센서이다.
각종 메이커톤, 발명대회에서 빠질 수 없는 센서 중 하나이다.
흔히 근접센서라고도 부른다.
<센서 원리>
초음파 센서는 초음파가 반사되어 오는데 걸린 시간을 이용하여 거리를 산출해낸다.
센서 전면부에 센싱을 하게 생긴 두개의 기둥이 존재한다.
하나는 발신부이고, 하나는 수신부이다.
발신부에서 초음파 파장이 발생되고, 직선상의 물체에 그 파장이 반사되어 돌아온다.
흔히 우리말로는 메아리 라고 하는 echo파장을 수신하고, 그 사이의 시간을 구하는게 핵심이다.
음속은 통상 340m/s 로 계산하는데, 등속운동이라는 가정하에 식을 세워보면 다음과 같다.
[ t : 신호 수신까지 걸린 시간, 단위 초]
신호 수신까지 걸린 시간에 단순히 음속을 곱하면 왕복 이동거리가 되기 때문에
2로 나누어주어야 한다.
https://jdselectron.tistory.com/3
자세한 정보는 위를 참고하는 것도 좋다.
<준비물>
- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선, HC-SR04
<회로도>
<코드>
int trigPin = 4;
int echoPin = 5;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // trigPin에서 초음파 발생
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance = ((float)(340 * duration) / 1000) / 2;
Serial.print("Duration:"); //시리얼모니터에 Echo가 HIGH인 시간을 표시
Serial.print(duration);
Serial.print("\nDIstance:"); // 물체와 초음파 센서간 거리를 표시
Serial.print(distance);
Serial.println("mm\n");
delay(200);
}
위의 코드를 그대로 아두이노에서 업로드 하면 됩니다.
<실행 결과>
실제로 자를 두고
거리를 띄운다음 측정을 해보았다.
처음에는 100 mm 를 띄워 보았다.
실제로 출력되고 있는 값들은 100mm에 근접한 값들이었다.
오차가 많게는 12mm 까지 발생했다.
이번에는 좀 더 멀리 떨어트리고 측정을 해 보았다.
600mm를 떨어트렸다.
측정된 결과 값들은 600에 근접했다.
오차가 많게는 19mm 까지 발생했다.
너무 가까울 경우 측정이 쉽지 않았고,
너무 멀리있는 경우
평평한 면이 넓지 않으면 측정이 제대로 되지 않았다.
<고찰>
초음파센서는 정확한듯 하면서, 상당히 부정확한 센서라는 결론이 났다.
벽면에서의 거리를 측정한다면 큰 문제가 없지만, 굴곡이 있는 표면에서의 거리를 측정할 때에는 문제가 생긴다.
발사된 파장이 반사되면서 echo수신부로 입력이 되지 않는 것이다.
따라서 초음파 센서는 평평한 평면을 가진 물체와의 거리를 측정할 때에는 정확성이 비교적 높다고 할 수 있으나,
굴곡이 있는 물체를 감지하는데 사용하기에는 부적합한 센서라고 할 수 있다.
이 문제는 이번에 다뤄본 HC-SR04 만의 문제일 수도 있으나, 원리만을 따지고 본다면 어느 초음파센서도 비슷할 것으로 보인다.
※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!
'코딩 > 아두이노' 카테고리의 다른 글
아두이노에서 적외선 근접센서 TCRT5000 사용하는 방법 (11) | 2020.08.19 |
---|---|
피에조부저 수동, 능동 원리와 아두이노에서의 사용방법 (0) | 2020.05.07 |
아두이노 업로딩이 안 된다면! 아두이노 호환보드 CH340&CH341 드라이버 설치! (0) | 2020.05.06 |
[아두이노 강좌] 예제로 배우는 아두이노 #8 timer interrupt() 사용법, delay 없이 LED 제어하기 (4) | 2020.03.30 |
[아두이노 강좌] 예제로 배우는 아두이노 #7 DigitalInputPullup, 아두이노 내장 pullup 저항 이용하기 (2) | 2020.03.27 |
댓글