DIY 초음파 거리 센서. 초음파 거리 측정기 hc-sr04 - 측정 기술 - 도구

Arduino 초음파 거리 센서는 상대적 단순성, 충분한 정확성 및 가용성으로 인해 로봇 공학 프로젝트에서 매우 인기가 있습니다. 장애물을 피하고, 물체의 크기를 파악하고, 방의 지도를 시뮬레이션하고, 물체의 접근 또는 제거를 알리는 데 도움이 되는 장치로 사용할 수 있습니다. 이러한 장치의 일반적인 옵션 중 하나는 초음파 거리 측정기 HC SR04가 포함된 거리 센서입니다. 이 기사에서는 거리 센서의 작동 원리에 대해 알아보고 Arduino 보드에 연결하기 위한 여러 옵션, 상호 작용 다이어그램 및 예제 스케치를 고려합니다.

물체까지의 거리를 결정하는 초음파 센서의 기능은 소나의 원리를 기반으로 합니다. 초음파 빔을 보내고 지연된 반사를 수신하여 장치는 물체의 존재 여부와 물체까지의 거리를 결정합니다. 수신기에서 생성된 초음파 신호는 장애물에서 반사되어 일정 시간이 지나면 다시 되돌아옵니다. 물체까지의 거리를 결정하는 데 도움이 되는 특성이 되는 것은 이 시간 간격입니다.

주목! 작동 원리는 초음파를 기반으로 하기 때문에 이러한 센서는 소리를 흡수하는 물체까지의 거리를 결정하는 데 적합하지 않습니다. 표면이 평평하고 매끄러운 물체가 측정에 가장 적합합니다.

HC SR04 센서에 대한 설명

Arduino 거리 센서는 비접촉식 장치로 매우 정확한 측정과 안정성을 제공합니다. 측정 범위는 2~400cm이며, 작동은 전자기 복사 및 태양 에너지의 영향을 크게 받지 않습니다. HC SR04 Arduino가 포함된 모듈 키트에는 수신기와 송신기도 포함되어 있습니다.

초음파 거리계 HC SR04에는 다음과 같은 기술 매개변수가 있습니다.

  • 공급 전압 5V;
  • 작동 전류 매개변수는 15mA입니다.
  • 패시브 상태의 현재 강도< 2 мА;
  • 시야각 – 15°;
  • 터치 해상도 – 0.3cm;
  • 측정 각도 – 30°;
  • 펄스 폭 - 10 -6초.

센서에는 4개의 리드(표준 2.54mm)가 장착되어 있습니다.

  • 양극형 전원 접점 – +5V;
  • Trig(T) – 입력 신호 출력;
  • 에코(R) – 출력 신호 출력;
  • GND - "접지" 핀.

Arduino용 SR04 모듈 구매처

거리 센서는 상당히 일반적인 구성 요소이며 온라인 상점에서 쉽게 찾을 수 있습니다. 전통적으로 잘 알려진 웹 사이트에서 가장 저렴한 옵션(개당 40-60 루블)입니다.

Arduino용 HC-SR04 거리 센서 모듈 신뢰할 수 있는 공급업체가 제공하는 HC-SR04 초음파 센서의 또 다른 옵션
근접 센서 SR05 초음파 HC-SR05(성능 향상) 신뢰할 수 있는 공급업체의 UNO R3 MEGA2560 DUE용 모듈 HC-SR05 HY-SRF05

Arduino와의 상호 작용 계획

데이터를 얻으려면 다음 작업 순서를 수행해야 합니다.

  • Trig 출력에 10마이크로초 펄스를 적용합니다.
  • Arduino에 연결된 hc sr04 초음파 거리 측정기에서 신호는 40kHz 주파수의 8개 펄스로 변환되어 이미터를 통해 앞으로 전송됩니다.
  • 펄스가 장애물에 도달하면 장애물에서 반사되어 R 수신기에 의해 수신되어 Echo 출력에 입력 신호를 제공합니다.
  • 컨트롤러 측에서는 수신된 신호를 공식을 사용하여 거리로 변환해야 합니다.

펄스 폭을 58.2로 나누면 센티미터 단위의 데이터를 얻고, 148로 나누면 인치 단위의 데이터를 얻습니다.

HC SR04를 Arduino에 연결하기

초음파 거리 센서를 Arduino 보드에 연결하는 것은 매우 간단합니다. 연결 다이어그램이 그림에 나와 있습니다.

접지 핀을 Arduino 보드의 GND 핀에 연결하고 전원 출력을 5V에 연결합니다. Trig 및 Echo 출력을 디지털 핀을 통해 Arduino에 연결합니다. 브레드보드를 ​​사용한 연결 옵션:

