공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
초음파 센서에 관하여
HC-SR04 초음파 센서는 소리 파동을 사용하여 물체까지의 거리를 측정합니다. 인간이 들을 수 없는 소리 파동을 보내고, 그 파동이 물체에 반사되어 돌아오는 에코를 듣습니다. 소리 파동이 돌아오는 데 걸리는 시간을 측정하여 센서는 물체가 얼마나 멀리 있는지를 계산할 수 있습니다.
핀아웃
초음파 센서 HC-SR04는 네 개의 핀이 있습니다:
VCC 핀: 이 핀을 VCC(5V)에 연결하세요.
GND 핀: 이 핀을 GND(0V)에 연결하세요.
TRIG 핀: 이 핀을 Arduino UNO R4에 연결하여 제어 신호(펄스)를 전송하세요.
ECHO 핀: 이 핀은 신호(펄스)를 Arduino UNO R4로 다시 보냅니다. Arduino UNO R4는 이러한 펄스의 지속 시간을 계산하여 거리를 결정합니다.
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 pinfloat duration_us, distance_cm;voidsetup() {// begin serial portSerial.begin (9600);// configure the trigger pin to output modepinMode(TRIG_PIN, OUTPUT);// configure the echo pin to input modepinMode(ECHO_PIN, INPUT);}voidloop() {// generate 10-microsecond pulse to TRIG pindigitalWrite(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 MonitorSerial.print("distance: ");Serial.print(distance_cm);Serial.println(" cm");delay(500);}
적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi) 및 COM 포트를 선택하십시오.
위의 코드를 복사하여 Arduino IDE로 엽니다.
Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino UNO R4로 전송하십시오.
시리얼 모니터를 엽니다.
초음파 센서 앞에서 손을 흔드세요.
시리얼 모니터에서 손과 센서 간의 거리를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
코드 설명
설명은 위의 Arduino 코드 주석에 있습니다.
초음파 센서 거리 측정에서 노이즈를 필터링하는 방법
초음파 센서의 읽기 값에는 잡음이 포함되어 있습니다. 일부 경우에는 이 잡음이 데이터의 잘못된 작동을 초래할 수 있습니다. 우리는 이 방법을 사용하여 잡음을 제거할 수 있습니다:
여러 번 측정하고 배열에 저장합니다.
배열을 오름차순으로 정렬합니다.
데이터에서 노이즈를 제거합니다:
가장 작은 값들은 노이즈로 간주하여 무시합니다.
가장 큰 값들은 노이즈로 간주하여 무시합니다.
나머지 중간 값들을 사용하여 평균을 계산합니다.
아래 코드 예제는 20개의 측정을 수행합니다.
다섯 개의 가장 작은 샘플과 다섯 개의 가장 큰 샘플은 노이즈로 간주되어 무시됩니다. 5번째부터 14번째까지 10개의 중간 샘플의 평균을 계산합니다.
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 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 pinfloat filterArray[20]; // array to store data samples from sensorfloat distance; // store the distance from sensorvoidsetup() {// begin serial portSerial.begin (9600);// configure the trigger and echo pins to output modepinMode(TRIG_PIN, OUTPUT);pinMode(ECHO_PIN, INPUT);}voidloop() {// 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAYfor (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure();delay(30); // to avoid untrasonic interfering }// 2. SORTING THE ARRAY IN ASCENDING ORDERfor (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 MonitorSerial.print("distance: ");Serial.print(distance);Serial.println(" cm");}float ultrasonicMeasure() {// generate 10-microsecond pulse to TRIG pindigitalWrite(TRIG_PIN, HIGH);delayMicroseconds(10);digitalWrite(TRIG_PIN, LOW);// measure duration of pulse from ECHO pinfloat duration_us = pulseIn(ECHO_PIN, HIGH);// calculate the distancefloat distance_cm = 0.017 * duration_us;return distance_cm;}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
아래는 이 비디오에서 사용한 전체 코드입니다:
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-ultrasonic-sensor *//* * HC-SR04 + Traffic Light + Buzzer * Arduino UNO R4 */// ================== HC-SR04 ==================#define TRIG_PIN 9#define ECHO_PIN 8// ================== Traffic Light ==================#define GREEN_LED 5#define YELLOW_LED 6#define RED_LED 7// ================== Buzzer ==================#define BUZZER_PIN 10float filterArray[20];float distance;// ===================================================// Buzzer Functions// ===================================================void beep1() {digitalWrite(BUZZER_PIN, HIGH);delay(80);digitalWrite(BUZZER_PIN, LOW);}void beep2() {for (int i = 0; i < 2; i++) {digitalWrite(BUZZER_PIN, HIGH);delay(60);digitalWrite(BUZZER_PIN, LOW);delay(60); }}void beep3() {for (int i = 0; i < 3; i++) {digitalWrite(BUZZER_PIN, HIGH);delay(40);digitalWrite(BUZZER_PIN, LOW);delay(40); }}// ===================================================// Ultrasonic Measure// ===================================================float ultrasonicMeasure() {digitalWrite(TRIG_PIN, LOW);delayMicroseconds(2);digitalWrite(TRIG_PIN, HIGH);delayMicroseconds(10);digitalWrite(TRIG_PIN, LOW);float duration_us = pulseIn(ECHO_PIN, HIGH);float distance_cm = duration_us * 0.017;return distance_cm;}voidsetup() {Serial.begin(9600);pinMode(TRIG_PIN, OUTPUT);pinMode(ECHO_PIN, INPUT);pinMode(GREEN_LED, OUTPUT);pinMode(YELLOW_LED, OUTPUT);pinMode(RED_LED, OUTPUT);pinMode(BUZZER_PIN, OUTPUT);}voidloop() {// ===================================================// 1. Read and Filter Distance// ===================================================for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure();delay(30); }// Sort ascendingfor (int i = 0; i < 19; i++) {for (int j = i + 1; j < 20; j++) {if (filterArray[i] > filterArray[j]) {float temp = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = temp; } } }// Average middle 10 valuesdouble sum = 0;for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10.0;Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm");// ===================================================// 2. Traffic Light + Buzzer// ===================================================if (distance > 16) {digitalWrite(GREEN_LED, LOW);digitalWrite(YELLOW_LED, LOW);digitalWrite(RED_LED, LOW);digitalWrite(BUZZER_PIN, LOW);delay(100); } elseif (distance > 13) {// Green WarningdigitalWrite(YELLOW_LED, LOW);digitalWrite(RED_LED, LOW);digitalWrite(GREEN_LED, HIGH); beep1();delay(720);digitalWrite(GREEN_LED, LOW); } elseif (distance >= 8) {// Yellow WarningdigitalWrite(GREEN_LED, LOW);digitalWrite(RED_LED, LOW);digitalWrite(YELLOW_LED, HIGH); beep2();delay(380);digitalWrite(YELLOW_LED, LOW); } else {// Red DangerdigitalWrite(GREEN_LED, LOW);digitalWrite(YELLOW_LED, LOW);digitalWrite(RED_LED, HIGH); beep3();delay(180);digitalWrite(RED_LED, LOW); }}
아래는 Arduino UNO R4에서 초음파 센서를 사용하는 방법을 단계별로 보여주는 비디오 튜토리얼입니다: