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

이 튜토리얼은 여러분이 아두이노 나노와 초음파 센서를 사용하여 장애물이나 물체까지의 거리를 측정하는 방법을 지시합니다. 자세히 말씀드리면, 우리는 배울 것입니다:

준비물

1×Arduino Nano Amazon
1×USB A to Mini-B USB cable 쿠팡 | Amazon
1×Ultrasonic Sensor 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Nano Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

초음파 센서에 관하여

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

초음파 센서 핀배열

HC-SR04 초음파 센서에는 네 개의 핀이 있습니다:

  • VCC 핀: VCC(5V)에 연결해야 합니다.
  • GND 핀: GND(0V)에 연결해야 합니다.
  • TRIG 핀: Arduino Nano로부터 제어 신호(펄스)를 받습니다.
  • ECHO 핀: 신호(펄스)를 Arduino Nano로 보냅니다. Arduino Nano는 펄스의 길이를 측정하여 거리를 계산합니다.
Ultrasonic Sensor pinout

작동 원리

이 섹션에는 압도될 수 있는 고급 정보가 포함되어 있습니다. 내용에 대해 확신이 없다면 건너뛰어 다음 섹션으로 이동하십시오.
  • 아두이노 나노는 초음파 센서가 초음파를 방출하도록 TRIG 핀에서 10-마이크로초 펄스를 생성합니다.
  • 파동이 장애물에 부딪히면 반사됩니다.
  • 초음파 센서는 반사된 파동을 감지하고 그 이동 시간을 측정할 수 있습니다.
  • 센서는 초음파의 이동 시간과 같은 기간 동안 ECHO 핀으로 펄스를 생성합니다.
  • 아두이노 나노는 ECHO 핀에서 펄스 기간을 측정하고 센서와 장애물 사이의 거리를 계산합니다.

초음파 센서로부터 거리를 얻는 방법

초음파 센서로부터의 거리를 계산하기 위해서는 아두이노 코드를 작성하여 두 단계(《How It Works》의 1과 6)만 수행하면 됩니다:

  • 아두이노 나노는 TRIG 핀에서 10마이크로초 펄스를 생성합니다.
  • 아두이노 나노는 ECHO 핀에서 펄스 지속 시간을 측정합니다.
  • 그런 다음, 아두이노 나노는 측정된 펄스 지속 시간을 사용하여 센서와 장애물 사이의 거리를 계산합니다.

거리 계산

우리는 가지고 있습니다:

초음파의 이동 시간(μs): travel_time = pulse_duration

초음파의 속도: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/μs

그래서:

초음파의 이동 거리(cm): travel_distance = 속도 × 이동 시간 = 0.034 × 펄스 지속 시간

센서와 장애물 사이의 거리(cm): 거리 = 이동 거리 / 2 = 0.034 × 펄스 지속 시간 / 2 = 0.017 × 펄스 지속 시간

아두이노 나노 - 초음파 센서

아두이노 나노의 핀은 10마이크로초 펄스를 생성하고, 펄스 기간을 측정할 수 있습니다. 이를 통해 울트라소닉 센서에서 물체까지의 거리를 결정하기 위해 아두이노 나노의 두 핀을 사용할 수 있습니다. 우리가 해야 할 일은 다음과 같습니다:

  • 아두이노 나노의 한 핀을 초음파 센서의 TRIG 핀에 연결하십시오. 이 아두이노 나노 핀은 센서의 TRIG 핀에 10μs 펄스를 생성하는 데 사용됩니다.
  • 아두이노 나노의 다른 핀을 초음파 센서의 ECHO 핀에 연결하십시오. 이 아두이노 나노 핀은 센서에서 오는 펄스를 측정하는 데 사용됩니다.

선연결

Arduino Nano ultrasonic sensor wiring diagram

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

초음파 센서를 위한 프로그래밍 방법

digitalWrite()delayMicroseconds() 함수를 활용하여 아두이노의 3번 핀에서 10 마이크로초 펄스를 생성합니다. 예를 들어:

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

아두이노의 2번 핀에서 펄스 지속 시간(마이크로초 단위)을 pulseIn() 함수를 사용하여 측정하십시오. 예를 들어:

duration_us = pulseIn(2, HIGH);

거리(센티미터)를 계산하십시오:

distance_cm = 0.017 * duration_us;

아두이노 나노 코드

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // 아두이노 나노 핀이 초음파 센서의 TRIG 핀에 연결됨 #define ECHO_PIN 2 // 아두이노 나노 핀이 초음파 센서의 ECHO 핀에 연결됨 float duration_us, distance_cm; void setup() { // 시리얼 포트 시작 Serial.begin (9600); // 트리거 핀을 출력 모드로 설정 pinMode(TRIG_PIN, OUTPUT); // 에코 핀을 입력 모드로 설정 pinMode(ECHO_PIN, INPUT); } void loop() { // TRIG 핀에 10마이크로초 펄스를 생성. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // ECHO 핀에서 펄스 기간 측정 duration_us = pulseIn(ECHO_PIN, HIGH); // 거리 계산 distance_cm = 0.017 * duration_us; // 값을 시리얼 모니터에 출력 Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

사용 방법

  • 코드를 복사하고 Arduino IDE로 열어주세요.
  • 그런 다음, Arduino IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 Arduino Nano로 업로드하세요.
How to upload code to Arduino Nano
  • 시리얼 모니터를 엽니다
  • 초음파 센서 앞에 손을 놓으세요
  • 시리언 모니터에 센서와 손 사이의 거리가 표시되는 것을 확인하세요
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  

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

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

초음파 센서의 측정 결과에는 소음이 포함될 수 있으며, 이는 일부 응용 프로그램에서 원치 않는 작동을 유발할 수 있습니다. 소음을 제거하기 위해, 다음 알고리즘을 사용할 수 있습니다:

  1. 여러 개의 측정값을 취하고 배열에 저장하세요.
  2. 배열을 오름차순으로 정렬하세요.
  3. 다음 방법으로 잡음을 제거하세요:
    • 가장 작은 샘플은 잡음으로 간주되어 무시되어야 합니다.
    • 가장 큰 샘플은 잡음으로 간주되어 무시되어야 합니다.
    • 중간 샘플들의 평균을 취하세요.

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

    • 가장 작은 표본 다섯 개를 무시하세요.
    • 가장 큰 표본 다섯 개를 무시하세요.
    • 다섯 번째에서 열네 번째까지 중간 표본 열 개의 평균을 구하세요.
    /* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // 아두이노 나노 핀이 초음파 센서의 TRIG 핀에 연결됨 #define ECHO_PIN 2 // 아두이노 나노 핀이 초음파 센서의 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번째부터 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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

도전하세요

다음 프로젝트 중 하나에서 초음파 센서를 사용하십시오:

  • 원격 제어 자동차용 충돌 회피 시스템 구축.
  • 쓰레기통의 가득 찬 정도를 설정하기.
  • 쓰레기통의 수준 추적하기.
  • 쓰레기통을 자동으로 열고 닫기. 힌트: 아두이노 나노 - 서보 모터를 참조하세요.

초음파 센서 응용 분야

  • 충돌 회피
  • 만재 감지
  • 수위 측정
  • 근접 감지

※ 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!