아두이노 - 초음파 센서 | Arduino - Ultrasonic Sensor

이 튜토리얼에서 우리는 다음을 배우게 됩니다:

준비물

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×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

초음파 센서에 대하여

초음파 센서 HC-SR04는 초음파를 사용하여 물체까지의 거리를 측정하는 데 사용됩니다.

핀배열

초음파 센서 HC-SR04에는 4개의 핀이 포함되어 있습니다:

  • VCC 핀: VCC(5V)에 연결해야 합니다.
  • GND 핀: GND(0V)에 연결해야 합니다.
  • TRIG 핀: 이 핀은 아두이노로부터 제어 신호(펄스)를 받습니다.
  • ECHO 핀: 이 핀은 아두이노에 신호(펄스)를 보냅니다. 아두이노는 펄스의 지속 시간을 측정하여 거리를 계산합니다.
Ultrasonic Sensor Pinout
image source: diyables.io

작동 원리

이 섹션에는 압도될 수 있는 고급 정보가 포함되어 있습니다. 내용에 대해 확신이 없다면 건너뛰어 다음 섹션으로 이동하십시오.
  1. 마이크로컨트롤러: TRIG 핀에서 10마이크로초 펄스를 생성합니다.
  2. 초음파 센서가 자동으로 초음파를 발생시킵니다.
  3. 초음파는 장애물에 맞고 반사됩니다.
  4. 초음파 센서:
    • 반사된 초음파를 감지합니다.
    • 초음파의 이동 시간을 측정합니다.
  • 초음파 센서: ECHO 핀에 펄스를 생성합니다. 펄스의 지속 시간은 초음파의 이동 시간과 같습니다.
  • 마이크로컨트롤러는 ECHO 핀에서 펄스 지속 시간을 측정한 다음 센서와 장애물 사이의 거리를 계산합니다.
  • 초음파 센서로부터 거리를 측정하는 방법

    초음파 센서에서 거리를 얻으려면, 우리는 단지 두 단계(‘작동 원리’ 부분의 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 핀에 연결됩니다.

    선연결

    Arduino Ultrasonic Sensor Wiring Diagram

    이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

    초음파 센서를 프로그래밍하는 방법

    Arduino의 digitalWrite() 함수와 delayMicroseconds() 함수를 사용하여 핀에서 10마이크로초 펄스를 생성합니다. 예를 들면, 핀 9:

    digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);

    Arduino의 핀에서 pulseIn() 함수를 사용하여 펄스 지속 시간(μs)을 측정합니다. 예를 들어, 핀 8:

    duration_us = pulseIn(8, HIGH);

    거리 계산하기 (cm):

    distance_cm = 0.017 * duration_us;

    아두이노 코드

    /* * ArduinoGetStarted.com, https://arduinogetstarted.com 작성 * * Arduino - 초음파 센서 HC-SR04 * * 선 연결: 초음파 센서 -> Arduino: * - VCC -> 5VDC * - TRIG -> 핀 9 * - ECHO -> 핀 8 * - GND -> GND * * 이곳에서 튜토리얼을 확인할 수 있습니다: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG 핀 int echoPin = 8; // ECHO 핀 float duration_us, distance_cm; void setup() { // 시리얼 포트 시작 Serial.begin (9600); // 트리거 핀을 출력 모드로 설정 pinMode(trigPin, OUTPUT); // 에코 핀을 입력 모드로 설정 pinMode(echoPin, INPUT); } void loop() { // TRIG 핀에 10-마이크로초 펄스 생성 digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // ECHO 핀에서 펄스의 지속 시간 측정 duration_us = pulseIn(echoPin, HIGH); // 거리 계산 distance_cm = 0.017 * duration_us; // 시리얼 모니터에 값 출력 Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

    사용 방법

    • 위의 코드를 복사하고 Arduino IDE로 열기
    • 코드를 Arduino에 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하십시오.
    Arduino IDE - How to Upload Code
    • 시리얼 모니터 열기
    • 초음파 센서 앞에서 손을 움직이세요
    • 시리얼 모니터에서 센서와 손 사이의 거리를 확인하세요
    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  

    코드 설명

    위의 아두이노 코드의 주석 라인에서 설명을 찾을 수 있습니다.

    초음파 센서의 거리 측정에서 잡음을 필터링하는 방법

    초음파 센서로부터의 측정 결과에는 잡음이 포함되어 있습니다. 일부 응용 프로그램에서는 이러한 잡음이 원치 않는 작동을 초래합니다. 다음 알고리즘을 사용하여 잡음을 제거할 수 있습니다:

    • 여러 번 측정한 값을 배열에 저장하기
    • 배열을 오름차순으로 정렬하기
    • 노이즈 필터링하기
      • 가장 작은 몇 개의 샘플은 노이즈로 간주하고 무시하기
      • 가장 큰 몇 개의 측정값은 노이즈로 간주하고 무시하기
      • 중간 샘플들의 평균 값을 구하기

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

      • 가장 작은 5개의 샘플은 노이즈로 간주됩니다 → 이를 무시하세요
      • 가장 큰 5개의 샘플은 노이즈로 간주됩니다 → 이를 무시하세요
      • ⇒ 5번째부터 14번째까지의 중간 10개 샘플의 평균을 구하세요
      /* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG 핀 #define ECHO_PIN 8 // ECHO 핀 float filterArray[20]; // 센서에서 데이터 샘플을 저장하기 위한 배열 float distance; // 센서에서의 거리를 저장 void setup() { // 시리얼 포트 시작 Serial.begin (9600); // 트리거와 에코 핀을 출력 모드로 설정 pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. 여러 측정치를 취하고 배열에 저장 for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // 초음파 간섭을 피하기 위함 } // 2. 배열을 오름차순으로 정렬 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. 노이즈 필터링 // + 가장 작은 5개의 샘플은 노이즈로 간주 -> 무시 // + 가장 큰 5개의 샘플은 노이즈로 간주 -> 무시 // ---------------------------------------------------------------- // => 5번째부터 14번째까지의 10개 중간 샘플의 평균을 구함 double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // 시리얼 모니터에 값 출력 Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // TRIG 핀에 10-마이크로초 펄스를 생성 digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // ECHO 핀에서 펄스의 지속 시간 측정 float duration_us = pulseIn(ECHO_PIN, HIGH); // 거리 계산 float distance_cm = 0.017 * duration_us; return distance_cm; }

    동영상

    비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

    도전하세요

    초음파 센서를 사용하여 다음 프로젝트 중 하나를 수행합니다:

    • RC 자동차를 위한 충돌 방지.
    • 쓰레기통의 가득 참 감지.
    • 쓰레기통의 수준 모니터링.
    • 쓰레기통을 자동으로 열기/닫기. 힌트: Arduino - Servo Motor를 참조하세요.

    추가 지식

    일부 제조업체는 3개의 핀이 있는 초음파 센서를 제공합니다. TRIG 신호와 ECHO 신호가 같은 핀에 있습니다. 이 경우, 센서에 펄스를 생성하고 센서로부터 펄스를 측정하는 두 가지 목적 모두에 단 하나의 아두이노 핀만 사용해야 합니다.

    초음파 센서 응용 분야

    • 충돌 방지
    • 충만 감지
    • 수위 측정
    • 근접 감지

    ※ OUR MESSAGES

    • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!