標(biāo)題: 基于arduino2560的掃地機(jī)器人源程序 [打印本頁(yè)]

作者: lianshangni0922    時(shí)間: 2017-10-15 19:43
標(biāo)題: 基于arduino2560的掃地機(jī)器人源程序
硬件: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)



作者: Laptop    時(shí)間: 2017-10-15 21:45
感覺好酷啊,程序看起來倒是不難,沒用過un,實(shí)物制作會(huì)很麻煩嗎?
作者: 1603070112    時(shí)間: 2018-4-15 00:28
感覺很棒,試試
作者: AOisiyue    時(shí)間: 2018-4-17 14:19
不明覺厲
作者: Knight_Yukii    時(shí)間: 2018-10-29 18:39
感謝QAQ
作者: leoma71    時(shí)間: 2018-11-24 01:06
感謝QAQ
作者: qqww    時(shí)間: 2019-4-5 02:05

感覺很棒,試試看
作者: Luolo    時(shí)間: 2020-2-5 17:06
請(qǐng)問路徑規(guī)劃是怎么規(guī)劃的
作者: 啦啦啦啦啦啦10    時(shí)間: 2020-3-20 16:07
能自己充電就好了

作者: dongfang08    時(shí)間: 2020-3-29 20:44
謝謝分享,學(xué)習(xí)很好
作者: wsy06    時(shí)間: 2020-4-1 11:40
很棒啊,謝謝分享
作者: 137666hwq    時(shí)間: 2020-7-12 08:35
路徑規(guī)劃如何實(shí)現(xiàn)的啊
作者: 317227940    時(shí)間: 2020-7-13 17:46
硬件連接有嗎
作者: szqinyi    時(shí)間: 2020-9-12 06:38
感興趣,看看,感謝。
作者: cr8526    時(shí)間: 2021-3-1 21:37
如果加上攝像頭和用物聯(lián)網(wǎng)遠(yuǎn)程控制就好了

作者: tangqida    時(shí)間: 2023-1-29 14:29
下載了試一下看看,好玩。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1