전자 제품에서 대부분의 경우 초음파 센서는 특정 지점에서 다른 지점까지의 거리를 측정하는 데 사용됩니다. 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에. 회로를 연결하려면 아래 단계를 따르십시오.
- 두 개의 초음파 센서를 사용하십시오. 첫 번째 센서의 수신기와 두 번째 센서의 송신기를 덮습니다. 이 목적을 위해 흰색 덕트 테이프를 사용하고 두 번째 센서의 송신기에서 신호가 나가지 않고 첫 번째 센서의 수신기로 신호가 들어 가지 않도록이 두 가지가 완전히 덮여 있는지 확인하십시오.
- 두 개의 별도 브레드 보드에 두 개의 Arduino를 연결하고 각각의 센서를 연결합니다. 트리거 핀을 Arduino의 9 번 핀에 연결하고 에코 핀을 Arduino의 10 번 핀에 연결합니다. Arduino의 5V로 초음파 센서에 전원을 공급하고 모든 접지를 공유하십시오.
- 수신기 코드를 수신기의 Arduino에 업로드하고 송신기 코드를 송신기의 Arduino에 업로드합니다.
- 이제 수신 측의 직렬 모니터를 열고 측정중인 거리를 확인합니다.
이 프로젝트의 회로도는 다음과 같습니다.
회로도
6 단계 : Arduino 시작하기
아두 이노 IDE에 익숙하지 않더라도 마이크로 컨트롤러 보드와 함께 아두 이노 IDE를 설정하고 사용하는 단계별 절차가 아래에 설명되어 있으므로 걱정하지 마십시오.
- 다음에서 Arduino IDE의 최신 버전을 다운로드하십시오. Arduino.
- Arduino Nano 보드를 노트북에 연결하고 제어판을 엽니 다. 제어판에서 하드웨어와 사운드 . 이제 클릭 장치 및 프린터. 여기에서 마이크로 컨트롤러 보드가 연결된 포트를 찾으십시오. 제 경우에는 COM14 하지만 컴퓨터마다 다릅니다.
포트 찾기
- 도구 메뉴를 클릭하십시오. 그리고 보드를 Arduino Nano 드롭 다운 메뉴에서.
설정 보드
- 동일한 도구 메뉴에서 이전에 확인한 포트 번호로 포트를 설정합니다. 장치 및 프린터 .
포트 설정
- 동일한 도구 메뉴에서 프로세서를 ATmega328P (이전 부트 로더 ).
프로세서
- 아래 첨부 된 코드를 다운로드하여 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 초 동안 기다립니다.}