아두이노 우노 R4 초음파 센서
이 튜토리얼은 초음파 센서와 Arduino UNO R4를 사용하여 물체까지의 거리를 측정하는 방법을 가르쳐줍니다. 자세히 알아볼 내용은 다음과 같습니다:
- 초음파 센서를 Arduino UNO R4에 연결하는 방법
- 초음파 센서에서 값을 읽고 이를 거리 값으로 변환하도록 Arduino를 프로그래밍하는 방법
- Arduino UNO R4에서 초음파 센서의 거리 데이터의 잡음을 제거하는 방법
준비물
1 | × | Arduino UNO R4 WiFi | Amazon | |
1 | × | Arduino UNO R4 Minima (Alternatively) | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | Amazon | |
1 | × | Ultrasonic Sensor | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (추천) Screw Terminal Block Shield for Arduino UNO R4 | 쿠팡 | Amazon | |
1 | × | (추천) Breadboard Shield For Arduino UNO R4 | 쿠팡 | Amazon | |
1 | × | (추천) Enclosure For Arduino UNO R4 | 쿠팡 | Amazon | |
1 | × | (추천) Power Splitter For Arduino UNO R4 | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
초음파 센서에 관하여
HC-SR04 초음파 센서는 소리 파동을 사용하여 물체까지의 거리를 측정합니다. 인간이 들을 수 없는 소리 파동을 보내고, 그 파동이 물체에 반사되어 돌아오는 에코를 듣습니다. 소리 파동이 돌아오는 데 걸리는 시간을 측정하여 센서는 물체가 얼마나 멀리 있는지를 계산할 수 있습니다.
핀아웃
초음파 센서 HC-SR04는 네 개의 핀이 있습니다:
- VCC 핀: 이 핀을 VCC(5V)에 연결하세요.
- GND 핀: 이 핀을 GND(0V)에 연결하세요.
- TRIG 핀: 이 핀을 Arduino UNO R4에 연결하여 제어 신호(펄스)를 전송하세요.
- ECHO 핀: 이 핀은 신호(펄스)를 Arduino UNO R4로 다시 보냅니다. Arduino UNO R4는 이러한 펄스의 지속 시간을 계산하여 거리를 결정합니다.
image source: diyables.io
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.
아두이노 UNO R4 코드
#define TRIG_PIN 9 // The Arduino UNO R4 pin connected to the ultrasonic sensor's TRIG pin
#define ECHO_PIN 8 // The Arduino UNO R4 pin connected to the ultrasonic sensor's ECHO pin
float duration_us, distance_cm;
void setup() {
// begin serial port
Serial.begin (9600);
// configure the trigger pin to output mode
pinMode(TRIG_PIN, OUTPUT);
// configure the echo pin to input mode
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// generate 10-microsecond pulse to TRIG pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
// print the value to Serial Monitor
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(500);
}
자세한 사용 방법
다음 지침을 단계별로 따르십시오:
- Arduino Uno R4 WiFi/Minima를 처음 사용하는 경우, 아두이노 우노 R4 - 소프트웨어 설치에 대한 튜토리얼을 참조하십시오.
- 제공된 다이어그램에 따라 구성 요소를 연결하십시오.
- USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결하십시오.
- 컴퓨터에서 Arduino IDE를 실행하십시오.
- 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi) 및 COM 포트를 선택하십시오.
- 위의 코드를 복사하여 Arduino IDE로 엽니다.
- Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino UNO R4로 전송하십시오.
- 시리얼 모니터를 엽니다.
- 초음파 센서 앞에서 손을 흔드세요.
- 시리얼 모니터에서 손과 센서 간의 거리를 확인하세요.
COM6
distance: 29.4 cm
distance: 27.6 cm
distance: 26.9 cm
distance: 17.4 cm
distance: 16.9 cm
distance: 14.3 cm
distance: 15.6 cm
distance: 13.1 cm
Autoscroll
Clear output
9600 baud
Newline
코드 설명
설명은 위의 Arduino 코드 주석에 있습니다.
초음파 센서 거리 측정에서 노이즈를 필터링하는 방법
초음파 센서의 읽기 값에는 잡음이 포함되어 있습니다. 일부 경우에는 이 잡음이 데이터의 잘못된 작동을 초래할 수 있습니다. 우리는 이 방법을 사용하여 잡음을 제거할 수 있습니다:
- 여러 번 측정하고 배열에 저장합니다.
- 배열을 오름차순으로 정렬합니다.
- 데이터에서 노이즈를 제거합니다:
- 가장 작은 값들은 노이즈로 간주하여 무시합니다.
- 가장 큰 값들은 노이즈로 간주하여 무시합니다.
- 나머지 중간 값들을 사용하여 평균을 계산합니다.
- 다섯 개의 가장 작은 샘플과 다섯 개의 가장 큰 샘플은 노이즈로 간주되어 무시됩니다. 5번째부터 14번째까지 10개의 중간 샘플의 평균을 계산합니다.
아래 코드 예제는 20개의 측정을 수행합니다.
/*
* 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-ultrasonic-sensor
*/
#define TRIG_PIN 9 // The Arduino UNO R4 pin connected to the ultrasonic sensor's TRIG pin
#define ECHO_PIN 8 // The Arduino UNO R4 pin connected to the ultrasonic sensor's ECHO pin
float filterArray[20]; // array to store data samples from sensor
float distance; // store the distance from sensor
void setup() {
// begin serial port
Serial.begin (9600);
// configure the trigger and echo pins to output mode
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY
for (int sample = 0; sample < 20; sample++) {
filterArray[sample] = ultrasonicMeasure();
delay(30); // to avoid untrasonic interfering
}
// 2. SORTING THE ARRAY IN ASCENDING ORDER
for (int i = 0; i < 19; i++) {
for (int j = i + 1; j < 20; j++) {
if (filterArray[i] > filterArray[j]) {
float swap = filterArray[i];
filterArray[i] = filterArray[j];
filterArray[j] = swap;
}
}
}
// 3. FILTERING NOISE
// + the five smallest samples are considered as noise -> ignore it
// + the five biggest samples are considered as noise -> ignore it
// ----------------------------------------------------------------
// => get average of the 10 middle samples (from 5th to 14th)
double sum = 0;
for (int sample = 5; sample < 15; sample++) {
sum += filterArray[sample];
}
distance = sum / 10;
// print the value to Serial Monitor
Serial.print("distance: ");
Serial.print(distance);
Serial.println(" cm");
}
float ultrasonicMeasure() {
// generate 10-microsecond pulse to TRIG pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
float duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
float distance_cm = 0.017 * duration_us;
return distance_cm;
}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
초음파 센서 응용 프로그램
- 충돌 방지
- 충만 감지
- 레벨 측정
- 근접 감지