找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 13915|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

基于arduino2560的掃地機(jī)器人源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:239180 發(fā)表于 2017-10-15 19:43 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
硬件:arduino2560  帶電機(jī)邊刷兩個(gè),若干超聲波模塊,滾刷一個(gè),雜物盒一個(gè),詳細(xì)見圖片

arduino源程序如下:
  1. int FEcho = 11;  // Echo回聲腳(P2.0)
  2. int FTrig =10;  //  Trig 觸發(fā)腳(P2.1)
  3. int LEcho = 9;  // Echo回聲腳(P2.0)
  4. int LTrig =8;  //  Trig 觸發(fā)腳(P2.1)
  5. int REcho = 13;  // Echo回聲腳(P2.0)
  6. int RTrig =12;  //  Trig 觸發(fā)腳(P2.1)
  7. int in1 = 4;
  8. int in2 = 5;
  9. int in3 = 22;
  10. int in4 = 23;
  11. int speedpin1=6;
  12. int speedpin2=7;
  13. int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;

  14. void forward()
  15. {
  16. digitalWrite(in1,HIGH);
  17. digitalWrite(in2,LOW);
  18. digitalWrite(in3,HIGH);
  19. digitalWrite(in4,LOW);
  20. analogWrite(speedpin1,60);
  21.   analogWrite(speedpin2,60);
  22. }

  23. void back()
  24. {
  25. digitalWrite(in1,LOW);
  26. digitalWrite(in2,HIGH);
  27. digitalWrite(in3,LOW);
  28. digitalWrite(in4,HIGH);
  29. analogWrite(speedpin1,60);
  30.   analogWrite(speedpin2,60);
  31. }

  32. void turnright()
  33. {
  34. digitalWrite(in1,HIGH);
  35. digitalWrite(in2,LOW);
  36. digitalWrite(in3,HIGH);
  37. digitalWrite(in4,LOW);
  38. analogWrite(speedpin1,70);
  39. analogWrite(speedpin2,0);
  40.   delay(200);
  41.   
  42. }

  43. void turnleft()
  44. {
  45. digitalWrite(in1,HIGH);
  46. digitalWrite(in2,LOW);
  47. digitalWrite(in3,HIGH);
  48. digitalWrite(in4,LOW);
  49. analogWrite(speedpin1,0);
  50.   analogWrite(speedpin2,70);
  51.   delay(200);
  52. }
  53. void stop()
  54. {
  55. digitalWrite(in1,LOW);
  56. digitalWrite(in2,LOW);
  57. digitalWrite(in3,LOW);
  58. digitalWrite(in4,LOW);
  59. }

  60. int Fdistance_test()   // 量出前方距離
  61. {
  62.   digitalWrite(FTrig, LOW);   // 給觸發(fā)腳低電平2μs
  63.   delayMicroseconds(2);
  64.   digitalWrite(FTrig, HIGH);  // 給觸發(fā)腳高電平10μs,這里至少是10μs
  65.   delayMicroseconds(20);
  66.   digitalWrite(FTrig, LOW);    // 持續(xù)給觸發(fā)腳低電
  67.   float Fdistance = pulseIn(FEcho, HIGH);  // 讀取高電平時(shí)間(單位:微秒)
  68.   Fdistance= Fdistance/58;       //為什么除以58等于厘米,  Y米=(X秒*344)/2
  69.   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
  70.   return (int)Fdistance;
  71. }
  72. int Ldistance_test()   // 量出left方距離
  73. {
  74.   digitalWrite(LTrig, LOW);   // 給觸發(fā)腳低電平2μs
  75.   delayMicroseconds(2);
  76.   digitalWrite(LTrig, HIGH);  // 給觸發(fā)腳高電平10μs,這里至少是10μs
  77.   delayMicroseconds(20);
  78.   digitalWrite(LTrig, LOW);    // 持續(xù)給觸發(fā)腳低電
  79.   float Ldistance = pulseIn(LEcho, HIGH);  // 讀取高電平時(shí)間(單位:微秒)
  80.   Ldistance= Ldistance/58;       //為什么除以58等于厘米,  Y米=(X秒*344)/2
  81.   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
  82.   return (int)Ldistance;
  83. }

  84. int Rdistance_test()   // 量出 right方距離
  85. {
  86.   digitalWrite(RTrig, LOW);   // 給觸發(fā)腳低電平2μs
  87.   delayMicroseconds(2);
  88.   digitalWrite(RTrig, HIGH);  // 給觸發(fā)腳高電平10μs,這里至少是10μs
  89.   delayMicroseconds(20);
  90.   digitalWrite(RTrig, LOW);    // 持續(xù)給觸發(fā)腳低電
  91.   float Rdistance = pulseIn(REcho, HIGH);  // 讀取高電平時(shí)間(單位:微秒)
  92.   Rdistance= Rdistance/58;       //為什么除以58等于厘米,  Y米=(X秒*344)/2
  93.   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
  94.   return (int)Rdistance;
  95. }

  96. void setup()
  97. {

  98.   Serial.begin(9600);     // 初始化串口
  99.   pinMode(FEcho, INPUT);    // 定義超聲波輸入腳
  100.   pinMode(FTrig, OUTPUT);   // 定義超聲波輸出腳  
  101.   pinMode(LEcho, INPUT);    // 定義超聲波輸入腳
  102.   pinMode(LTrig, OUTPUT);   // 定義超聲波輸出腳
  103.   pinMode(REcho, INPUT);    // 定義超聲波輸入腳
  104.   pinMode(RTrig, OUTPUT);   // 定義超聲波輸出腳
  105.   pinMode(in1,OUTPUT);
  106.   pinMode(in2,OUTPUT);
  107.   pinMode(in3,OUTPUT);
  108.   pinMode(in4,OUTPUT);

  109.   stop();
  110. }

  111. void loop()
  112. {
  113.   forward();
  114.   delay(500);
  115.   //middleDistance = Fdistance_test();
  116.   //leftDistance = Ldistance_test();
  117.   //rightDistance = Rdistance_test();
  118.   //Serial.print(rightDistance);
  119.         //Serial.print("cm");
  120.         //Serial.println();
  121.         //delay(1000);
  122.   //stop();
  123.   //delay(500);
  124.   middleDistance = Fdistance_test();
  125.   leftDistance = Ldistance_test();
  126.   rightDistance = Rdistance_test();
  127.   if(middleDistance<=20)
  128.   {
  129.     if(leftDistance<=20&rightDistance>20)
  130.     {
  131.       back();
  132.       delay(400);
  133.       turnright();
  134.         delay(1000);
  135.     }
  136.     else if(rightDistance<=20&leftDistance>20)
  137.     {
  138.       back();
  139.       delay(400);
  140.       turnleft();
  141.         delay(1000);
  142.     }
  143.     else if(rightDistance<=20&leftDistance<=20)
  144.     {
  145.       back();
  146.       delay(600);
  147.       turnright();
  148.         delay(1000);
  149.     }
  150.     else
  151.     {
  152.       back();
  153.       delay(600);
  154.       turnright();
  155.       delay(1000);
  156.     }
  157.    }
  158.   
  159.   
  160.   else if(rightDistance<=20)
  161.   {
  162.     if( middleDistance<=20&leftDistance>20)
  163.     {
  164.       back();
  165.       delay(400);
  166.       turnleft();
  167.         delay(1000);
  168.     }
  169.     else if(leftDistance<=20&middleDistance>20)
  170.     {
  171.       back();
  172.       delay(600);
  173.       turnright();
  174.         delay(1000);
  175.     }
  176.     else if(leftDistance<=20&middleDistance<=20)
  177.     {
  178.       back();
  179.       delay(600);
  180.       turnright();
  181.         delay(1000);
  182.     }
  183.     else
  184.     {
  185.       back();
  186.       delay(400);
  187.       turnleft();
  188.       delay(1000);
  189.     }
  190.   
  191.    }
  192.    
  193.    else if(leftDistance<=20)
  194.   {
  195.     if( middleDistance<=20&rightDistance>20)
  196.     {
  197.       back();
  198.       delay(400);
  199.       turnright();
  200.         delay(1000);
  201.     }
  202. ……………………

  203. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
避障程序.zip (1.41 KB, 下載次數(shù): 173)


評(píng)分

參與人數(shù) 3黑幣 +67 收起 理由
createskyblue + 12 詳細(xì)點(diǎn)就好了
QQwert + 5
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:223164 發(fā)表于 2017-10-15 21:45 | 只看該作者
感覺好酷啊,程序看起來倒是不難,沒用過un,實(shí)物制作會(huì)很麻煩嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:308344 發(fā)表于 2018-4-15 00:28 | 只看該作者
感覺很棒,試試
回復(fù)

使用道具 舉報(bào)

地板
ID:310025 發(fā)表于 2018-4-17 14:19 | 只看該作者
不明覺厲
回復(fù)

使用道具 舉報(bào)

5#
ID:417450 發(fā)表于 2018-10-29 18:39 | 只看該作者
感謝QAQ
回復(fù)

使用道具 舉報(bào)

6#
ID:432157 發(fā)表于 2018-11-24 01:06 | 只看該作者
感謝QAQ
回復(fù)

使用道具 舉報(bào)

7#
ID:210641 發(fā)表于 2019-4-5 02:05 | 只看該作者

感覺很棒,試試看
回復(fù)

使用道具 舉報(bào)

8#
ID:617003 發(fā)表于 2020-2-5 17:06 | 只看該作者
請(qǐng)問路徑規(guī)劃是怎么規(guī)劃的
回復(fù)

使用道具 舉報(bào)

9#
ID:712333 發(fā)表于 2020-3-20 16:07 | 只看該作者
能自己充電就好了
回復(fù)

使用道具 舉報(bào)

10#
ID:230374 發(fā)表于 2020-3-29 20:44 | 只看該作者
謝謝分享,學(xué)習(xí)很好
回復(fù)

使用道具 舉報(bào)

11#
ID:716703 發(fā)表于 2020-4-1 11:40 | 只看該作者
很棒啊,謝謝分享
回復(fù)

使用道具 舉報(bào)

12#
ID:801882 發(fā)表于 2020-7-12 08:35 | 只看該作者
路徑規(guī)劃如何實(shí)現(xiàn)的啊
回復(fù)

使用道具 舉報(bào)

13#
ID:731126 發(fā)表于 2020-7-13 17:46 | 只看該作者
硬件連接有嗎
回復(fù)

使用道具 舉報(bào)

14#
ID:421260 發(fā)表于 2020-9-12 06:38 來自手機(jī) | 只看該作者
感興趣,看看,感謝。
回復(fù)

使用道具 舉報(bào)

15#
ID:373684 發(fā)表于 2021-3-1 21:37 | 只看該作者
如果加上攝像頭和用物聯(lián)網(wǎng)遠(yuǎn)程控制就好了
回復(fù)

使用道具 舉報(bào)

16#
ID:1061600 發(fā)表于 2023-1-29 14:29 來自手機(jī) | 只看該作者
下載了試一下看看,好玩。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表