bluetooth, multiple ultrasonic sensor faults

메카 2016-10-18 (화) 17:38 7년전 3073  
안녕하세요?
메카솔루션에서 [3002]MIZ-6000 HC-06 블루투스 모듈과 [3001] MIZ-6100 HC-SR04 초음파 센서, [2573]KEV-D006 US-015 초음파 센서 를 구매한 적이 있습니다.
문제를 상황별로 설명해드리겠습니다.

상황1. 아두이노 2개, 블루투스 2개, 초음파센서 1개 (블루투스 시리얼 통신 이용)
정상적인 값을 받습니다.

상황2. 아두이노 1개, 초음파센서 3개 (컴퓨터 시리얼 통신)
정상적인 값을 받습니다.

상황3. 아두이노 2개, 블루투스 2개, 초음파센서 3개 (블루투스 시리얼 통신 이용)
간혹 fault 가 납니다. 0 또는 -1, 실제 값보다 훨씬 많은 값을 받습니다. 물론 실험 환경은 초음파 센서는 서로 간섭 안되게 해놓았고, 혹시나 싶어서 다른 종류의 초음파 센서도 사용해보았는데 여전히 fault 가 나더군요.블루투스와 주파수 대역도 비교해보니 달랐습니다.
앞의 두 상황에는 정상적으로 값을 받는데 왜 상황 3에서는 fault 문제가 생기는 알려주실 수 있으신가요?

==================================



안녕하세요 메카솔루션입니다.

적어주신 부품목록만으로는 무었을 구성하신건지 알 수 가 없습니다.

좀더 자세히 정리후 질문주시면 확인후 답변드리도록 하겠습니다.

감사합니다.

담당자: yevgeny


==================================



'-' 는 센서 값의 전달경로 입니다.

상황1.아두이노-아두이노(블루투스), 초음파 센서 1개
아두이노 2개에 각각 블루투스 모듈을 연결한 후 sender에서 초음파센서 1개로 감지하고 소프트웨어 시리얼 통신을 통해 초음파 센서값을 넘겨줍니다.
receiver 쪽에서 센서 값을 확인하면 값이 정상입니다.

상황2.아두이노-컴퓨터, 초음파 센서 3개
아두이노 1개에 초음파센서 3개로 감지한 후 시리얼 통신을 통해 컴퓨터에서 센서값들을 확인합니다. 초음파 센서 3개는 서로 간섭이 되지 않게 나두었습니다.
컴퓨터에서 센서 값들을 확인하면 값이 정상입니다.

상황3.아두이노-아두이노(블루투스), 초음파 센서 3개
아두이노 2개에 각각 블루투스 모듈을 연결한 후 sender 에 초음파 센서 3개를 연결합니다. 초음파 센서 3개는 서로 간섭이 되지 않게 나두었습니다.
소프트웨어 시리얼 통신을 통해 초음파 센서값들을 넘겨줍니다.
receiver 쪽에서 센서 값들을 확인하면 간혹 0이나 -1, 실제 값보다 높은 값이 나옵니다.즉, fault 가 납니다.
혹시나 싶어서 초음파센서의 주파수와 블루투스 모듈의 주파수를 비교해보니 연관성이 없었고, 다른 초음파 센서를 사용해도 마찬가지로 상황 3에서만 fault 가 납니다.
fault 의 원인을 알 수 있을까요?


==================================



안녕하세요 메카솔루션입니다.

제가 질문드린 구성은 회로나 소스코드의 부분입니다.

무었을 테스트했는지는 설명을 해주셨지만 문제가 발생했다면 원인은 테스트를 했다는것이 아니라 그 구성에 대해서 원인이 있을 수 있는 것이기때문에 질문을 해주실때는 회로, 소스코드등 세부적인 부분을 함께 질문하지 않으면 답변을 드리기 어렵습니다.

감사합니다.

담당자: yevgeny


==================================



질문은 위의 질문과 같고 추가적인 내용은 다음 아래와 같습니다.

초음파센서 리시버 소스
1475048437.png



