아두이노 우노 R4 초음파 센서

이 튜토리얼은 초음파 센서와 Arduino UNO R4를 사용하여 물체까지의 거리를 측정하는 방법을 가르쳐줍니다. 자세히 알아볼 내용은 다음과 같습니다:

아두이노 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

선연결

아두이노 UNO R4 초음파 센서 배선도

이 이미지는 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로 전송하십시오.
Arduino IDE - 코드 업로드 방법
  • 시리얼 모니터를 엽니다.
  • 초음파 센서 앞에서 손을 흔드세요.
  • 시리얼 모니터에서 손과 센서 간의 거리를 확인하세요.
COM6
Send
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 Show timestamp
Clear output
9600 baud  
Newline  

코드 설명

설명은 위의 Arduino 코드 주석에 있습니다.

초음파 센서 거리 측정에서 노이즈를 필터링하는 방법

초음파 센서의 읽기 값에는 잡음이 포함되어 있습니다. 일부 경우에는 이 잡음이 데이터의 잘못된 작동을 초래할 수 있습니다. 우리는 이 방법을 사용하여 잡음을 제거할 수 있습니다:

  • 여러 번 측정하고 배열에 저장합니다.
  • 배열을 오름차순으로 정렬합니다.
  • 데이터에서 노이즈를 제거합니다:
    • 가장 작은 값들은 노이즈로 간주하여 무시합니다.
    • 가장 큰 값들은 노이즈로 간주하여 무시합니다.
    • 나머지 중간 값들을 사용하여 평균을 계산합니다.

    아래 코드 예제는 20개의 측정을 수행합니다.

    • 다섯 개의 가장 작은 샘플과 다섯 개의 가장 큰 샘플은 노이즈로 간주되어 무시됩니다. 5번째부터 14번째까지 10개의 중간 샘플의 평균을 계산합니다.
    /* * 이 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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

초음파 센서 응용 프로그램

  • 충돌 방지
  • 충만 감지
  • 레벨 측정
  • 근접 감지