Arduino를 사용하여 두 지점 사이의 거리를 측정하는 방법은 무엇입니까?

전자 제품에서 대부분의 경우 초음파 센서는 특정 지점에서 다른 지점까지의 거리를 측정하는 데 사용됩니다. Arduino 보드에 코드를 작성하고 통합하는 것은 매우 쉽습니다. 초음파 센서 이 작업을 수행합니다. 그러나이 기사에서는 다른 접근 방식을 채택 할 것입니다. 두 개의 개별 Arduino와 통합되는 두 개의 별도 초음파 센서를 사용할 것입니다. 이 두 모듈은 거리가 측정되는 두 개의 다른 지점에 배치됩니다. 하나의 센서는 수신기가되고 다른 하나는 송신기가됩니다. 이렇게하면 많은 초음파 수신기를 사용하여 송신기의 위치를 ​​찾는 것만으로 둘 사이의 거리를 측정 할 수 있습니다. 여기에서 사용하는 기법은 삼각 측량.



Arduino를 사용하여 거리 측정

여기에 사용 된 기법은 작은 거리가있는 소규모 시스템에서만 유용합니다. 대규모로 구현하려면 몇 가지 수정이 반드시 필요합니다. 이 프로젝트를 수행하는 동안 직면 한 모든 과제는 아래에서 설명합니다.



Arduino 및 초음파 센서를 사용하여 거리를 측정하는 방법은 무엇입니까?

프로젝트이면의 요약을 알고 있으므로 계속 진행하여 프로젝트를 시작하기위한 추가 정보를 수집하겠습니다.



1 단계 : 구성 요소 수집 (하드웨어)

프로젝트 도중에 불편을 겪지 않으려면 가장 좋은 방법은 사용할 모든 구성 요소의 전체 목록을 만드는 것입니다. 회로를 만들기 시작하기 전에 두 번째 단계는 이러한 모든 구성 요소에 대한 간략한 연구를 진행하는 것입니다. 이 프로젝트에 필요한 모든 구성 요소의 목록은 다음과 같습니다.



  • 점퍼 와이어
  • 5V AC-DC 어댑터 (x2)

2 단계 : 구성 요소 (소프트웨어) 수집

  • Proteus 8 Professional (다음에서 다운로드 가능 여기 )

Proteus 8 Professional을 다운로드 한 후 회로를 설계하십시오. 여기에 소프트웨어 시뮬레이션을 포함하여 초보자가 회로를 설계하고 하드웨어에 적절한 연결을 만드는 것이 편리 할 수 ​​있습니다.

3 단계 : HCR-05 작동

이제 프로젝트의 주요 개요를 알고 있으므로 계속 진행하여 작업에 대한 간략한 연구를 진행하겠습니다. HCR-05 . 다음 다이어그램을 통해이 센서의 주요 작동을 이해할 수 있습니다.

이 센서에는 두 개의 핀이 있습니다. 트리거 핀,에코 핀 둘 다 두 특정 지점 사이의 거리를 측정하는 데 사용됩니다. 이 프로세스는 센서에서 초음파를 전송하여 시작됩니다. 이 작업은 10us에 대한 trig 핀을 트리거하여 수행됩니다. 이 작업이 완료되는 즉시 송신기에서 8 개의 초음파 파열이 전송됩니다. 이 파동은 공중으로 이동하며, 물체에 부딪히면 센서에 내장 된 수신기가 반격하여 수신합니다.



센서를 반사 한 후 수신기가 초음파를 수신하면 에코 핀 높은 상태로. 이 핀은 초음파가 송신기에서 센서의 수신기로 다시 이동하는 데 걸리는 시간과 정확히 동일한 시간 동안 높은 상태로 유지됩니다.

초음파 센서를 만들려면 송신기 뿐, 출력 핀으로 trig 핀을 만들고이 핀에 10us 동안 높은 펄스를 보냅니다. 이 작업이 완료되는 즉시 초음파 버스트가 시작됩니다. 따라서 전파가 전송 될 때마다 초음파 센서의 트리거 핀만 제어하면됩니다.

초음파 센서를 만들 수있는 방법은 없습니다. 수신기 만 ECO 핀의 상승은 센서의 트리거 핀과 관련이 있기 때문에 마이크로 컨트롤러로 제어 할 수 없기 때문입니다. 하지만 우리가 할 수있는 한 가지는 UV 파가 나오지 않는 덕트 테이프로이 초음파 센서의 송신기를 덮을 수 있다는 것입니다. 그러면이 송신기의 ECO 핀은 송신기의 영향을받지 않습니다.

4 단계 : 회로 작동

이제 우리는 두 센서를 송신기와 수신기로 따로 작동하도록 만들었 기 때문에 여기서 직면 한 큰 문제가 있습니다. 수신기는 초음파가 송신기에서 수신기로 이동하는 데 걸리는 시간을 알지 못합니다.이 전파가 언제 전송되었는지 정확히 알 수 없기 때문입니다.

