乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      #創(chuàng)客秀#借助超聲波傳感器實(shí)現(xiàn)避障的智能小車 | 雷鋒網(wǎng)

       ID被吃 2016-04-05

      #創(chuàng)客秀#借助超聲波傳感器實(shí)現(xiàn)避障的智能小車

      【編者按】本文的作者是宜昌城老張,轉(zhuǎn)載于他的個(gè)人博客。在這篇文章里面,他向我們介紹如何通過LabVIEW和Arduino、超聲波傳感器等設(shè)備來制作一款可以智能躲避障礙的小車。

      實(shí)驗(yàn)使用上位機(jī)軟件LabVIEW對以Arduino作為下位機(jī)的MakeBlock智能小車進(jìn)行實(shí)時(shí)監(jiān)控。采用URM37V3.2超聲波測距傳感器實(shí)時(shí)測量小車在行駛的過程中與前方障礙物的距離,Arduino將檢測到的測距信息轉(zhuǎn)換為實(shí)際的距離值。在Arduino中實(shí)現(xiàn)避障算法,當(dāng)MakeBlock小車與障礙物的距離小于設(shè)定值時(shí),小車實(shí)施避障方案,從而躲避障礙物。同時(shí),Arduino將檢測到的距離信息發(fā)送給上位機(jī)LabVIEW。

      這次實(shí)驗(yàn)的避障算法是在下位機(jī)Arduino中完成,而不是在遠(yuǎn)端的PC機(jī)完成避障算法。上位機(jī)的LabVIEW界面只是對小車的運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)視。如果想了解如何用遠(yuǎn)端的上位PC機(jī)來實(shí)現(xiàn)對智能車的無線避障遙控,可參見文章《基于LabVIEW測控的MakeBlock智能車避障控制》。

      MakeBlock金屬智能車避障視頻:

      在本文的實(shí)驗(yàn)中,XBee模塊與Arduino之間通過串行接口(即Tx和Rx引腳)進(jìn)行通信。本文使用點(diǎn)對點(diǎn)無線傳輸方式,通過串行接口向XBee模塊寫入命令數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的發(fā)送;當(dāng)XBee模塊接收到數(shù)據(jù)時(shí),通過讀串行接口獲得這些數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的讀取。對于Xbee模塊的使用方法,可詳見博客文章《美國DIGI公司的XBee模塊無線通訊實(shí)驗(yàn)》。

       Xbee模塊與Arduino控制器連接方法

      Xbee模塊與PC機(jī)連接方法

      一、 硬件設(shè)計(jì)

      實(shí)驗(yàn)采用URM37V3.2超聲波傳感器作為外界環(huán)境信息的采集工具。下面,簡要介紹一下與本次實(shí)驗(yàn)有關(guān)的URM37V3.2超聲波傳感器的一些知識。

      URM37V3.2超聲波傳感器是一種多功能的智能傳感器,它可以測量4~500 cm的距離,并且有1cm的分辨率。能夠測量較遠(yuǎn)的距離并且性能穩(wěn)定??赏ㄟ^脈寬輸出的方式來測量數(shù)據(jù),也可以使用R232串口通訊,有較好的可靠性。下面兩個(gè)圖分別是URM37V3.2超聲波傳感器的引腳定義、URM37V3.2超聲波傳感器與Arduino的連線圖。

       URM37V3.2超聲波傳感器引腳示意圖

      URM37V3.2超聲波傳感器TTL方式串口接線圖

      作為一種智能傳感器,該傳感器可以將信號采集、數(shù)字處理和信息傳送融為一體。用戶只需要使用單片機(jī)的TTL電平串口,向傳感器發(fā)出四個(gè)字節(jié)的信息讀取命令:0x22, 0x00, 0x00, 0x22。傳感器接收命令后,會(huì)向單片機(jī)回送四個(gè)字節(jié)的測距信息:0x22, highbyte, lowbyte, sum。這四個(gè)字節(jié)里有兩個(gè)字節(jié)就是16位被測距離信息。如果高位字節(jié)和低位字節(jié)都是 0xFF,這意味著測量無效,超出測量范圍。反之,被測距離就等于高位字節(jié)乘以256再加上低位字節(jié),實(shí)際距離的單位是厘米。

      二、下位機(jī)程序設(shè)計(jì)

      為了獲得距離信息,Arduino需要向URM37 V3.2測距傳感器發(fā)送四個(gè)字節(jié)的測距指令,等待超聲波測距傳感器完成測距任務(wù)后,再接受它返回的四個(gè)字節(jié)的距離信息。并按上文的方法轉(zhuǎn)換為實(shí)際的距離值。如果實(shí)測距離大于40cm,小車?yán)^續(xù)前進(jìn);反之,小車實(shí)施避障策略,及時(shí)左轉(zhuǎn),從而躲避障礙物。同時(shí),Arduino控制器將距離信息通過無線傳輸模塊Xbee發(fā)送給遠(yuǎn)程監(jiān)控的上位機(jī)LabVIEW處理。這里發(fā)送給上位機(jī)處理的有關(guān)距離信息的數(shù)據(jù)前面帶上了標(biāo)識字符“10”,用于上位機(jī)判斷哪個(gè)字節(jié)是有效字符串信息的第一個(gè)字節(jié)。發(fā)送給上位機(jī)的數(shù)據(jù)(字符串)格式是:10+距離數(shù)據(jù)高8位+距離數(shù)據(jù)低8位。下位機(jī)Arduino程序的流程圖如圖所示。

      基于超聲波傳感器避障的程序流程圖

      Arduino程序:

      int E_right =5; //連接電機(jī)1的使能端口到數(shù)字接口5
      int M_right =4; //連接電機(jī)1的轉(zhuǎn)向端口到數(shù)字接口4
      int E_left = 6; //連接電機(jī)2的使能端口到數(shù)字接口6
      int M_left=7; //連接電機(jī)2的轉(zhuǎn)向端口到數(shù)字接口5
      int velocity1=190; //右電機(jī)速度
      int velocity2=250; //左電機(jī)速度
      int USValue = 0; //超聲波實(shí)測距離變量
      boolean flag=true; //設(shè)置循環(huán)標(biāo)識符并初始化為真
      byte DMcmd[4] = {0x22, 0x00, 0x00, 0x22}; //距離命令數(shù)組

      void advance() //聲明前進(jìn)子函數(shù)
      {
      digitalWrite(M_right,HIGH); //右電機(jī)反轉(zhuǎn)
      analogWrite(E_right, velocity1); //右電機(jī)速度調(diào)節(jié)
      digitalWrite(M_left,LOW); //左電機(jī)正轉(zhuǎn)
      analogWrite(E_left, velocity2); //左電機(jī)速度調(diào)節(jié)
      }
      void back() //聲明后退子函數(shù)

      {
      digitalWrite(M_right,LOW); //右電機(jī)正轉(zhuǎn)
      analogWrite(E_right,velocity1); //右電機(jī)速度調(diào)節(jié)
      digitalWrite(M_left,HIGH); //左電機(jī)反轉(zhuǎn)
      analogWrite(E_left,velocity2); //左電機(jī)速度調(diào)節(jié)
      }
      void right()//聲明右轉(zhuǎn)子函數(shù)

      {
      digitalWrite(M_right,LOW); //右電機(jī)正轉(zhuǎn)
      analogWrite(E_right,velocity1); //右電機(jī)速度調(diào)節(jié)
      digitalWrite(M_left,LOW); //左電機(jī)正轉(zhuǎn)
      analogWrite(E_left,velocity2); //左電機(jī)速度調(diào)節(jié)
      }
      void left() //聲明左轉(zhuǎn)子函數(shù)

      {
      digitalWrite(M_right,HIGH); //右電機(jī)反轉(zhuǎn)
      analogWrite(E_right,velocity1); //右電機(jī)速度調(diào)節(jié)
      digitalWrite(M_left,HIGH); //左電機(jī)反轉(zhuǎn)
      analogWrite(E_left,velocity2); //左電機(jī)速度調(diào)節(jié)
      }
      void Stop() //聲明停止子函數(shù)

      {
      digitalWrite(E_right, LOW); //右電機(jī)停
      digitalWrite(E_left, LOW); //左電機(jī)停
      }
      void setup()
      {
      Serial.begin(9600); //串口波特率設(shè)置
      pinMode(M_right, OUTPUT); //設(shè)置輸出引腳
      pinMode(E_right, OUTPUT);
      pinMode(M_left, OUTPUT);
      pinMode(E_left, OUTPUT);
      delay(20); //延時(shí)20ms
      }
      void loop( )
      {
      for(int i=0;i<>
      {
      Serial.print(DMcmd[i],BYTE); //發(fā)送四個(gè)字節(jié)的超聲波測距命令
      }
      delay(75); //延時(shí)75ms
      while(flag)
      {
      if(Serial.available()>0) //如果串口有緩存數(shù)據(jù)
      {
      byte header=Serial.read(); //從測距命令標(biāo)識符0x22開始接收數(shù)據(jù)
      byte highbyte=Serial.read(); //距離數(shù)據(jù)高8位
      byte lowbyte=Serial.read(); //距離數(shù)據(jù)低8位
      byte sum=Serial.read(); //sum為校驗(yàn)和
      if(highbyte==255) //如果高位數(shù)據(jù)位255,超出測量范圍,數(shù)據(jù)無效
      {
      USValue=65525;
      }
      else
      {
      USValue = highbyte*256+lowbyte; //計(jì)算實(shí)際距離值
      if (USValue <>
      {
      //如果距離小于40厘米小車左轉(zhuǎn)500ms
      left();
      delay(500);
      }
      //相反的情況,小車前進(jìn)
      else
      advance();
      }
      Serial.print(10,BYTE); //上傳距離信息的標(biāo)識符
      Serial.print(highbyte,BYTE); //上傳距離數(shù)據(jù)高8位
      Serial.print(lowbyte,BYTE); //上傳距離數(shù)據(jù)低8位
      flag=false; //標(biāo)識符變?yōu)榧?,退出該循環(huán)
      }
      }
      delay(20); // 延時(shí)20ms
      }

      三、上位機(jī)LabVIEW程序設(shè)計(jì)

      編寫LabVIEW程序,通過串口讀取下位機(jī)發(fā)送的距離信息,將提取的信息實(shí)時(shí)顯示在LabVIEW的前面板上,就可以實(shí)時(shí)觀察小車的運(yùn)行狀態(tài)。LabVIEW只需要根據(jù)上文Arduino發(fā)送是信息數(shù)據(jù)格式提取相關(guān)的字符串信息即可。下面是LabVIEW程序的程序框圖。(點(diǎn)擊圖片可以看到大圖)

      #創(chuàng)客秀#借助超聲波傳感器實(shí)現(xiàn)避障的智能小車基于超聲波的智能小車避障的LabVIEW程序框圖

      LabVIEW程序先讀取一個(gè)標(biāo)識字符,如果讀取的是標(biāo)識字符“10”,程序會(huì)繼續(xù)讀取2個(gè)字節(jié)的字符串。通過“字符串值字節(jié)數(shù)組函數(shù)”將其轉(zhuǎn)換為一維數(shù)組后,通過“索引數(shù)組”得到距離數(shù)據(jù)高8位和距離數(shù)據(jù)低8位。LabVIEW將字節(jié)數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制的實(shí)際距離值。16位的二進(jìn)制距離信息到十進(jìn)制實(shí)際距離的轉(zhuǎn)換公式是:實(shí)際距離=256*距離數(shù)據(jù)高8位+距離數(shù)據(jù)低8位。

      下圖是LabVIEW程序的前面板。在前面板上,可以實(shí)時(shí)觀察到小車運(yùn)行時(shí)是否遇到障礙物。由于超聲波測距傳感器相對實(shí)驗(yàn)的場地來說,有較大的測距范圍。因此,在這里顯示了小車運(yùn)行時(shí)與前方障礙物的實(shí)測距離,并通過一定的微分取導(dǎo)算法,得出了小車運(yùn)行時(shí)的近似速度值,以供參考。

      基于超聲波的智能小車避障的LabVIEW前面板

      LabVIEW和Arduino程序源文件請下載:http:///QGn6HWbKMUSjp。

      四、系統(tǒng)調(diào)試

      在LabVIEW的前面板選擇COM4(在實(shí)驗(yàn)中,XBee模塊添加到計(jì)算機(jī)后,所獲得的串口號COM4),并設(shè)置波特率為9600bps。接通智能小車電機(jī)及控制器供電電源。運(yùn)行上位機(jī)LabVIEW程序,通過前面板來觀察小車的運(yùn)行狀態(tài),與小車實(shí)際避障情況比較。實(shí)驗(yàn)結(jié)果表明,LabVIEW前面板讀到的信息與小車實(shí)際運(yùn)行狀況相符,并且裝備超聲波測距傳感器的智能小車可以很好地躲避前方障礙物。

      五、總結(jié)

      本文采用超聲波測距傳感器檢測小車與前方障礙物的實(shí)際距離,通過與預(yù)先設(shè)定的小車轉(zhuǎn)向時(shí)機(jī)的值進(jìn)行比較,在遇到障礙物時(shí)左轉(zhuǎn)一定的角度,實(shí)現(xiàn)避障。實(shí)驗(yàn)中Arduino采集數(shù)據(jù),實(shí)現(xiàn)避障算法,LabVIEW作為上位機(jī)監(jiān)視小車的運(yùn)行狀態(tài)。

      相關(guān)文章:

      全球創(chuàng)客馬拉松上海站:15個(gè)項(xiàng)目展示創(chuàng)客的“一本正經(jīng)”和“不務(wù)正業(yè)”

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多