- 필요한 재료 :
- 회로도 :
- HC-SR04 모듈이 실제로 작동하는 방식 :
- 두 개의 초음파 센서 (HC-SR04) 사이의 거리 측정 :
- 송신기 센서 프로그램 :
- 수신기 센서 용 프로그램 :
- 일:
- 즉석 아이디어 – 알려진 거리를 사용하여 센서 보정 :
초음파 센서 (HC-SR04)는 일반적으로 특정 지점에서 물체까지의 거리를 찾는 데 사용됩니다. Arduino로이 작업을 수행하는 것은 매우 쉬웠으며 코드도 매우 간단합니다. 그러나이 기사에서는 이러한 인기있는 HC-SR04 센서로 다른 것을 시도 할 것입니다. 우리는 두 개의 초음파 센서 사이의 거리를 계산해 볼 것입니다. 즉, 하나의 센서는 송신기로 작동하고 다른 센서는 수신기로 작동하도록 만들 것입니다. 이렇게함으로써 우리는 많은 초음파 수신기를 사용하여 하나의 송신기의 위치를 추적 할 수 있습니다. 이 추적을 삼각 측량 이라고 하며 자동 도킹 로봇 수하물 추종자 및 기타 유사한 응용 프로그램에 사용할 수 있습니다. 두 미국 센서 사이 의 거리 찾기 매우 간단한 작업으로 들릴 수 있지만이 프로젝트에서 논의되는 몇 가지 문제에 직면했습니다.
이 기사에서 설명하는 기술은 상당히 정확하지 않으며 수정하지 않는 실제 시스템에서는 유용하지 않을 수 있습니다. 이 문서를 작성하는 동안 저는 저와 비슷한 결과를 얻는 사람을 찾지 못했기 때문에이 작업을 시도하는 사람들이 바퀴를 재발 명 할 필요가 없도록 제가 어떻게 작동하는지에 대한 제 의견을 공유했습니다.
필요한 재료:
- Arduino (2Nos) – 모든 모델
- HCSR04 모듈 (2Nos)
회로도:
하나의 US (초음파) 센서를 송신기로 작동하고 다른 하나는 수신기로 작동하도록 만들 예정이지만 센서의 4 개 핀을 모두 Arduino와 연결해야합니다. 왜 그래야합니까? 이에 대한 자세한 내용은 나중에 설명하지만 지금은 회로도는 다음과 같습니다.
보시다시피 송신기와 수신기의 회로도는 모두 동일합니다. 또한 확인: Arduino 초음파 센서 인터페이스
HC-SR04 모듈이 실제로 작동하는 방식:
더 진행하기 전에 HC-SR04 센서가 어떻게 작동하는지 이해 하겠습니다. 아래 타이밍 다이어그램은 우리가 작업을 이해하는 데 도움이 될 것입니다.
센서에는 타이밍 다이어그램에 표시된대로 거리를 측정하는 데 사용되는 두 개의 핀 트리거 및 에코가 있습니다. 먼저 측정을 시작하려면 송신기에서 초음파를 보내야합니다. 이는 트리거 핀을 10uS로 높게 설정하여 수행 할 수 있습니다. 이 작업이 완료 되 자마자 송신기 핀은 8 개의 US 파를 전송합니다. 이 미국 파동은 물체를 튕겨서 수신기에 의해 수신됩니다.
여기 타이밍 다이어그램은 수신기가 파동을 수신하면 파동이 US 센서에서 이동하여 센서로 다시 도달하는 데 걸리는 시간과 동일한 시간 동안 에코 핀이 높게 설정된다는 것을 보여줍니다. 이 타이밍 다이어그램은 사실이 아닌 것 같습니다.
나는 내 센서의 Tx (송신기) 부분을 덮고 에코 펄스가 높았는지 확인했고, 그렇습니다. 이것은 에코 펄스가 미국 (초음파) 파가 수신되기를 기다리지 않음을 의미합니다. 일단 미국 파동을 전송하면 파동이 다시 돌아올 때까지 높게 유지됩니다. 따라서 올바른 타이밍 다이어그램은 아래 표시된 것과 같아야합니다 (저의 작문 실력이 좋지 않아 죄송합니다)
HC-SR04가 송신기로만 작동하도록 만들기:
HC-SR04를 송신기로만 작동하도록 만드는 것은 매우 간단합니다. 타이밍 다이어그램에 표시된대로 트리거 핀을 출력 핀으로 선언하고 10 마이크로 초 동안 높게 유지해야합니다. 이것은 초음파 버스트를 시작합니다. 따라서 웨이브를 전송하고자 할 때마다 송신기 센서의 트리거 핀을 제어하기 만하면됩니다. 코드는 아래와 같습니다.
HC-SR04를 수신기로만 작동하도록 만들기:
타이밍 다이어그램에서 볼 수 있듯이 트리거 핀과 관련된 에코 핀의 상승을 제어 할 수 없습니다. 따라서 HC-SR04를 수신기로만 사용할 수있는 방법은 없습니다. 그러나 센서의 송신기 부분을 테이프로 덮거나 (아래 그림 참조) 해킹을 사용하거나 미국 파가 송신기 케이스 외부로 빠져 나갈 수 없으며 에코 핀이이 미국 파의 영향을받지 않습니다.
이제 에코 핀을 높이려면이 더미 트리거 핀을 10 마이크로 초 동안 높이면됩니다. 이 수신기 센서가 송신기 센서에 의해 전송 된 미국 파를 받으면 에코 핀이 낮아집니다.
두 개의 초음파 센서 (HC-SR04) 사이의 거리 측정:
지금까지 하나의 센서가 송신기로 작동하고 다른 센서가 수신기로 작동하도록하는 방법을 이해했습니다. 이제 우리는 송신기 센서에서 초음파를 전송하고 수신기 센서로 수신하고 송신기에서 수신기로 전파가 이동하는 데 걸리는 시간을 쉽게 확인해야합니다. 그러나 슬프게도!, 여기에 문제가 있으며 작동하지 않습니다.
송신기 모듈과 수신기 모듈은 멀리 떨어져 있으며 수신기 모듈이 송신기 모듈에서 미국 전파를 수신하면 송신기가이 특정 전파를 언제 보냈는지 알 수 없습니다. 시작 시간을 모르면 소요 시간과 거리를 계산할 수 없습니다. 이 문제를 해결하려면 송신기 모듈이 US 파를 전송했을 때 수신기 모듈의 에코 펄스가 정확히 높게 설정되어야합니다. 즉, 송신기 모듈과 수신기 모듈이 동시에 트리거되어야합니다. 이는 다음과 같은 방법으로 달성 할 수 있습니다.
위의 다이어그램에서 Tx는 송신기 센서를 나타내고 Rx는 수신기 센서를 나타냅니다. 그림과 같이 송신기 센서는 알려진주기적인 지연으로 미국 파를 전송하도록 만들어 질 것이며, 이것이해야 할 전부입니다.
수신기 센서에서 우리는 송신기 핀이 높을 때 트리거 핀을 정확히 높게 만들어야합니다. 따라서 처음에는 수신기 트리거를 무작위로 높게 설정하여 에코 핀이 낮아질 때까지 높게 유지합니다. 이 에코 핀은 송신기에서 미국 파를 수신 할 때만 낮아집니다. 따라서 낮아지면 송신기 센서가 방금 트리거되었다고 가정 할 수 있습니다. 이제이 가정을 통해 에코가 낮아지면 알려진 지연을 기다린 다음 수신기 트리거를 트리거 할 수 있습니다. 이것은 송신기와 수신기 모두의 트리거를 부분적으로 동기화하므로 pulseIn ()을 사용하여 즉각적인 에코 펄스 지속 시간을 읽고 거리를 계산할 수 있습니다.
송신기 센서 프로그램:
송신기 모듈의 전체 프로그램은 페이지 하단에서 찾을 수 있습니다. 주기적으로 송신기 센서를 트리거하는 것 외에는 아무 일도하지 않습니다.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
센서를 트리거하려면 트리거 핀을 10uS 동안 높게 유지해야합니다. 동일한 작업을 수행하는 코드는 위에 나와 있습니다.
수신기 센서 용 프로그램:
수신기 센서에서 센서의 송신기 눈을 덮어 앞에서 설명한 것처럼 더미로 만들었습니다. 이제 위에서 언급 한 기술을 사용하여 두 센서 사이의 거리를 측정 할 수 있습니다. 전체 프로그램은이 페이지 하단에 있습니다. 아래에 몇 가지 중요한 줄이 설명되어 있습니다.
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); 기간 = pulseIn (echoPin, HIGH);
처음에는 Trigger_US () 함수를 사용하여 US 센서를 트리거 한 다음 while 루프를 사용하여 에코 핀이 높게 유지 될 때까지 기다립니다. 값이 낮아지면 미리 정해진 기간을 기다립니다.이 기간은 시행 착오를 통해 결정할 수있는 10 ~ 30 마이크로 초 사이 여야합니다 (또는 아래 제공된 즉석 아이디어를 사용할 수 있습니다). 이 지연 후 동일한 함수를 사용하여 미국을 다시 트리거 한 다음 pulseIn () 함수를 사용하여 파동의 지속 시간을 계산하십시오.
이제 동일한 이전 공식을 사용하여 아래와 같이 거리를 계산할 수 있습니다.
거리 = 기간 * 0.034;
일:
프로그램에 설명 된대로 연결하십시오. 그림과 같이 수신기 센서의 Tx 부분을 덮으십시오. 그런 다음 아래에 주어진 송신기 코드와 수신기 코드를 송신기와 수신기 Arduino에 각각 업로드하십시오. 수신기 모듈의 직렬 모니터를 열면 아래 비디오와 같이 표시되는 두 모듈 사이의 거리를 확인할 수 있습니다.
참고:이 방법은 이념 일 뿐이며 정확하지 않거나 만족스럽지 않을 수 있습니다. 그러나 아래의 즉석 아이디어를 시도하여 더 나은 결과를 얻을 수 있습니다.
즉석 아이디어 – 알려진 거리를 사용하여 센서 보정:
지금까지 설명한 방법은 이상하게도 만족스러워 보이지만 제 프로젝트에는 충분했습니다. 그러나이 방법의 단점과이를 극복하는 방법도 공유하고 싶습니다. 이 방법의 한 가지 주요 단점은 송신기 센서가 미국 파동을 전송 한 직후 수신기의 에코 핀이 낮게 떨어 졌다고 가정한다는 것입니다. 따라서 송신기의 트리거와 수신기의 트리거는 완벽하게 동기화되지 않습니다.
이를 극복하기 위해 처음에 알고있는 거리를 사용하여 센서를 보정 할 수 있습니다. 거리를 안다면 미국 파가 송신기에서 수신기에 도달하는 데 걸리는 시간을 알 수 있습니다. 이 시간을 아래와 같이 Del (D)로 유지합시다.
이제 우리는 송신기의 트리거와 동기화하기 위해 수신기의 트리거 핀을 얼마나 높게 만들어야하는지 정확히 알 수 있습니다. 이 기간은 Known Delay (t) – Del (D)로 계산할 수 있습니다. 시간 제한으로 인해이 아이디어를 테스트 할 수 없었기 때문에 얼마나 정확한지 잘 모르겠습니다. 그래서 당신이 그것을 시도하면 댓글 섹션을 통해 결과를 알려주십시오.