找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12344|回复: 15
收起左侧

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

  [复制链接]
ID:239180 发表于 2017-10-15 19:43 | 显示全部楼层 |阅读模式
硬件:arduino2560  带电机边刷两个,若干超声波模块,滚刷一个,杂物盒一个,详细见图片
0.jpg
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, 下载次数: 171)

评分

参与人数 3黑币 +67 收起 理由
createskyblue + 12 详细点就好了
QQwert + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1061600 发表于 2023-1-29 14:29 来自手机 | 显示全部楼层
下载了试一下看看,好玩。
回复

使用道具 举报

ID:373684 发表于 2021-3-1 21:37 | 显示全部楼层
如果加上摄像头和用物联网远程控制就好了
回复

使用道具 举报

ID:421260 发表于 2020-9-12 06:38 来自手机 | 显示全部楼层
感兴趣,看看,感谢。
回复

使用道具 举报

ID:731126 发表于 2020-7-13 17:46 | 显示全部楼层
硬件连接有吗
回复

使用道具 举报

ID:801882 发表于 2020-7-12 08:35 | 显示全部楼层
路径规划如何实现的啊
回复

使用道具 举报

ID:716703 发表于 2020-4-1 11:40 | 显示全部楼层
很棒啊,谢谢分享
回复

使用道具 举报

ID:230374 发表于 2020-3-29 20:44 | 显示全部楼层
谢谢分享,学习很好
回复

使用道具 举报

ID:712333 发表于 2020-3-20 16:07 | 显示全部楼层
能自己充电就好了
回复

使用道具 举报

ID:617003 发表于 2020-2-5 17:06 | 显示全部楼层
请问路径规划是怎么规划的
回复

使用道具 举报

ID:210641 发表于 2019-4-5 02:05 | 显示全部楼层

感觉很棒,试试看
回复

使用道具 举报

ID:432157 发表于 2018-11-24 01:06 | 显示全部楼层
感谢QAQ
回复

使用道具 举报

ID:417450 发表于 2018-10-29 18:39 | 显示全部楼层
感谢QAQ
回复

使用道具 举报

ID:310025 发表于 2018-4-17 14:19 | 显示全部楼层
不明觉厉
回复

使用道具 举报

ID:308344 发表于 2018-4-15 00:28 | 显示全部楼层
感觉很棒,试试
回复

使用道具 举报

ID:223164 发表于 2017-10-15 21:45 | 显示全部楼层
感觉好酷啊,程序看起来倒是不难,没用过un,实物制作会很麻烦吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表