2
- 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可以啓動,然後我可以給傳感器供電。這對我來說似乎是一個拙劣的解決方法,如果有人能提供一個硬編碼的軟件解決方案,我想要一個!
因爲你是新來的人,當你滿意時,不要忘記標記你的首選答案。 – FeliceM 2013-05-09 04:13:13
感謝您的回覆,FeliceM。我有上拉電阻,而且我還在讀數上使用低通濾波器,因爲讀數的時序並不重要。話雖如此,Tau只有2個。您的建議是去除setup()函數中的OUTPUT引腳的LOW拉低嗎?我對數據表的理解(現在我已經重新閱讀)是,RX在初始校準時需要保持高位。當然,針對OUTPUT和INPUT的pinMode的聲明可以保留在setup()函數中嗎?還是需要從readSonar()函數中調用它們? – Bob 2013-05-09 12:57:48
您應該共有4根導線(接地和+5 V)+(校準和模擬)。在設置中,將校準引腳配置爲OUTPUT。在無效環路中,將引腳用於校準HIGH,然後延遲(120)並讀取模擬引腳以獲取您的測量結果,然後校準LOW,然後再將延遲50)。這應該是全部。加載草圖後,斷開Arduino的電源,然後連接並應該工作。 – FeliceM 2013-05-09 15:19:04