单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:12778|回复:15
打印上一主题下一主题

基于arduino2560的扫地机器人源程序

 [复制链接]
跳转到指定楼层
楼主
ID:239180发表于 2017-10-15 19:43|只看该作者|只看大图回帖奖励
硬件:arduino2560  带电机边刷两个,若干超声波模块,滚刷一个,杂物盒一个,详细见图片

arduino源程序如下:
  1. int FEcho = 11;  // Echo回声脚(P2.0)
  2. int FTrig =10;  //  Trig 触发脚(P2.1)
  3. int LEcho = 9;  // Echo回声脚(P2.0)
  4. int LTrig =8;  //  Trig 触发脚(P2.1)
  5. int REcho = 13;  // Echo回声脚(P2.0)
  6. int RTrig =12;  //  Trig 触发脚(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);   // 给触发脚低电平2μs
  63.   delayMicroseconds(2);
  64.   digitalWrite(FTrig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  65.   delayMicroseconds(20);
  66.   digitalWrite(FTrig, LOW);   // 持续给触发脚低电
  67.   float Fdistance = pulseIn(FEcho, HIGH);  // 读取高电平时间(单位:微秒)
  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);   // 给触发脚低电平2μs
  75.   delayMicroseconds(2);
  76.   digitalWrite(LTrig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  77.   delayMicroseconds(20);
  78.   digitalWrite(LTrig, LOW);   // 持续给触发脚低电
  79.   float Ldistance = pulseIn(LEcho, HIGH);  // 读取高电平时间(单位:微秒)
  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);   // 给触发脚低电平2μs
  87.   delayMicroseconds(2);
  88.   digitalWrite(RTrig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  89.   delayMicroseconds(20);
  90.   digitalWrite(RTrig, LOW);   // 持续给触发脚低电
  91.   float Rdistance = pulseIn(REcho, HIGH);  // 读取高电平时间(单位:微秒)
  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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
避障程序.zip(1.41 KB, 下载次数: 173)


评分

黑币 +67
收起理由
+ 12
详细点就好了
+ 5
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:223164发表于 2017-10-15 21:45|只看该作者
感觉好酷啊,程序看起来倒是不难,没用过un,实物制作会很麻烦吗?
板凳
ID:308344发表于 2018-4-15 00:28|只看该作者
感觉很棒,试试
地板
ID:310025发表于 2018-4-17 14:19|只看该作者
不明觉厉
5#
ID:417450发表于 2018-10-29 18:39|只看该作者
感谢QAQ
6#
ID:432157发表于 2018-11-24 01:06|只看该作者
感谢QAQ
7#
ID:210641发表于 2019-4-5 02:05|只看该作者

感觉很棒,试试看
8#
ID:617003发表于 2020-2-5 17:06|只看该作者
请问路径规划是怎么规划的
9#
ID:712333发表于 2020-3-20 16:07|只看该作者
能自己充电就好了
10#
ID:230374发表于 2020-3-29 20:44|只看该作者
谢谢分享,学习很好
11#
ID:716703发表于 2020-4-1 11:40|只看该作者
很棒啊,谢谢分享
12#
ID:801882发表于 2020-7-12 08:35|只看该作者
路径规划如何实现的啊
13#
ID:731126发表于 2020-7-13 17:46|只看该作者
硬件连接有吗
14#
ID:421260发表于 2020-9-12 06:38来自手机|只看该作者
感兴趣,看看,感谢。
15#
ID:373684发表于 2021-3-1 21:37|只看该作者
如果加上摄像头和用物联网远程控制就好了
16#
ID:1061600发表于 2023-1-29 14:29来自手机|只看该作者
下载了试一下看看,好玩。

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网