이 문제를 해결하기 위해 우리가해야 할 일은 높은 초음파가 송신기 센서에서 전송되는 즉시 수신기의 ECO에 신호를 보냅니다. 또는 간단히 말하면 수신기의 ECO와 송신기의 트리거를 동시에 HIGH로 보내야한다고 말할 수 있습니다. 따라서이를 달성하기 위해 송신기의 트리거가 높아지 자마자 수신기의 트리거를 어떻게 든 높게 만들 것입니다. 수신기의이 트리거는 ECO 핀이 갈 때까지 높게 유지됩니다. 낮은 . 수신기의 ECO 핀에서 초음파 신호를 수신하면 LOW가됩니다. 이것은 송신기 센서의 트리거가 방금 HIGH 신호를 받았음을 의미합니다. 이제 ECO가 낮아지면 알려진 지연을 기다렸다가 수신기의 트리거를 HIGH로 설정합니다. 이렇게하면 두 센서의 트리거가 동기화되고 파동의 시간 지연을 알고 거리가 계산됩니다.

5 단계 : 구성 요소 조립

하나의 초음파 센서의 송신기와 다른 하나의 수신기 만 사용하고 있지만 4 개의 핀을 모두 연결해야합니다. 초음파 센서 Arduino에. 회로를 연결하려면 아래 단계를 따르십시오.

  1. 두 개의 초음파 센서를 사용하십시오. 첫 번째 센서의 수신기와 두 번째 센서의 송신기를 덮습니다. 이 목적을 위해 흰색 덕트 테이프를 사용하고 두 번째 센서의 송신기에서 신호가 나가지 않고 첫 번째 센서의 수신기로 신호가 들어 가지 않도록이 두 가지가 완전히 덮여 있는지 확인하십시오.
  2. 두 개의 별도 브레드 보드에 두 개의 Arduino를 연결하고 각각의 센서를 연결합니다. 트리거 핀을 Arduino의 9 번 핀에 연결하고 에코 핀을 Arduino의 10 번 핀에 연결합니다. Arduino의 5V로 초음파 센서에 전원을 공급하고 모든 접지를 공유하십시오.
  3. 수신기 코드를 수신기의 Arduino에 업로드하고 송신기 코드를 송신기의 Arduino에 업로드합니다.
  4. 이제 수신 측의 직렬 모니터를 열고 측정중인 거리를 확인합니다.

이 프로젝트의 회로도는 다음과 같습니다.

회로도

6 단계 : Arduino 시작하기

아두 이노 IDE에 익숙하지 않더라도 마이크로 컨트롤러 보드와 함께 아두 이노 IDE를 설정하고 사용하는 단계별 절차가 아래에 설명되어 있으므로 걱정하지 마십시오.

  1. 다음에서 Arduino IDE의 최신 버전을 다운로드하십시오. Arduino.
  2. Arduino Nano 보드를 노트북에 연결하고 제어판을 엽니 다. 제어판에서 하드웨어와 사운드 . 이제 클릭 장치 및 프린터. 여기에서 마이크로 컨트롤러 보드가 연결된 포트를 찾으십시오. 제 경우에는 COM14 하지만 컴퓨터마다 다릅니다.

    포트 찾기

  3. 도구 메뉴를 클릭하십시오. 그리고 보드를 Arduino Nano 드롭 다운 메뉴에서.

    설정 보드

  4. 동일한 도구 메뉴에서 이전에 확인한 포트 번호로 포트를 설정합니다. 장치 및 프린터 .

    포트 설정

  5. 동일한 도구 메뉴에서 프로세서를 ATmega328P (이전 부트 로더 ).

    프로세서

  6. 아래 첨부 된 코드를 다운로드하여 Arduino IDE에 붙여 넣으십시오. 클릭 업로드 버튼을 눌러 마이크로 컨트롤러 보드의 코드를 굽습니다.

    업로드

코드를 다운로드하려면 여기를 클릭하십시오.

7 단계 : 코드 이해

이 프로젝트에 사용 된 코드는 매우 간단하고 주석이 잘되어 있습니다. 첨부 된 폴더에는 두 개의 코드 파일이 있습니다. 송신기 용 코드와 수신기 측용 코드는 모두 별도로 제공됩니다. 이 코드를 각각의 Arduino 보드 모두에 업로드합니다. 자명하지만 아래에서 간략하게 설명합니다.

송신기 측 코드

1. 처음에는 초음파 센서에 연결될 Arduino 보드의 핀이 초기화됩니다. 그런 다음 코드가 실행되는 동안 시간 및 거리 계산을위한 값을 저장하는 데 사용되는 변수가 선언됩니다.

