2013-05-07 2 views
2

하드웨어 :의 Arduino 초음파 초기화 문제

:

  • 아두 이노 MEGA 2,560
  • 2 × MaxBotix MaxSonar-EZ0

소프트웨어 (에는 전체 프로그램에 의해, 초음파 관련 없음)

void setup() { 
    Serial.begin(9600); 

    //Ultrasonic Left 
    pinMode(26, OUTPUT); 
    pinMode(2, INPUT); 
    digitalWrite(26, LOW); 

    //Ultrasonic Right 
    pinMode(27, OUTPUT); 
    pinMode(3, INPUT); 
    digitalWrite(27, LOW); 
} 

void readSonar() { 
    digitalWrite(26, HIGH); 
    delayMicroseconds(25); 
    digitalWrite(26, LOW); 
    data[0] = pulseIn(2, HIGH); 

    digitalWrite(27, HIGH); 
    delayMicroseconds(25); 
    digitalWrite(27, LOW); 
    data[1] = pulseIn(3, HIGH); 

    return data; 
} 

문제 :

  • Arduino를 처음 부팅 할 때 두 개의 초음파 센서에서 판독 값이 업데이트되지 않습니다. 이 값은 0이 아닌 값으로보고되며 일반적으로 500 - 1500 범위에 있습니다. (전원 공급 장치의 노이즈로 인해 발생할 수있는 가능성이 거의 없음) 약간의 변동이 있지만 초기화되는 값을 유지하는 경향이 있습니다.
  • 이러한 센서의 데이터 시트에 따르면 초기화 단계에서 센서의 14 인치 내에 장애물이 없습니다.
  • 센서에 연결된 케이블 (Arduino 입력 단자가 아닌 센서 뒷면)을 연결 해제했다가 다시 연결하기 만하면 센서에서 정확한 판독 값을 즉시 수신 할 수 있습니다.

이전에이 문제가 발생 했습니까? 내 setup() 함수는 내가 본 예제에서 '정상'으로 보인다. 이 문제를 해결하기 위해 두 센서의 활성 라인에 스위치를 연결했습니다. 이 방법으로 Arduino가 부팅되어 센서 전원을 공급할 수 있습니다. 이것은 나에게 엉망이 된 해결 방법처럼 보이고, 누군가 하드 코딩 된 소프트웨어 솔루션을 원한다면 누군가를 제공 할 수 있습니다!

답변

0

센서의 특성을 보면 Rx를 0으로 시작해야한다는 것이 분명해 보입니다. link을보십시오. 이것이 아마도 Arduino를 작동시킨 후에 센서를 분리해야하는 이유 일 것입니다. 또한 판독 값의 신뢰성을 피하기 위해 풀업 저항이 연결되어 있는지 확인해야합니다.

+0

여기 새로 왔기 때문에 원하는 답변을 기꺼이 받아 들일 때 받아 들였을 때 원하는 답을 표시하는 것을 잊지 마십시오. – FeliceM

+0

답장을 보내 주셔서 감사합니다, FeliceM. 나는 풀업 저항을 가지고 있으며, 판독 값의 타이밍이 중요하지 않기 때문에 판독 값에 로우 패스 필터를 사용하고 있습니다. 즉, Tau는 2입니다. setup() 함수에서 OUTPUT 핀의 LOW 풀을 제거하는 것이 좋습니까? 데이터 시트에 대한 나의 이해는 RX가 초기 캘리브레이션을 위해 높은 상태를 유지할 필요가 있다는 것입니다. 물론 OUTPUT 및 INPUT에 대한 pinMode 선언은 setup() 함수에서도 유지 될 수 있습니까? 또는 readSonar() 함수 내에서 호출해야합니까? – Bob

+0

총 4 개의 전선 (접지 및 +5 V) + (교정 및 아날로그)이 있어야합니다. 설정에서 OUTPUT으로 보정을위한 핀을 설정하십시오. 보이드 루프에서 지연 보정 (120)을위한 핀을 올리고 아날로그 핀을 읽고 측정을 얻은 다음 교정을 낮추십시오. 다른 지연을 넣을 것입니다 (50). 그것은 모두가되어야합니다. 스케치를로드 한 후 Arduino에서 전원을 차단 한 다음 연결하여 작동해야합니다. – FeliceM