초음파센서 센더 소스 (아래 소스는 상황3인데 상황 1일 경우,배열을 하나의 변수로만 나두었고, 상황 2일 경우, 리시버 소스없이 Serial.println(); 로 확인하였습니다.)
1475048431.png


초음파센서 헤더파일
1475048423.png


다른 초음파센서 소스 (위에 소스가 문제가 있나 싶어서 아래 소스도 사용했는데 결과는 같습니다.)
1475048410.png


상황3. 회로
1475048394.jpg

상황3 fault 발생 (아래에 보시면 -1 로 fault 가 발생한 것을 알 수 있습니다. 이외에도 0의 값을 받거나 실제 거리와 전혀 맞지 않는 값이 나올 때도 있습니다.)

1475048382.png


==================================



안녕하세요 메카솔루션입니다.

문의주신 내용의 소스코드를 확인하니 소스코드에 문제가 있습니다.

*.write함수는 1byte의 변수를 보내는 함수인데 

배열 변수 dis는 long형으로 4byte의 변수입니다.

이렇게 된다면 보내야하는 4byte중.. 3바이트는 누락이 됩니다.

결국 보내야하는 데이터중 일부가 누락이 되었다면 당연히 정상적이 값이 안나오는 것이 맞습니다.

코드를 수정한다면 

long 을 쉬프트에서 1byte씩 4개로 나누어서 전송한다움

수신부에서 나누어진 4바이트를 하나로 묶어야 할듯 합니다.

감사합니다.

담당자: yevgeny


==================================



하지만 센서의 MAX 값을 200으로 정해놨는데 0~255를 넘을리가 없는 것이 첫 번째 의문이고,
두 번째 의문은 답변주신 분의 글이 맞다면, 왜 상황1에서는 fault 가 안 나는 거죠?

P.S. 아 그리고 그림 상에서 sonar2 에 trigpin[2], ehcopin[2]입니다.
      센서 3개가 아니라 2개를

==================================



안녕하세요 메카솔루션입니다.

그렇다면 값을 200으로 정하셨다면 변수형을 long이 아닌 byte형으로 변경하시고 소스코드를 작성하시과 확인하시면 됩니다.

감사합니다.


==================================



fault 가 세 종류로 나옵니다.
0,실제 값 이하의 값,-1 
200을 제한을 해두어서 200을 넘으면 0값으로 나오고
실제 값 이하의 값이 나오는 이유가 답변해주신 담당자 분의 글대로 byte 초과를 해서 그런것이고
-1이 나오는 것은 해결을 못하고 있습니다.
상황1에서는 -1 값이 나지 않는데 상황 3에서는 간혹 센서의 마지막 값이 -1값이 납니다.
예를 들어, 센서 3개를 쓸 때는 마지막에 핀을 꼽은 세번째 센서가 -1값이 나오고, 앞의 두개의 센서는 정상값을 받는 것이죠. 
2개를 쓸 때도 마지막에 핀을 꼽은 두번째 센서가 -1 값이 나옵니다. 마찬가지로 앞의 첫번째 센서는 정상값을 받습니다.
그래서 -1이 나오는 원인이 무엇인가요? 어떻게 해결하면 될까요?



==================================



안녕하세요 메카솔루션입니다.

값의 범위가 200까지면 초음파센서 값을 long형에 저장하지않고 byte형으로 저장하여서 전송하는게 올바르며

값을 받아볼때도 byte형으로 받아보셔야지 에러가 발생하지 않습니다.

또한 Serial.read() 에서 -1가 나오는 경우는 버퍼에 데이터가 없을때(수신받은 데이터가 없음에도 읽으려고 할때) 출력되는 값입니다.

아두이노 홈페이지에 나온 Serial.read() 함수에 대한 정리 자료입니다.
https://www.arduino.cc/en/Serial/Read
파라메터와 리턴에 대한 부분을 읽어주시면 확인할 수 있습니다.

감사합니다.

담당자 : yevgeny
메카리워즈 Image Map


모바일 버전으로 보기