HC SR04 작업을 위한 라이브러리

Arduino에서 HC SR04 거리 센서를 더 쉽게 사용하려면 NewPing 라이브러리를 사용할 수 있습니다. 핑 문제가 없으며 몇 가지 새로운 기능이 추가되었습니다.

라이브러리의 기능은 다음과 같습니다.

  • 다양한 초음파 센서로 작업할 수 있는 능력
  • 단 하나의 핀을 통해 거리 센서를 사용할 수 있습니다.
  • 에코 핑이 없을 때 1초 지연이 발생하지 않습니다.
  • 간단한 오류 수정을 위한 디지털 필터가 내장되어 있습니다.
  • 가장 정확한 거리 계산.

NewPing 라이브러리를 다운로드할 수 있습니다.

HC SR04 센서를 이용한 거리 측정 정확도

센서의 정확도는 여러 요인에 따라 달라집니다.

  • 기온과 습도;
  • 물체까지의 거리;
  • 센서를 기준으로 한 위치(방사선 다이어그램에 따름)
  • 센서 모듈 요소의 성능 품질.

모든 초음파 센서의 작동 원리는 공기 중에 전파되는 음파의 반사 현상을 기반으로 합니다. 그러나 물리학 과정에서 알 수 있듯이 공기 중 소리 전파 속도는 공기 자체의 특성(주로 온도)에 따라 달라집니다. 파동을 방출하고 돌아올 때까지의 시간을 측정하는 센서는 파동이 어떤 매체에서 전파될지 전혀 모르고 계산을 위해 일정량을 사용합니다. 평균값. 안에 실제 상황기온 요인으로 인해 HC-SR04는 1~3-5cm의 오차가 있을 수 있습니다.

객체 요소와의 거리가 중요하기 때문에... 인접한 물체로부터의 반사 확률이 증가하고 신호 자체는 거리에 따라 감쇠됩니다.

또한 정확도를 높이려면 센서의 방향을 올바르게 지정해야 합니다. 물체가 방사 패턴의 원뿔 내에 있는지 확인하십시오. 간단히 말해서, HC-SR04의 "눈"은 피사체를 직접 바라보아야 합니다.

오류와 측정 불확실성을 줄이기 위해 일반적으로 다음 작업이 수행됩니다.

  • 값은 평균화됩니다 (여러 번 측정하고 스파이크를 제거한 다음 평균을 찾습니다).
  • 센서(예: )를 사용하여 온도가 결정되고 보정 계수가 적용됩니다.
  • 센서는 서보 모터에 장착되어 "머리를 회전"하여 방사 패턴을 왼쪽이나 오른쪽으로 이동합니다.

거리 센서 사용 예

간단한 보드 프로젝트의 예를 살펴 보겠습니다. 아두이노 우노거리 센서 HC SR04. 스케치에서 물체까지의 거리 값을 받아 Arduino IDE의 포트 모니터에 출력합니다. 물체가 접근하거나 멀어질 때 센서가 신호를 보내도록 스케치와 연결 다이어그램을 쉽게 변경할 수 있습니다.

센서를 Arduino에 연결하기

스케치를 작성할 때 센서 연결을 위해 다음 핀아웃 옵션이 사용되었습니다.

  • VCC: +5V
  • 삼각 – 12핀
  • 에코 - 11핀
  • 접지(GND) - 접지(GND)

스케치 예

외부 라이브러리를 사용하지 않고 비교적 복잡한 버전으로 바로 센서 작업을 시작해 보겠습니다.

이 스케치에서는 다음과 같은 일련의 작업을 수행합니다.

  • 짧은 펄스(2-5 마이크로초)로 거리 센서를 반향정위 모드로 전환합니다. 이 모드에서는 주파수 40KHz의 초음파가 주변 공간으로 전송됩니다.
  • 센서가 반사된 신호를 분석하고 지연을 기반으로 거리를 결정하기를 기다립니다.
  • 우리는 거리 값을 얻습니다. 이렇게 하려면 HC SR04가 ECHO 입력의 거리에 비례하는 펄스를 생성할 때까지 기다리십시오. pulseIn 함수를 사용하여 펄스 지속 시간을 결정합니다. 이 함수는 신호 레벨이 변경되기 전(이 경우 펄스의 하강 에지가 나타나기 전)에 경과된 시간을 반환합니다.
  • 시간을 수신한 후 값을 상수로 나누어 거리(센티미터)로 변환합니다(SR04 센서의 경우 "거기" 신호의 경우 29.1이고 "뒤" 신호의 경우에도 동일하므로 총 58.2가 됩니다). ).

