아두이노 초음파 센서 고장 여부에 대해 드립니다 초음파 센서를 아래 코드와 같이 아두이노와 연결하고 동작을 시켜 보았는데

아두이노 초음파 센서 고장 여부에 대해 드립니다

cont
초음파 센서를 아래 코드와 같이 아두이노와 연결하고 동작을 시켜 보았는데 거리 측정도 안 되고 - 부호의 특정 값만 계속 나오고 있는데 이 부분은 센서의 고장인 걸까요? 배선은 크게 잘못된 부분은 없는 거 같은데 의문이네요.. #define trigPin 13#define echoPin 12int duration;float distance;void setup(){  Serial.begin(9600);  pinMode(trigPin,OUTPUT);  pinMode(echoPin,INPUT);}   void loop(){  digitalWrite(trigPin,HIGH);  delayMicroseconds(10);  digitalWrite(trigPin,LOW);  duration=pulseIn(echoPin,HIGH);  distance=duration/58.82;  Serial.print("distance:");  Serial.print(distance);  Serial.println("cm");  delay(500);} 

코드 구조상 음수가 나올 수 없는 코드입니다.

pulseIn함수는 반드시 양수만을 return하는 함수이며,

이 return값을 이용하여 distance값을 계산하므로

결론적으로 나오게 되는 값은 반드시 양수가 나오게 됩니다.

결국 시뮬레이터를 돌려보면 아무 문제없이 작동하는 코드입니다.

예상되는 문제점은 2가지가 있습니다.

1. 초음파 센서쪽 배선의 접촉불량

2. 초음파 센서의 고장(반응 없음)

3. 배선 오류.

배선을 다시 한번 확인해보시고 접촉불량의 가능성도 확인해보세요.

그러고도 문제가 없으면 센서의 고장이라 생각하셔도 되겠습니다.

음수값이 나오는 것은 'duration'을 int로 선언해서 그럴 것입니다.

애당초 pulseIn함수는 return값이 unsigned long 타입 입니다.

그러므로 pulseIn함수의 결과값을 받는 변수는 unsigned long으로 선언하는게 맞죠.

다른 원인으로 인해 얻게 된 초과값으로 인해 오버플로우가 발생하면서 음수값이 되는 것이라 여겨집니다.

음수의 특정값만 나온다는 것을 보면 아마도 pulseIn함수에 설정된 최대 대기 시간만큼과 int값의 최대치에 따라 나오는 값이라 여겨집니다.

그러므로 duration을 int로 선언하지 말고 unsigned long으로 선언하시면 음수값이 나오는 현상은 없앨 수 있겠죠.





참아야지! 참아라! 그러면 잘 되어 갈 걸세. 친구여, 정말 자네 말이 맞네. 세상 사람들 틈에 끼여 날마다 일에 쫓기며, 다른 사람들이 하는 일과 그들의 행동을 보기 시작한 이후로 나는 나 지신과 휠씬 더 잘 타협할 수 있게 되었네. 젊은 베르테르의 슬픔 - 괴테