2013-05-07 129 views
2

設備:Arduino的超聲波初始化問題

  • Arduino的MEGA 2560
  • 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第一次啓動時,兩個超聲波傳感器的讀數沒有被更新。它們報告爲非零值,通常在500-1500的範圍內。它們波動很小(很可能是由於電源噪聲),但往往保持在它們初始值附近。
  • 根據這些傳感器的數據表,在初始化階段傳感器的14英寸內沒有障礙物。
  • 通過簡單地斷開並重新連接到傳感器的電纜(從傳感器背面,而不是直接連接到Arduino輸入),我可以立即接收來自傳感器的精確讀數。

有沒有人有過這個問題?我的setup()函數在我看過的例子中看起來很「正常」。爲了解決這個問題,我連接了一個用於兩個傳感器有效線路的開關。這樣Arduino可以啓動,然後我可以給傳感器供電。這對我來說似乎是一個拙劣的解決方法,如果有人能提供一個硬編碼的軟件解決方案,我想要一個!

回答

0

如果你看看傳感器的特性,它看起來很清楚,你需要以Rx爲0來啓動它們。看看這個link。這很可能就是你啓動Arduino使其工作後必須斷開傳感器的原因。您還需要確保連接有上拉電阻,以避免讀數不可靠。

+0

因爲你是新來的人,當你滿意時,不要忘記標記你的首選答案。 – FeliceM 2013-05-09 04:13:13

+0

感謝您的回覆,FeliceM。我有上拉電阻,而且我還在讀數上使用低通濾波器,因爲讀數的時序並不重要。話雖如此,Tau只有2個。您的建議是去除setup()函數中的OUTPUT引腳的LOW拉低嗎?我對數據表的理解(現在我已經重新閱讀)是,RX在初始校準時需要保持高位。當然,針對OUTPUT和INPUT的pinMode的聲明可以保留在setup()函數中嗎?還是需要從readSonar()函數中調用它們? – Bob 2013-05-09 12:57:48

+0

您應該共有4根導線(接地和+5 V)+(校準和模擬)。在設置中,將校準引腳配置爲OUTPUT。在無效環路中,將引腳用於校準HIGH,然後延遲(120)並讀取模擬引腳以獲取您的測量結果,然後校準LOW,然後再將延遲50)。這應該是全部。加載草圖後,斷開Arduino的電源,然後連接並應該工作。 – FeliceM 2013-05-09 15:19:04