ESP8266 - 초음파 센서 | ESP8266 - Ultrasonic Sensor

이 튜토리얼은 여러분에게 ESP8266과 초음파 센서를 사용하여 장애물이나 물체까지의 거리를 측정하는 방법을 지시합니다. 구체적으로, 우리는 배울 것입니다:

준비물

1×ESP8266 NodeMCU Amazon
1×Micro USB Cable Amazon
1×Ultrasonic Sensor Amazon
1×Jumper Wires Amazon
1×(Optional) 5V Power Adapter for ESP8266 Amazon
1×(Optional) ESP8266 Screw Terminal Adapter Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

초음파 센서에 대하여

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

초음파 센서 핀배열

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

  • VCC 핀: VCC(5V)에 연결해야 합니다.
  • GND 핀: GND(0V)에 연결해야 합니다.
  • TRIG 핀: 이 핀은 ESP8266에서 오는 제어 신호(펄스)를 받는 곳입니다.
  • ECHO 핀: 이 핀은 신호(펄스)를 ESP8266에 보냅니다. ESP8266은 펄스의 길이를 측정하여 거리를 계산합니다.
Ultrasonic Sensor pinout

작동 방식

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

초음파 센서에서 거리를 얻는 방법

초음파 센서로부터 거리를 계산하기 위해서는 두 단계를 거쳐야 합니다(작동 원리 섹션의 1과 6):

  1. TRIG 핀에 10마이크로초의 펄스를 발생시킵니다.
  2. ECHO 핀에서 펄스 지속 시간을 측정합니다.
  3. 센서와 장애물 사이의 거리를 계산합니다.

거리 계산

우리는 가지고 있습니다:

초음파의 이동 시간(μ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

ESP8266 - 초음파 센서

ESP8266의 두 핀을 사용하여 초음파 센서로부터의 거리를 측정할 수 있습니다: 하나의 핀은 10μs 펄스를 생성하기 위해 TRIG 핀에 연결되고, 다른 핀은 센서로부터의 펄스를 측정하기 위해 ECHO 핀에 연결됩니다.

선연결

ESP8266 NodeMCU Ultrasonic Sensor wiring diagram

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

ESP8266의 핀 배치ESP8266 및 다른 구성 요소에 전원을 공급하는 방법에 대해 더 많이 보십시오.

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

digitalWrite()delayMicroseconds() 함수를 활용하여 ESP8266의 D5 핀에서 10-마이크로초 펄스를 생성하십시오. 예를 들어:

  • DigitalWrite()로 핀을 HIGH로 설정한 후, delayMicroseconds()로 10 마이크로초 동안 지연시킨 다음, digitalWrite()로 핀을 LOW로 설정하십시오.
digitalWrite(D5, HIGH); delayMicroseconds(10); digitalWrite(D5, LOW);

아두이노의 D6 핀에서 펄스 지속 시간(µs)을 측정하기 위해 pulseIn() 함수를 사용하십시오. 예를 들어:

duration_us = pulseIn(D6, HIGH);

거리 계산하기 (cm):

distance_cm = 0.017 * duration_us;

ESP8266 코드

const int TRIG_PIN = D5; // ESP8266의 핀 D5가 초음파 센서의 TRIG 핀에 연결 const int ECHO_PIN = D6; // ESP8266의 핀 D6가 초음파 센서의 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 Monitor에 값 출력 Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

사용 방법

아두이노 IDE에서 ESP8266을 시작하는 방법은 다음과 같은 단계를 따르세요:

  • ESP8266을 처음 사용하는 경우 Arduino IDE에서 ESP8266 환경 설정 방법 튜토리얼을 확인하세요.
  • 다이어그램에 표시된 대로 구성 요소를 연결하세요.
  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하세요.
  • 코드를 복사하고 Arduino IDE에서 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP8266에 컴파일 및 업로드하세요.
How to upload code to ESP8266 NodeMCU using 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  

코드 설명

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

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

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

  1. 여러 측정값을 취하고 배열에 저장하십시오.
  2. 배열을 오름차순으로 정렬하십시오.
  3. 잡음을 필터링하십시오.
    • 가장 작은 샘플 중 일부는 잡음으로 간주됩니다 → 무시하십시오.
    • 가장 큰 샘플 중 일부는 잡음으로 간주됩니다 → 무시하십시오.
    • 중간 샘플의 평균을 계산하십시오.

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

    • 가장 작은 5개의 샘플은 무시해야 합니다.
    • 가장 큰 5개의 샘플은 무시해야 합니다.
    • 5번째에서 14번째까지의 중간 10개 샘플의 평균을 구해야 합니다.
    /* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-ultrasonic-sensor */ #define TRIG_PIN D5 // ESP8266 핀이 초음파 센서의 TRIG 핀에 연결됨 #define ECHO_PIN D6 // ESP8266 핀이 초음파 센서의 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. 잡음 필터링 // + 가장 작은 다섯 개의 샘플은 잡음으로 간주 -> 무시 // + 가장 큰 다섯 개의 샘플은 잡음으로 간주 -> 무시 // ---------------------------------------------------------------- // => 10개의 가운데 샘플(5번째 ~ 14번째) 평균값 얻기 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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

도전하세요

다음 프로젝트 중 하나에 초음파 센서를 사용하세요:

  • 원격 제어 자동차를 위한 충돌 방지 시스템을 구축하세요.
  • 쓰레기통의 가득 찬 정도를 추정하세요.
  • 쓰레기통의 수준을 모니터하세요.
  • 쓰레기통의 개폐를 자동화하세요. 힌트: ESP8266 - 서보 모터를 참조하세요.

초음파 센서 응용 분야

  • 충돌 방지
  • 용량 추정
  • 높이 추정
  • 근처 객체 식별

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