거리 센서가 신호를 읽지 못하는 경우 출력 신호 변환은 짧은 펄스 값(LOW)을 취하지 않습니다. 일부 센서의 지연 시간은 제조업체에 따라 다르므로 위 스케치를 사용할 때 해당 값을 수동으로 설정하는 것이 좋습니다(사이클 시작 시 이 작업을 수행함).

거리가 3m를 초과하여 HC SR04가 제대로 작동하지 않는 경우 지연 시간을 20ms 이상으로 설정하는 것이 좋습니다. 25 또는 30ms.

#define PIN_TRIG 12 #define PIN_ECHO 11 긴 지속 시간, cm; void setup() ( // 직렬 포트 Serial.begin (9600)에서 통신 초기화; // 입력 및 출력 정의 pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); ) void loop() ( // 먼저 2~5 마이크로초 동안 지속되는 짧은 펄스 생성 digitalWrite(PIN_TRIG, LOW); DelayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); // 신호 레벨을 높게 설정하고 약 10 마이크로초 동안 기다립니다. 이 순간 센서가 신호를 보냅니다. 주파수는 40KHz입니다.delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); // 반향탐지기의 음향 신호에 대한 지연 시간 Duration = pulseIn(PIN_ECHO, HIGH); // 이제 시간을 다음으로 변환해야 합니다. distance cm = (기간 / 2) / 29.1; Serial.print("물체까지의 거리: "); Serial.print(cm); Serial.println(" cm."); // 올바른 작동을 위한 측정 간 지연 스케치 지연(250); )

NewPing 라이브러리를 사용하여 스케치

이제 NewPing 라이브러리를 사용한 스케치를 살펴보겠습니다. 코드는 상당히 단순화될 것입니다. 이전에 설명한 모든 작업은 라이브러리 내부에 숨겨져 있습니다. 우리가 해야 할 일은 거리 센서를 연결하고 객체의 메서드를 사용하는 핀을 지정하여 NewPing 클래스의 객체를 생성하는 것뿐입니다. 이 예에서는 거리를 센티미터 단위로 얻으려면 ping_cm()을 사용해야 합니다.

#포함하다 #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // 올바른 것으로 간주할 최대 거리를 결정하는 상수입니다. // 거리를 구하는 데 사용할 메소드가 포함된 객체를 만듭니다. // NewPing 소나 센서의 ECHO 및 TRIG 출력이 연결된 핀 번호(PIN_TRIG, PIN_ECHO, MAX_DISTANCE)를 매개변수로 전달합니다. void setup() ( // 9600 속도로 직렬 포트를 통해 통신을 초기화합니다. Serial.begin(9600); ) void loop() ( // 올바른 작동을 위해 지연 시작이 필요합니다. Delay(50); // 값을 가져옵니다. 거리 센서에서 변수 unsigned int distance = sonar.ping_cm(); // 포트 모니터에 거리를 인쇄합니다. Serial.print(distance); Serial.println("cm"); )

초음파 거리계 HC SR04를 핀 1개로 연결한 예

HC-SR04를 Arduino에 연결하는 것은 단일 핀을 사용하여 수행할 수 있습니다. 이 옵션은 대규모 프로젝트에서 작업 중이고 사용 가능한 핀이 충분하지 않은 경우 유용합니다. 연결하려면 TRIG와 ECHO 핀 사이에 2.2K 저항을 설치하고 TRIG 핀을 Arduino에 연결하면 됩니다.

#포함하다 #define PIN_PING 12 // Arduino 핀은 거리 센서의 트리거 및 에코 핀에 연결됩니다. #define MAX_DISTANCE 200 // 제어할 수 있는 최대 거리(400~500cm)입니다. 새로운핑 소나(PIN_PING, PIN_PING, MAX_DISTANCE); // 핀 및 최대 거리 조정 void setup() ( Serial.begin(9600); // 데이터 및 115200bps의 전송 주파수로 프로토콜을 엽니다. ) void loop() ( 지연(50); // 지연 50 생성된 파동 사이의 ms. 29 ms는 최소 허용 값입니다. unsigned int distanceSm = sonar.ping(); // 신호를 생성하고 지속 시간 매개변수를 µs(uS) 단위로 가져옵니다. Serial.print("Ping: "); Serial. print(distanceSm / US_ROUNDTRIP_CM); // 시간 매개변수를 거리 값으로 변환하고 결과를 표시합니다(0은 허용 한계를 초과함) Serial.println("cm"); )

간략한 결론

