超声波传感器 URM04 V2.0 的使用
最近購買了DFrobot的超聲波傳感器URM04 V2.0, 采用Arduino + Xbee 傳感器擴(kuò)展板V5 + URM04 V2.0 的結(jié)構(gòu),可是程序就是調(diào)不好。從URM04上無法讀取數(shù)據(jù)。參考了Wiki?(這個(gè)Wiki上的東西不可信,2012-02-06注)?中的說明,依然不好使: 問題是無法從傳感器獲取數(shù)據(jù)。
經(jīng)過多次試驗(yàn),終于將程序調(diào)試出來。之前無法獲取數(shù)據(jù),是因?yàn)槲以诩ぐl(fā)測(cè)量后,用一個(gè)循環(huán)死等返回的數(shù)據(jù),但是(不知道是不是我手上的芯片的問題)有時(shí)后傳感器是不返回?cái)?shù)據(jù)的,因此不能死等。修改程序后,只等待一定的時(shí)間,如果超時(shí)后依然沒有數(shù)據(jù)返回,就放棄,而進(jìn)行下一次測(cè)量。
代碼如下:(代碼修改自淘寶賣家wxxmickey發(fā)給我的程序,特此向他表示感謝)
// Measure distance using the URM04V2 ultrasonic sensor. void measureDistance(byte device) {digitalWrite(EN, HIGH);// Trigger distance measurement.uint8_t DScmd[6]={0x55,0xaa,device,0x00,0x01,0x00}; for(int i=0; i<6; i++) {Serial.write(DScmd[i]);DScmd[5] += DScmd[i];}delay(30);// Send command to read measured distance.uint8_t STcmd[6]={0x55,0xaa,device,0x00,0x02,0x00}; for(int i=0; i<6; i++) {Serial.write(STcmd[i]);STcmd[5] += STcmd[i];} delay(3); }// Return last measured distance by the URM04V2 ultrasonic sensor. // -1 means the last measurement is out of range or unsuccessful. int readDistance() {uint8_t data[8];digitalWrite(EN,LOW);boolean done = false;int counter = 0;int result = -1;while(!done){int bytes = Serial.available();if(bytes==8) { for(int i=0; i<8; i++) {data[i] = Serial.read();}result = (int)data[5] * 256 + data[6];done = true;} else {delay(10);counter++;if(counter==5) { // If failed to read measured data for 5 times, give up and return -1.done = true;}}}return result; } // Usage code sample: int EN = 2; // Pin number to enable XBee expansion board V5void setup() {pinMode(EN, OUTPUT);Serial.begin(19200);delay(200);digitalWrite(EN,HIGH);delay(2000); ? }void loop() {measureDistance(0x11);int distance = readDistance();delay(1000); }
方法measureDistance用于激發(fā)測(cè)量,其參數(shù)device用于指定要激發(fā)的URM傳感器的ID,默認(rèn)傳感器ID為0x11,如果你只有一個(gè)傳感器,用0x11就是了。方法readDistance用于返回測(cè)量所得的距離值。如果測(cè)量失敗或是測(cè)量距離超出傳感器可測(cè)范圍,readDistance均返回-1。
注意事項(xiàng):
- URM04 V2.0 的默認(rèn)設(shè)備ID是0x11。
- URM04 V2.0 的波特率為固定值19200。
- URM04 V2.0 初始化的時(shí)候,其上的LED燈會(huì)慢速閃爍4下。
- URM04 V2.0 如果與主板有數(shù)據(jù)交流,其上的LED燈會(huì)一閃一閃的。
- 由于URM04 V2.0 是通過 由于Xbee 傳感器擴(kuò)展板V5 上的RS485傳輸數(shù)據(jù),而RS485又占用了Arduino上的串行口Serial,因此在從電腦往Arduino下載程序的時(shí)候,要把Xbee 傳感器擴(kuò)展板V5從Arduino上拔出。
- Xbee 傳感器擴(kuò)展板V5上的跳線(三個(gè)跳線都要這么做)要撥到標(biāo)有485的那一端。
- 如果想用兩頭都有接口的4P線把URM04和Xbee 傳感器擴(kuò)展板V5連接起來,需要把4P線的一段剪斷,然后接入RS485插頭中。
所使用的設(shè)備圖片: URM04 V2.0
Xbee 傳感器擴(kuò)展板V5
4P線
總結(jié)
以上是生活随笔為你收集整理的超声波传感器 URM04 V2.0 的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于stm32的通信系统,sim800c
- 下一篇: 最详细的制作正式版10 11 OS X