找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4136|回复: 1
打印 上一主题 下一主题
收起左侧

搬运色块 巡游景点 巡线机器人小车的设计资料下载

[复制链接]
跳转到指定楼层
楼主
如题!!!!!!!!!!!!!


包含以下资料:
示例程序\
2017春《计算机编程能力实训》安排.doc
QTI巡线传感器说明及寻线策略.docx
《计算机编程能力实训》动员-基于教育机器人.ppt
任务书1_智能搬运机器人的设计与实现_17春.doc
任务书2-巡游机器人设计与实现_17春.doc


程序包含:
threeQTI-3个QTI传感器的巡线程序.c
巡游-一个景点-基于数组实现.c
巡游-一个景点-非数组实现.c
搬运-E点黑色.c


部分单片机源程序预览如下:
  1. /************************************************
  2. 程序功能:搬运1个色块: E点,黑色
  3. 舵机连接:左轮 P1_1
  4.           右轮 P1_0
  5. QTI传感器连接:从左至右 P2_4 P2_3 P2_2 P2_1

  6. 程序编写调试:王淑鸿 2016-6
  7. ************************************************/

  8. #include <Boebot.h>
  9. #include <uart.h>
  10. #define uint unsigned int
  11. #define uchar unsigned char

  12. void fastforward(void);            //快速前进1步
  13. void slowforward(void);            //慢速前进1步
  14. void slowerback(void);                  // 慢速后退1步
  15. void turn_left(uint n);             //左转
  16. void turn_right(uint n);            //右转
  17. void zhixing(int n);                                //向前直行
  18. void daotui(int i);                        //后退
  19. void check_left(void);              //小幅向左  
  20. void check_right(void);             //小幅向右
  21. void Get_QTI_State(void);            //获取传感器返回值
  22. void Follow_Line(void);                //巡线
  23. void Get_E(void) ;                   //取E点物块,取到中心线上
  24. void Put_Black(void);                         // 将中心线上的黑色色块推到目标位置
  25. void BackToZero(void);                                 //从中心线回到起始区域


  26. uchar QTIState;

  27. uint RIGHT90=20;
  28. uint RIGHT45=10;
  29. uint RIGHT180=35;

  30. uint LEFT90=25;
  31. uint LEFT45=13;




  32. void fastforward(void)                //快速前进
  33. {
  34.         P1_0=1;
  35.         delay_nus(1350);
  36.         P1_0=0;
  37.         delay_nms(20);
  38.         P1_1=1;
  39.         delay_nus(1650);      
  40.         P1_1=0;
  41.         delay_nms(20);
  42. }

  43. void slowforward(void)          //慢速前进
  44. {        P1_0=1;
  45.         delay_nus(1450);        
  46.         P1_0=0;
  47.         delay_nms(20);
  48.         P1_1=1;
  49.         delay_nus(1550);
  50.         P1_1=0;
  51.         delay_nms(20);
  52. }

  53. void slowerback(void)                // 慢速后退
  54. {
  55.         P1_0=1;
  56.         delay_nus(1550);        
  57.         P1_0=0;
  58.         delay_nms(20);
  59.         P1_1=1;
  60.         delay_nus(1450);
  61.         P1_1=0;
  62.         delay_nms(20);
  63. }

  64. void turn_left(uint n)              //左转
  65. {
  66.          int i;
  67.      for(i=0;i<=n;i++)
  68.        {
  69.                 P1_0=1;
  70.                 delay_nus(1450);
  71.                 P1_0=0;
  72.                 delay_nms(20);
  73.                 P1_1=1;
  74.                 delay_nus(1450);
  75.                 P1_1=0;
  76.                 delay_nms(20);
  77.            }
  78. }

  79. void turn_right(uint n)            //右转  
  80. {
  81.          int i;
  82.      for(i=0;i<=n;i++)
  83.        {
  84.                 P1_0=1;
  85.                 delay_nus(1550);
  86.                 P1_0=0;
  87.                 delay_nms(20);
  88.                 P1_1=1;
  89.                 delay_nus(1550);
  90.                 P1_1=0;
  91.                 delay_nms(20);
  92.            }
  93. }





  94. void zhixing(int n)                          //直行
  95. {
  96.         int a;
  97.         for(a=0;a<=n;a++)
  98.         fastforward();
  99. }


  100. void daotui(int n)                        //慢速倒退
  101. {
  102.         int a;
  103.         for(a=0;a<=n;a++)
  104.         slowerback();
  105. }

  106. void check_left(void)     //小幅向左
  107. {       
  108.             P1_0=1;
  109.             delay_nus(1400);         
  110.                  P1_0=0;
  111.             delay_nms(20);
  112.                 P1_1=1;
  113.                 delay_nus(1500);
  114.                 P1_1=0;
  115.                 delay_nms(20);
  116. }

  117. void check_right(void)    //小幅向右
  118. {
  119.           P1_1=1;
  120.           delay_nus(1600);         
  121.           P1_1=0;
  122.           delay_nms(20);
  123.           P1_0=1;
  124.           delay_nus(1500);
  125.           P1_0=0;
  126.           delay_nms(20);  
  127. }



  128. void Get_QTI_State(void)                       //获取传感器返回值
  129.         {
  130.                 QTIState=P2&0x1e;                     //P2_4  P2_3  P2_2  P2_1
  131.                 QTIState=QTIState/2;                  //右移1位               
  132.         }



  133. void Follow_Line(void)                //巡线
  134. {
  135.                                                    

  136.                 Get_QTI_State();

  137.         switch(QTIState)                         
  138.                 {
  139.                 case 4: check_left() ;break;                        //传感器返回值:0100
  140.                 case 2: check_right();break;                        //传感器返回值:0010
  141.                 case 8: check_left() ;break;                        //传感器返回值:1000
  142.                 case 12: check_left() ;break;                        //传感器返回值:1100
  143.                 case 14: check_left() ;break;                        //传感器返回值:1110
  144.                 case 1: check_right();break;                        //传感器返回值:0001
  145.                 case 3: check_right();break;                        //传感器返回值:0011
  146.                 case 7: check_right();break;                        //传感器返回值:0111
  147.                 default: slowforward();break;
  148.                 }
  149. }


  150. void Get_E(void)                          //取E点物块,取到中心线上
  151. {
  152.         int i;
  153.         while(QTIState!=0x0f)                 //当不是全黑时,巡线
  154.         Follow_Line();
  155.         zhixing(6);                                                          //直行一小段,调整位置
  156.         turn_right(RIGHT90);                  //右转90度
  157.         while(QTIState!=0x00)                 //当不是全白时,巡线
  158.         Follow_Line();
  159.         zhixing(6);
  160.     turn_right(RIGHT180);
  161.         while(QTIState!=0x0f)                 //当不是全黑时,巡线
  162.         Follow_Line();
  163.         zhixing(6);
  164.         turn_left(LEFT90);                                          //左转90度
  165.         for(i=0;i<40;i++)
  166.                 Follow_Line();
  167.     turn_right(RIGHT180);                  
  168. }

  169. void Put_Black(void)                                 // 将中心线上的黑色色块推到目标位置
  170. {
  171.         int i;        
  172.         while(QTIState!=0x0f)                 //当不是全黑时,巡线
  173.         Follow_Line();
  174.         zhixing(6);
  175.         turn_right(RIGHT45);
  176.         while(QTIState!=0x00)                 //当不是全白时,巡线
  177.         Follow_Line();
  178.         zhixing(6);
  179.         while(QTIState!=0x0f)                 //当不是全黑时,巡线
  180.         Follow_Line();
  181.         daotui(20);
  182.         turn_right(RIGHT180);  
  183.         while(QTIState!=0x00)                 //当不是全白时,巡线
  184.         Follow_Line();
  185.         zhixing(6);
  186.         while(QTIState!=0x0f)                 //当不是全黑时,巡线
  187.     Follow_Line();
  188.         zhixing(6);
  189.         turn_left(LEFT45);
  190. ……………………

  191. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
课程设计-自通-机器人-17春.rar (1.59 MB, 下载次数: 32)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-6-25 02:39 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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