초음파 거리 센서는 다재다능하고 대부분의 취미 프로젝트에 사용할 수 있을 만큼 정확합니다. 이 기사에서는 Arduino 보드에 쉽게 연결할 수 있는 매우 인기 있는 HC SR04 센서에 대해 설명합니다(이를 위해서는 즉시 두 개의 무료 핀을 제공해야 하지만 한 개의 핀에 대한 연결 옵션이 있습니다). 센서 작업에는 여러 가지 옵션이 있습니다. 무료 도서관(이 기사에서는 그 중 하나인 NewPing만 설명합니다.) 하지만 그것들 없이도 할 수 있습니다. 센서의 내부 컨트롤러와 상호 작용하는 알고리즘은 매우 간단하므로 이 기사에서 보여주었습니다.

제 경험에 따르면 HC-SR04 센서는 10cm에서 2m까지의 거리에서 1cm 이내의 정확도를 가지고 있으며, 더 짧거나 더 먼 거리에서는 강한 간섭이 발생할 수 있으며 이는 주변 물체 및 사용 방법에 따라 크게 달라집니다. 그러나 대부분의 경우 HC-SR04는 훌륭한 작업을 수행했습니다.

브루노 가반드

거리 측정용 초음파 센서에 대한 간단하고 저렴한 솔루션을 고려하는 이 프로젝트는 회사의 PIC16F877A 마이크로컨트롤러를 기반으로 하지만 소스 코드는 사용자가 다른 마이크로컨트롤러에 적용할 수 있습니다. 센서는 존재 감지기, 로봇, 주차 시스템, 거리 측정 장치 등 맞춤형 설계 및 장치에 내장될 수 있습니다.

고유 한 특징:

  • 소수의 외부 구성 요소;
  • 코드 크기 200바이트;
  • 작동 거리 범위: 30cm - 200cm;
  • 측정 정확도 ±1cm;
  • 측정 한계가 초과되면 표시됩니다.

아시다시피 공기 중에서 소리의 속도는 약 340m/s입니다. 따라서 초음파 센서의 원리는 40kHz 주파수의 초음파 펄스를 보내고 반사된 신호(에코)를 모니터링하는 것입니다. 물론 소리는 들리지 않지만 초음파 센서반사된 충격을 감지할 수 있습니다. 그러므로 펄스와 반사된 초음파 신호의 이동 시간을 알면 거리를 구할 수 있습니다. 이를 2로 나누어 초음파 센서에서 신호가 반사된 첫 번째 장애물까지의 거리를 구합니다.

이 장치는 압전세라믹 초음파 방출기 MA40B8S와 압전세라믹 초음파 센서 MA40B8R을 사용합니다. 개방형. 주요 매개변수는 아래 표에 나와 있습니다.

장치 목적 빈도 방향,
빗발
용량,
pF
지역
발각,
입력
전압,
최대, V
MA40B8S 이미터 40kHz 50(대칭) 2000 0.2 … 6 40
MA40B8R 감지기 40kHz 50(대칭) 2000 0.2 … 6

테스트에는 회사의 디버깅 플랫폼이 사용되었습니다.

그러나 사용자는 최소한 하나의 ADC 채널과 하나의 PWM 채널이 있는 모든 PIC 마이크로컨트롤러를 사용할 수 있습니다.

초음파 센서의 개략도

이미 터는 트랜지스터 BD135를 통해 제어됩니다. 1N4007 다이오드는 역전압으로부터 트랜지스터를 보호하는 데 사용됩니다. 330μH 인덕터 L1과 이미터 자체에 의해 형성된 커패시터의 병렬 연결로 형성된 트랜지스터와 공진 회로를 사용함으로써 이미터의 공급 전압은 약 20V가 되어 감지 범위를 보장합니다. 최대 200cm 이미터는 마이크로컨트롤러 출력에서 ​​직접 제어할 수 있지만 이 경우 거리 범위는 50cm를 초과하지 않습니다.

센서는 마이크로 컨트롤러의 ADC에 직접 연결됩니다(PIC16F877A 사용 시 - ADC의 채널 1). 임피던스 매칭을 위해서는 센서와 병렬로 연결된 저항이 필요합니다.

먼저 초음파 펄스를 보내야 합니다. 40kHz 신호는 하드웨어 PWM 마이크로컨트롤러를 사용하여 쉽게 얻을 수 있습니다. 센서에서 반사된 신호는 ADC로 들어가고 ADC의 분해능은 4mV로 센서에서 데이터를 읽는 데 충분하며 추가 구성 요소가 필요하지 않습니다.

초음파 센서 개발 보드의 외부 모습


