아두이노 - 초음파 센서 | Arduino - Ultrasonic Sensor
이 튜토리얼에서 우리는 다음을 배우게 됩니다:
- 초음파 센서의 작동 원리
- 초음파 센서를 아두이노에 연결하는 방법
- 초음파 센서로부터 상태를 읽기 위해 아두이노를 프로그래밍하는 방법
- 아두이노와 초음파 센서 HC-SR04를 사용하여 물체까지의 거리를 측정하는 방법
- 아두이노 코드에서 초음파 센서의 거리 측정값에서 잡음을 필터링하는 방법
준비물
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | Ultrasonic Sensor | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
초음파 센서에 대하여
초음파 센서 HC-SR04는 초음파를 사용하여 물체까지의 거리를 측정하는 데 사용됩니다.
핀배열
초음파 센서 HC-SR04에는 4개의 핀이 포함되어 있습니다:
- VCC 핀: VCC(5V)에 연결해야 합니다.
- GND 핀: GND(0V)에 연결해야 합니다.
- TRIG 핀: 이 핀은 아두이노로부터 제어 신호(펄스)를 받습니다.
- ECHO 핀: 이 핀은 아두이노에 신호(펄스)를 보냅니다. 아두이노는 펄스의 지속 시간을 측정하여 거리를 계산합니다.
작동 원리
- 마이크로컨트롤러: TRIG 핀에서 10마이크로초 펄스를 생성합니다.
- 초음파 센서가 자동으로 초음파를 발생시킵니다.
- 초음파는 장애물에 맞고 반사됩니다.
- 초음파 센서:
- 반사된 초음파를 감지합니다.
- 초음파의 이동 시간을 측정합니다.
초음파 센서로부터 거리를 측정하는 방법
초음파 센서에서 거리를 얻으려면, 우리는 단지 두 단계(‘작동 원리’ 부분의 1과 6단계)만 수행하면 됩니다.
- TRIG 핀에서 10-마이크로초 펄스를 생성합니다.
- ECHO 핀에서 펄스 지속 시간을 측정한 다음, 센서와 장애물 사이의 거리를 계산합니다.
거리 계산
우리는 다음을 가지고 있습니다:
- 초음파의 이동 시간(μs): : travel_time = pulse_duration
- 초음파의 속도: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs
그래서:
- 초음파의 이동 거리(cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
- 센서와 장애물 사이의 거리(cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration
아두이노 - 초음파 센서
아두이노의 핀은 10-마이크로초 펄스를 생성하고 펄스 지속 시간을 측정할 수 있습니다. 따라서 우리는 두 개의 아두이노 핀을 사용하여 초음파 센서로부터의 거리를 얻을 수 있습니다:
- 하나의 핀은 센서의 TRIG 핀에 10µs의 펄스를 생성하기 위해 TRIG 핀에 연결됩니다.
- 다른 핀은 센서에서 펄스를 측정하기 위해 ECHO 핀에 연결됩니다.
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
초음파 센서를 프로그래밍하는 방법
Arduino의 digitalWrite() 함수와 delayMicroseconds() 함수를 사용하여 핀에서 10마이크로초 펄스를 생성합니다. 예를 들면, 핀 9:
Arduino의 핀에서 pulseIn() 함수를 사용하여 펄스 지속 시간(μs)을 측정합니다. 예를 들어, 핀 8:
거리 계산하기 (cm):
아두이노 코드
사용 방법
- 위의 코드를 복사하고 Arduino IDE로 열기
- 코드를 Arduino에 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하십시오.
- 시리얼 모니터 열기
- 초음파 센서 앞에서 손을 움직이세요
- 시리얼 모니터에서 센서와 손 사이의 거리를 확인하세요
코드 설명
위의 아두이노 코드의 주석 라인에서 설명을 찾을 수 있습니다.
초음파 센서의 거리 측정에서 잡음을 필터링하는 방법
초음파 센서로부터의 측정 결과에는 잡음이 포함되어 있습니다. 일부 응용 프로그램에서는 이러한 잡음이 원치 않는 작동을 초래합니다. 다음 알고리즘을 사용하여 잡음을 제거할 수 있습니다:
- 여러 번 측정한 값을 배열에 저장하기
- 배열을 오름차순으로 정렬하기
- 노이즈 필터링하기
- 가장 작은 몇 개의 샘플은 노이즈로 간주하고 무시하기
- 가장 큰 몇 개의 측정값은 노이즈로 간주하고 무시하기
- 중간 샘플들의 평균 값을 구하기
- 가장 작은 5개의 샘플은 노이즈로 간주됩니다 → 이를 무시하세요
- 가장 큰 5개의 샘플은 노이즈로 간주됩니다 → 이를 무시하세요
- ⇒ 5번째부터 14번째까지의 중간 10개 샘플의 평균을 구하세요
아래 예제 코드는 20번의 측정을 수행합니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
도전하세요
초음파 센서를 사용하여 다음 프로젝트 중 하나를 수행합니다:
- RC 자동차를 위한 충돌 방지.
- 쓰레기통의 가득 참 감지.
- 쓰레기통의 수준 모니터링.
- 쓰레기통을 자동으로 열기/닫기. 힌트: Arduino - Servo Motor를 참조하세요.
추가 지식
일부 제조업체는 3개의 핀이 있는 초음파 센서를 제공합니다. TRIG 신호와 ECHO 신호가 같은 핀에 있습니다. 이 경우, 센서에 펄스를 생성하고 센서로부터 펄스를 측정하는 두 가지 목적 모두에 단 하나의 아두이노 핀만 사용해야 합니다.
초음파 센서 응용 분야
- 충돌 방지
- 충만 감지
- 수위 측정
- 근접 감지