|
注:方法已經過時,新方法使用timer去計時,請看https://code.google.com/p/arduino-new-ping/
超聲波傳感器適用于對大幅的平面進行靜止測距。普通的超聲波傳感器測距范圍大概是2cm~450cm,分辨率3mm(淘寶賣家說的,筆者測試環境沒那么好,個人實測比較穩定的距離10cm~2m左右,超過此距離就經常有偶然不準確的情況發生了,當然不排除筆者技術問題。)
測試對象是淘寶上面最便宜的SRF-04超聲波傳感器,有四個腳:5v電源腳(Vcc),觸發控制端(Trig),接收端(Echo),地端(GND)
附:SRF系列超聲波傳感器參數比較
http://www.acroname.com/robotics/info/articles/devantech/srf.html
012929fin9fr8q8q2i2iik.jpg (23.65 KB, 下載次數: 102)
下載附件
2016-4-14 04:11 上傳
模塊工作原理:
- 采用IO觸發測距,給至少10us的高電平信號;
- 模塊自動發送8個40KHz的方波,自動檢測是否有信號返回;
- 有信號返回,通過IO輸出一高電平,高電平持續的時間就是超聲波從發射到返回的時間.測試距離=(高電平時間*聲速(340m/s))/2;
電路連接方法:
012930bu230wfvkzf23ogv.gif (20 KB, 下載次數: 99)
下載附件
2016-4-14 04:11 上傳
Arduino程序例子:
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低電平發一個短時間脈沖去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //將回波時間換算成cm
cm = (int(cm * 100.0)) / 100.0; //保留兩位小數
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
172919oymwkpkq3c747ew3.jpg (19.5 KB, 下載次數: 102)
下載附件
2016-4-14 04:11 上傳
支持,正好找了一個傳感器,用手水平轉了一圈掃的數據~~
150143zs77y8qphi68s28q.jpg (28.25 KB, 下載次數: 101)
下載附件
2016-4-14 04:11 上傳
右上的平面是電腦的屏幕,旁邊突出來的是熱水壺,右下應該是本人(那個尖尖是啥玩意),左下的平面是座位的隔板,左邊的突出是我的包。左上是空檔,超過100cm的都按100算了。
這種方式可以用來做為智能車判斷路徑的依據哎,一邊走一邊分析數據,就像即時戰略游戲的戰爭黑霧設計一樣,我們的小車就是一個探路兵。
|
|