이 센서는 가장 간단한 솔루션이므로 몇 가지 단점이 있습니다. 초음파 수신기의 약간의 진동으로 인해 잘못된 측정이 발생할 수 있습니다. 전송된 펄스는 변조되거나 코딩되지 않으므로 외부 초음파 주파수 소스가 측정을 방해할 수 있으며 이로 인해 다음이 발생할 수 있습니다. 잘못된 결과(측정 한계를 넘어서는 중)

이미지의 캡션:

초음파 버스트 - 초음파 충격;
기계적 에코(소프트웨어로 제거) - 기계적 에코(소프트웨어로 제거)
먼 물체에 반사된 초음파 - 먼 물체에 반사된 초음파.

오실로스코프 분할 값: 수평 - 1 ms/div, 수직 - 5 mV/div.

기계적 에코는 지연을 도입하여 소프트웨어에서 제거됩니다. 약 40mV의 진폭을 갖는 반사파는 전송된 펄스로부터 9.5ms 후에 수신되었습니다. 소리의 속도가 340m/s라고 가정하면 다음과 같은 결과를 얻을 수 있습니다.

0.0095 / 2×340 = 1.615m.

실제로는 센서로부터 172cm 떨어진 방의 천장이었고, 디버깅 보드에 설치된 LCD 디스플레이에는 170cm의 값이 표시됐다.

다운로드

PIC16F877A 마이크로컨트롤러(mikroC 컴파일러) 프로젝트의 소스 코드 -

가끔 초음파 거리 측정기 HC-SR04를 구입했습니다. 이 장치는 두 개의 피에조 이미터가 있는 모듈로, 그 중 하나는 이미터 역할을 하고 다른 하나는 초음파 수신기 역할을 합니다. 또한 송신기와 수신기를 제어하는 ​​제어 전자 장치도 포함됩니다. 연결을 위해 모듈에는 4핀 커넥터가 있습니다. 그 중 2개는 전원(5V 필요)을 제공하고 2개는 마이크로컨트롤러와의 통신을 위해 사용됩니다.

여기의 통신 인터페이스는 매우 간단하게 구성되어 있습니다. 10-15 마이크로초의 지속 시간을 가진 짧은 펄스를 입력에 적용하고 출력에서 ​​펄스를 기다립니다. 반사파가 수신기에 도달하자마자 모듈 자체가 거리를 계산하고 최대 25ms의 높은 레벨 임펄스를 에코 레그에 보냅니다. 출력 펄스의 길이는 초음파가 반사된 장애물까지의 거리에 비례합니다. 우리가 해야 할 일은 이 충격을 포착하고, 그 길이를 계산하고, 이 값을 거리로 변환하는 것입니다.

명세서:

  • 공급 전압: 5V
  • 대기 전류:< 2 мА
  • 효과적인 시야각:< 15 °
  • 거리 범위: 2cm - 500cm
  • 해상도: 0.3cm

특성은 모듈 설명서에서 복사되었습니다. 또한 제조업체는 펄스 지속 시간에 따라 거리를 계산하는 공식을 제공합니다.

S=F/58 ; 여기서 S는 센티미터 단위의 거리이고, F는 마이크로초 단위의 펄스 길이입니다.

보시다시피 소리의 속도를 알 필요조차 없습니다.

테스트를 위해 다음 회로를 조립했습니다.

모듈은 마이크로컨트롤러에 직접 연결됩니다. 풀업 저항은 설치할 필요가 없으며 이미 모듈 보드에 있습니다.

따라서 우리는 단 하나의 충동을 포착하고 그 길이를 계산해야 합니다. 처음에 나는 이 목적을 위해 마이크로컨트롤러의 외부 인터럽트 중 하나를 사용하고 싶었고, 리딩 에지(낮은 상태에서 높은 상태로의 전환)와 하강 에지(높은 상태에서 낮은 상태로) 모두에서 인터럽트가 발생해야 했습니다. 즉, 이 인터럽트의 구성을 즉시 변경해야 합니다. 또한 펄스 길이를 측정하는 타이머 중 하나를 사용해야 합니다. 작은 신호를 고정하는 작업에는 너무 복잡합니다. Bascom-AVR에는 이 경우에 대한 특별한 명령이 있습니다. 펄스인 . 다음은 이 명령을 사용하여 신호를 포착하는 방법의 예입니다.

펄스인 , 핀드, 5 , 1

여기 변수에는ㅏ 펄스 길이의 값은 다음과 같이 기록됩니다. 수십 마이크로초다리에서 찍은 Pind.5. 명령 끝에 있는 내용은 높은 수준의 신호를 포착해야 한다는 의미입니다. 0으로 변경하면 컨트롤러가 낮은 레벨의 신호를 포착합니다.