// 핀 번호 정의 const int trigPin = 9; // 초음파 센서의 trig 핀을 Arduino의 pin9에 연결합니다. const int echoPin = 10; // 초음파 센서의 에코 핀을 Arduino의 핀 10에 연결합니다. // 변수를 장시간 정의합니다. // 초음파가 걸리는 시간을 저장하는 변수 t travel int distance; // 계산 된 거리를 저장하는 변수

2. 무효 설정 () 보드의 전원을 켜거나 활성화 버튼을 눌렀을 때 시작시 한 번만 실행되는 기능입니다. 여기에서 Arduino의 두 핀은 다음과 같이 사용되도록 선언되었습니다. 입력산출 . 이 기능에서 Baudrate를 설정합니다. 전송 속도는 마이크로 컨트롤러가 초음파 센서와 통신하는 속도 (초당 비트 수)입니다.

void setup () {pinMode (trigPin, OUTPUT); // trigPin을 출력으로 설정 pinMode (echoPin, INPUT); // echoPin을 입력 Serial.begin (9600); // 직렬 통신 시작}

삼. 무효 루프 () 루프에서 반복해서 실행되는 함수입니다. 여기에서는 초음파 센서의 Trigger 핀에 HIGH 신호를 보내고 20 마이크로 초 동안 LOW 신호를 보내도록 마이크로 컨트롤러를 코딩했습니다.

void loop () {// trigPin을 10 마이크로 초 동안 HIGH 상태로 설정 digitalWrite (trigPin, HIGH); // 첫 번째 센서의 트리거에 HIGH 신호를 보냅니다. delayMicroseconds (10); // 10 마이크로 초 동안 기다립니다. digitalWrite (trigPin, LOW); // 첫 번째 센서의 트리거에 LOW 신호를 보냅니다. delay (2); // 0.2 초 동안 기다립니다.}

수신기 측 코드

1. 처음에는 초음파 센서에 연결될 Arduino 보드의 핀이 초기화됩니다. 그런 다음 코드가 실행되는 동안 시간 및 거리 계산을위한 값을 저장하는 데 사용되는 변수가 선언됩니다.

// 핀 번호 정의 const int trigPin = 9; // 초음파 센서의 trig 핀을 Arduino의 pin9에 연결합니다. const int echoPin = 10; // 초음파 센서의 에코 핀을 Arduino의 핀 10에 연결합니다. // 변수를 장시간 정의합니다. // 초음파가 걸리는 시간을 저장하는 변수 t travel int distance; // 계산 된 거리를 저장하는 변수

2. 무효 설정 () 보드의 전원을 켜거나 활성화 버튼을 눌렀을 때 시작시 한 번만 실행되는 기능입니다. 여기에서 Arduino의 두 핀은 INPUT 및 OUTPUT으로 사용되도록 선언되었습니다. 이 기능에서 Baudrate를 설정합니다. 전송 속도는 마이크로 컨트롤러가 초음파 센서와 통신하는 속도 (초당 비트 수)입니다.

void setup () {pinMode (trigPin, OUTPUT); // trigPin을 출력으로 설정 pinMode (echoPin, INPUT); // echoPin을 입력 Serial.begin (9600); // 직렬 통신 시작}

삼. 무효 Trigger_US () 두 번째 초음파 센서의 Trig 핀의 Fake Triggering을 위해 호출되는 기능입니다. 두 센서의 트리거 핀의 트리거 시간을 동기화합니다.

void Trigger_US () {// 미국 센서의 가짜 트리거 digitalWrite (trigPin, HIGH); // 두 번째 센서의 트리거 핀에 HIGH 신호를 보냅니다. delayMicroseconds (10); // 10 마이크로 초를 기다립니다. digitalWrite (trigPin, LOW); // 트리거 핀 두 번째 센더에 LOW 신호를 보냅니다.}

네. 무효 Calc () 초음파 신호가 첫 번째 센서에서 두 번째 센서로 이동하는 데 걸리는 시간을 계산하는 데 사용되는 함수입니다.

void Calc () // 초음파가 이동하는 데 걸리는 시간을 계산하는 함수 {duration = 0; // 처음에 0으로 설정된 기간 Trigger_US (); // Trigger_US 함수 호출 while (digitalRead (echoPin) == HIGH); // 높은 지연 (2); // 0.2 초 지연시킵니다 Trigger_US (); // Trigger_US 함수를 호출합니다. duration = pulseIn (echoPin, HIGH); // 소요 시간 계산}

5. 여기에 무효 루프 () 초음파 신호가 첫 번째 센서에서 두 번째 센서로 이동하는 데 걸리는 시간을 사용하여 거리를 계산합니다.

void loop () {Pdistance = 거리; Calc (); // Calc () 함수 호출 distance = duration * 0.034; // 초음파가 커버하는 거리 계산 if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ( 'Measured Distance :'); // 직렬 모니터에 인쇄 Serial.println (distance / 2); // 직렬 모니터에 인쇄} //Serial.print('Distance : '); //Serial.println (거리 / 2); 지연 (500); // 0.5 초 동안 기다립니다.}