Arduino Uno : UltraSonic Module HC-SR04
초음파 거리 센서 모듈 HC-SR04 동작 방식과 아두이노로 거리 측정 방법
을 소개합니다.UltraSonic Module HC-SR04
초음파(Ultrasonic Wave)는 사람이 들을 수 있는 가청 주파수(20Hz ~ 20kHz)보다 높은 주파수 대역의 음파입니다. 산에서 '야호~'를 외치면 돌아오는 소리를 들을 수 있는 것처럼, 초음파도 음파이기 떄문에 물체를 만나면 반사되어 돌아옵니다. HC-SR04는 40kHz의 초음파 송신부(Speaker)와 수신부(MIC)로 구성되어 있어, 송신된 초음파가 물체에 반사되어 돌아오는 시간을 알려주는 모듈입니다. 공기 중 음파의 속도는 340m/s로, 초음파가 물체에 부딪혀 반사되는 시간을 알면 물체의 거리를 알 수 있습니다.
모듈 스펙
HC-SR04의 기본적인 스펙은 아래와 같습니다.
- 입력 전원 : 5V
- 소모 전류 : 15mA
- 측정 거리 : 2cm ~ 4m
- 측정 각도 범위 : 15º
- 트리거 입력 신호 : 10us Pulse
동작 방식
HC-SR04는 아래 그림과 같이 4핀으로 구성된 모듈입니다. 2번 Trig핀으로 10 us 동안 HIGH 펄스가 입력되면 HC-SR04의 스피커로 40kHz의 초음파 8 펄스 출력 후 3번 ECHO 핀으로 HIGH를 출력합니다. 마이크로 전송된 초음파가 물체를 만나 반사되어 HC-SR04로 돌아오면 3번 핀의 출력을 LOW로 변경합니다. 아두이노에서는 이 ECHO 핀의 HIGH 지속 시간을 이용하여 초음파 모듈과 물체의 거리를 계산 할 수 있습니다.
- VCC : 5V 전원 입력
- Trig : 거리 측정 시작 트리거 - 입력 단자
- Echo : 초음파 송신 후 수신 되기 까지 HIGH 를 출력 - 출력 단자
- GND : 그라운드
HC-SR04 동작 방법
거리 계산
초음파의 속도는 20℃에서 343m/s 입니다. 속도의 단위는 거리/시간이기 때문에, Echo 핀의 HIGH 지속 시간의 절반과 속도를 곱하면 물체의 거리를 측정 할 수 있습니다. Echo 핀의 HIGH 지속 시간에 1/2을 곱하는 이유는 소리가 가고, 돌아오는 왕복 시간이기 때문입니다. 거리의 단위별로 거리 계산 식은 아래와 같습니다.
아두이노 우노로 HC-SR04로 거리 측정
Arduino Uno HC-SR04 회로 구성
HC-SR04를 사용하여 아래와 같이 회로를 구성하였습니다. 저는 HC-SR04의 Trigger핀과 Echo핀을 아두이노 우노의 D9, D8에 연결했지만, 다른 디지털 핀에 연결해도 무방합니다.
Arduino Uno 와 HC-SR04 연결 예시
거리 측정 코드 작성
HC-SR04 로 거리 측정한 결과를 시리얼 포트로 출력하는 코드입니다. 거리 단위는 mm 와 inch 두 가지를 출력합니다.
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 33 34 35 36 37 38 39 40 41 42 43 | // triggerPin, EchoPin 지정 #define triggerPin 8 #define echoPin 9 void setup() { pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); delay(2000); Serial.println("Comport Connected..!"); delay(500); } void loop() { double Duration; // Trigger High 지속 시간 10us digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); //echoPin High 유지 시간 측정 Duration = pulseIn(echoPin, HIGH); double Distance_mm = Duration / 5.8; double Distance_inch = Duration / 148; // 거리 측정 값이 유효할 때(2~400cm) 시리얼 포트로 거리를 출력 if ((Distance_mm < 4000) && (Distance_mm > 2)){ Serial.print("Distance = "); Serial.print(Distance_mm); Serial.println(" mm"); Serial.print("Distance = "); Serial.print(Distance_inch); Serial.println(" inch"); Serial.println("================="); } else{ Serial.println("Error"); } delay(1000); // Wait to do next measurement } | cs |
코드 설명
- 24 Line의
pulseIn(echoPin, HIGH)함수 : echoPin 이 HIGH가 되기 시작해서 LOW로 전환 되기까지의 시간을 microseconds 단위로 반환합니다. 다시 말해서, echoPin 의 HIGH 유지 시간을 측정하는 함수입니다. - 30~40 Line if()문 : HC-SR04의 최대 측정 범위 4m를 넘어가는 경우 Error 처리합니다.
📌 pulseIn() 함수의 설명입니다.
Syntax
- pulseIn(Pin, value)
- pulseIn(Pin, value, timeout)
Parameters
- Pin : 아두이노 핀 번호
- value : HIGH or LOW
- timeout : (optional) 펄스가 시작될때까지 대기하는 시간 (데이터 타입 : unsigned long)
Returns
- Pulse 지속 시간 : microseconds 단위의 unsigned long
- 0 : timeout 시간 내에 펄스가 없는 경우
Example
time = pulseIn(3, HIGH);: 3번 핀이 HIGH가 되고 나서 LOW로 되는 시간을 변수 time에 저장
실행 결과
마무리
Arduino Uno 보드에서 HC-SR04를 사용하여 거리를 측정하는 방법에 대해 소개하였습니다. 이번 코드에서 사용한 pulseIn() 함수는 다양한 곳에서 사용되는 함수이니 사용법을 확인하시면 좋을 것 같습니다.
끝까지 읽어 주셔서 감사합니다.😊
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #39 DHT11 사용 방법 및 라이브러리 없이 온도 습도 측정 (0) | 2020.09.22 |
---|---|
아두이노 코딩 : HC-SR04 로 측정한 거리를 I2C CLCD 에 출력 (0) | 2020.09.21 |
아두이노 코딩 : 아두이노 우노로 리모컨 만들기 (0) | 2020.09.11 |
아두이노 강좌 #37 IR 적외선 통신 송신 코드 작성 IRremote 라이브러리 사용 (0) | 2020.09.10 |
아두이노 강좌 #36 IRremote 라이브러리로 IR 수신 코드 작성 - 603LM (2) | 2020.09.08 |