이 명령은 인터럽트나 하드웨어 타이머를 사용하지 않지만 펄스 발생을 감지하고 10μs의 분해능으로 펄스 길이를 기록할 수 있습니다. 이 명령은 펄스 길이를 저장하기 위해 2바이트 변수 유형을 사용하므로 수신 신호의 최대 길이는 655.35ms가 될 수 있습니다. 이것은 현재 작업에 충분하지만 필요한 경우 mcs.lib 라이브러리 파일을 편집하고 기록된 펄스의 최대 지속 시간을 변경할 수 있습니다.

전체 프로그램 목록은 아래와 같습니다

$regfile = "m8def.dat"

$크리스탈 = 8000000

"디스플레이를 MK 포트에 연결하는 구성

구성 액정 = 16 * 2

구성 LCD핀= , 루피= 포트. 5 , 이자형= 포트. 4 , DB4= 포트. 3 , DB5= 포트. 2 , DB6= 포트. 1 , DB7= 포트. 0

구성 포트. 4 = 산출 "트리거 레그 연결용 출력

방아쇠별명 포트. 4

방아쇠= 0

구성 포트. 5 = 입력 "에코 펄스 입력

구성 포트. 7 = 산출 "LED 연결을 위한 구성

주도의별명 포트. 7

주도의= 0

어둑한 처럼 단어 "신호 길이 값이 여기에 복사됩니다.

어둑한 에스처럼 하나의 "저장 거리 변수

상수 케이= 0 . 1725 "펄스 길이를 거리로 변환하는 계수

잠깐만요 50

커서 끄다

Cls

액정 "소나 HC-SR04"

위치하고 있다 2 , 1

액정 "웹사이트"

주도의= 1

잠깐만요 100

주도의= 0

기다리다 3

하다

방아쇠= 1 "우리는 15μs의 지속 시간으로 Portd.4 다리에 자극을 줍니다.

와이투스 15

방아쇠= 0

와이투스 10

펄스인 , 핀드, 5 , 1 "우리는 PinD.5에서 높은 수준의 충동을 포착합니다.

거리 측정기물체까지의 거리를 측정하는 장치이다. 거리 측정기는 다양한 상황에서 로봇을 돕습니다. 간단한 바퀴 달린 로봇은 이 장치를 사용하여 장애물을 감지할 수 있습니다. 비행 드론은 거리 측정기를 사용하여 미리 정해진 고도에서 지상을 호버링합니다. 거리 측정기를 사용하면 특별한 SLAM 알고리즘을 사용하여 방의 지도를 만들 수도 있습니다.

1. 작동 원리

이번에는 가장 널리 사용되는 센서 중 하나인 초음파(미국) 거리 측정기의 작동을 분석하겠습니다. 다양한 수정사항이 있습니다 유사한 장치, 그러나 그들은 모두 반사된 소리의 이동 시간을 측정하는 원리에 따라 작동합니다. 즉, 센서는 특정 방향으로 소리 신호를 보낸 후 반사된 에코를 포착하여 센서에서 장애물까지의 소리의 비행 시간을 계산합니다. 학교 물리학 과정에서 우리는 특정 매질에서 소리의 속도는 일정하지만 매질의 밀도에 따라 달라진다는 것을 알고 있습니다. 공기 중의 소리 속도와 목표물까지의 소리 비행 시간을 알면 다음 공식을 사용하여 소리가 이동한 거리를 계산할 수 있습니다. s = v*t여기서 v는 소리의 속도(m/s)이고 t는 시간(초)입니다. 그런데 공기 중에서 소리의 속도는 340.29m/s입니다. 작업을 수행하기 위해 거리계에는 두 가지 중요한 요소가 있습니다. 디자인 특징. 첫째, 소리가 장애물로부터 잘 반사될 수 있도록 센서는 40kHz 주파수의 초음파를 방출합니다. 이를 위해 센서에는 고주파 사운드를 생성할 수 있는 압전세라믹 이미터가 있습니다. 둘째, 이미 터는 사운드가 모든 방향 (기존 스피커의 경우처럼)으로 퍼지지 않고 좁은 방향으로 퍼지도록 설계되었습니다. 그림은 일반적인 초음파 거리 측정기의 방사 패턴을 보여줍니다. 다이어그램에서 볼 수 있듯이 가장 간단한 초음파 거리 측정기의 시야각은 약 50-60도입니다. 센서가 앞에 있는 장애물을 감지하는 일반적인 사용 사례의 경우 이 시야각이 매우 적합합니다. 초음파는 의자 다리까지 감지할 수 있지만, 예를 들어 레이저 거리 측정기는 이를 감지하지 못할 수도 있습니다. 거리 측정기를 레이더처럼 원으로 회전하여 주변 공간을 스캔하기로 결정하면 초음파 거리 측정기가 매우 부정확하고 시끄러운 사진을 제공합니다. 이러한 목적으로 레이저 거리 측정기를 사용하는 것이 좋습니다. 초음파 거리계의 두 가지 심각한 단점도 주목할 가치가 있습니다. 첫 번째는 다공성 구조의 표면이 초음파를 잘 흡수하므로 센서가 표면까지의 거리를 측정할 수 없다는 것입니다. 예를 들어, 멀티콥터에서 키가 큰 풀이 있는 들판 표면까지의 거리를 측정하기로 결정했다면 매우 모호한 데이터를 얻게 될 가능성이 높습니다. 발포 고무로 덮인 벽까지의 거리를 측정할 때도 동일한 문제가 발생합니다. 두 번째 단점은 음파의 속도와 관련이 있습니다. 이 속도는 측정 프로세스를 더 자주 수행할 만큼 빠르지 않습니다. 로봇 앞 4m 거리에 장애물이 있다고 가정해 보겠습니다. 소리가 앞뒤로 이동하는 데 최대 24ms가 걸립니다. 비행 로봇에 초음파 거리 측정기를 설치하기 전에 7번 측정해야 합니다.

2. 초음파 거리계 HC-SR04

이 튜토리얼에서는 HC-SR04 센서와 Arduino Uno 컨트롤러를 사용하여 작업합니다. 이 인기 있는 거리 측정기는 1~2cm에서 4~6m까지의 거리를 측정할 수 있습니다. 동시에 측정 정확도는 0.5 - 1cm이며 동일한 HC-SR04에도 다양한 버전이 있습니다. 일부는 더 잘 작동하고 다른 일부는 더 나쁩니다. 뒷면의 보드 패턴으로 구별할 수 있습니다. 잘 작동하는 버전은 다음과 같습니다.

실패할 수 있는 버전은 다음과 같습니다.

3. 연결 HC-SR04

HC-SR04 센서에는 4개의 출력이 있습니다. 접지(Gnd)와 전원(Vcc) 외에 Trig와 Echo도 있습니다. 이 두 핀은 모두 디지털이므로 Arduino Uno의 모든 핀에 연결합니다.
HC-SR04 접지 VCC 삼각 에코
아두이노 우노 접지 +5V 3 2
장치의 개략도 레이아웃 모양

4. 프로그램

따라서 센서가 프로빙 초음파 펄스를 전송하도록 명령한 다음 그 반환을 기록해 보겠습니다. HC-SR04의 타이밍 다이어그램이 어떻게 보이는지 살펴보겠습니다.
다이어그램은 측정을 시작하려면 출력에서 ​​생성해야 함을 보여줍니다. 삼각양의 펄스 길이는 10 µs입니다. 이후 센서는 일련의 8개 펄스를 방출하고 출력 레벨을 높입니다. 에코, 반사된 신호를 기다리는 모드로 전환됩니다. 거리 측정기가 소리가 돌아왔다는 것을 감지하면 포지티브 펄스가 완료됩니다. 에코. 측정을 시작하려면 Trig에서 펄스를 생성하고 Echo에서 펄스 길이를 측정하면 간단한 공식을 사용하여 거리를 계산할 수 있습니다. 해보자. int echoPin = 2; int trigPin = 3; void setup() ( Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); ) void loop() ( int 지속 시간, cm; digitalWrite(trigPin, LOW); 지연마이크로초(2); digitalWrite (trigPin, HIGH); 지연마이크로초(10); digitalWrite(trigPin, LOW); 지속 시간 = pulseIn(echoPin, HIGH); cm = 지속 시간/58; Serial.print(cm); Serial.println("cm"); 지연 (100); ) 기능 펄스인 echoPin 레그의 포지티브 펄스 길이를 마이크로초 단위로 측정합니다. 프로그램에서는 지속 시간 변수에 소리의 비행 시간을 기록합니다. 앞서 알아냈듯이 시간에 소리의 속도를 곱해야 합니다. s = 지속 시간 * v = 지속 시간 * 340m/s소리의 속도를 m/s에서 cm/μs로 변환: s = 지속 시간 * 0.034m/μs편의상 소수를 일반 분수로 변환합니다. s = 기간 * 1/29 = 기간 / 29이제 소리가 두 가지 필수 거리, 즉 목표물과 뒤로 이동했다는 것을 기억해 봅시다. 모든 것을 2로 나누자: s = 기간 / 58이제 우리는 프로그램의 58번이 어디서 왔는지 압니다! Arduino Uno에 프로그램을 로드하고 직렬 포트 모니터를 엽니다. 이제 센서를 다양한 물체에 대고 모니터에서 계산된 거리를 살펴보겠습니다.

작업

이제 거리계를 사용하여 거리를 계산할 수 있으므로 몇 가지 유용한 장치를 만들어 보겠습니다.
  1. 건설 거리 측정기. 프로그램은 거리계를 사용하여 100ms마다 거리를 측정하고 그 결과를 기호 LCD 디스플레이에 표시합니다. 편의상 장치를 작은 케이스에 넣고 배터리로 전원을 공급할 수 있습니다.
  2. 초음파 지팡이. 측정된 거리에 따라 서로 다른 주파수로 부저를 울리는 프로그램을 작성해 보겠습니다. 예를 들어, 장애물과의 거리가 3미터 이상인 경우 0.5초에 한 번씩 부저가 울립니다. 1m 거리에서 - 100ms마다 한 번씩. 10cm 미만 - 계속해서 경고음이 울립니다.

결론

초음파 거리 측정기는 수천 대의 로봇에서 해당 기능을 잘 수행한 사용하기 쉽고 저렴하며 정확한 센서입니다. 수업에서 배웠듯이 센서에는 로봇을 만들 때 고려해야 할 단점이 있습니다. 좋은 해결책은 레이저 거리 측정기와 쌍을 이루는 초음파 거리 측정기를 사용하는 것입니다. 이 경우 서로의 단점을 보완하게 됩니다.

HC-SR04는 로봇 공학에서 가장 일반적이고 저렴한 거리 측정기 중 하나입니다. 0.3-1cm의 적절한 정확도로 2cm에서 4m(어쩌면 그 이상)까지의 거리를 측정할 수 있습니다. 출력은 디지털 신호이며 지속 시간은 장애물까지의 거리에 비례합니다.

초음파 거리측정기

나는 이 센서를 오래 전에 구입했고 거의 잊어버린 채 상자 안에 누워 있었습니다. 그러나 한 프로젝트의 틀 내에서 그것은 열린 빛으로 옮겨졌고 참고로 그것과 전압계 보드를 기반으로 상당히 소형 거리 측정기가 구축되었습니다.

초음파 거리계 HC-SR04

센서 특성:

전력 - 5V
전류 소비: 2mA 미만
유효 시야각 - 15도
측정 거리 - 2cm - 5m
정확도 - 3mm
센서 문서에서 가져옴

HC-SR04의 작동 원리

작동 원리

모듈에는 4개의 핀이 있으며 그 중 2개는 전원 접지 및 +5V이고 2개는 데이터용입니다. 모듈은 다음과 같은 방식으로 폴링됩니다. 지속 시간이 10μs인 펄스가 Trig 핀으로 전송됩니다. 거리 측정기는 8개의 초음파 40KHz 펄스 패키지를 생성합니다. 대부분의 표면에서 반사되어 도중에 사라지지 않으면 다시 돌아옵니다. Trig에 신호를 보낸 직후, 우리는 Echo 출력에서 ​​150μs에서 25ms까지 지속되는 긍정적인 응답 신호를 기대하기 시작합니다. 이는 물체까지의 거리에 비례합니다. 보다 정확하게는 센서에서 장애물까지의 이동 시간입니다. 응답이 없으면(센서가 에코를 듣지 못함) 신호는 38ms 동안 반환됩니다. 물체(장애물)까지의 거리는 다음의 간단한 공식을 사용하여 계산됩니다.

여기서 L은 물체까지의 거리(센티미터)이고 F는 에코 핀의 펄스 길이입니다.
권장되는 센서 폴링 시간은 50ms 또는 20Hz입니다.

이 모듈의 첫 번째 테스트는 모듈의 응답을 포착한 디지털 오실로스코프를 사용하여 수행되었으며 수동으로 Trig를 + 전원으로 빠르게 단락시켜 시작 10μs 펄스를 얻으려고 했습니다. 절반의 경우에는 [:)] 효과가 있었습니다.

설계

센서는 공통 양극이 있는 전압계 보드에 연결되었으며 작동하도록 약간 수정되었습니다(커패시터가 있는 불필요한 분배기가 제거되고 RA3의 출력이 추가되었습니다). 전압계 버전 5의 마이크로컨트롤러(PIC16F688)가 사용되었으며, 초음파 거리 측정기에 대한 펌웨어가 수정되었습니다.