找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7837|回复: 7
收起左侧

智能小车两路循迹 避障传感器免费开源资料与单片机源码

[复制链接]
ID:296823 发表于 2018-3-25 17:27 | 显示全部楼层 |阅读模式
新手分享的资料
应用实物图.jpg 2路循迹 避障传感器反面图.jpg 2路循迹 避障传感器.jpg

电路原理图:
0.png


循迹 寻黑线程序单片机源程序如下:
  1. /*****************ZY08-C智能循迹、遥控、避障、寻光机器人*****************
  2. //=====================================================================//
  3. //                      寻迹与直流电机驱动演示程序                     //
  4. //  本程序通过前方的红外探头来检测地面的信号,根据道路的要求,当道路为白 //
  5. // 色时,红外接收到信号,与地面检测的红外相应端口低电平,当道路为黑色时 //
  6. //,与地面检测的红外相应端口为高电平,我们就可以根据这和判断条件来进行  //
  7. //道路黑白线的寻找.                                                    //
  8. //  声明:由于红外接收头对光线要求较高,所以对于黑白两种颜色选择对比度  //
  9. //高为好,而且因为道路建立不同,需要根据实际的需要来改写相应的延迟时间 //
  10. //以适应角度的最有较转弯,道路应根据红外接收头的两个宽度来制定,如果道 //
  11. //路较小,或较大者,请调整以适应小车的正确运行.                        //
  12. //  备注:这里的程序以走白线为主,当用户需要选择走黑线时,请根据例程作出//
  13. //实际修改。并改写相应的延迟时间函数,以进行转弯角度在的最优化调整.    //
  14. //---------------------------------------------------------------------//

  15. *  平台:ZY08-C智能循迹、遥控、避障、寻光机器人 + Keil U4 + STC89C52
  16. *  程序名称:ZY08-C循迹寻黑线程序
  17. *  公司:湖南智宇科教设备有限公司
  18. *  编写:智宇公司研发一部
  19. *  日期:2015-1-15
  20. *  交流:智能车QQ:1018973181
  21. *  晶振:11.0592MHZ
  22. *  售后技术说明:免费开源,不支持客户自己修改程序分析与改正,可以提供我公司程序说明
  23. *  视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
  24. ******************************************************************/                     //

  25. #include <REGX52.H> //包含51单片机相关的头文件

  26. sbit LeftLed=P2^0;                        //定义前方左侧指示灯端口
  27. sbit RightLed=P0^7;                       //定义前方右侧指示灯端口
  28. sbit FontLled=P1^0;

  29. sbit LeftIR=P3^5;                         //定义前方左侧红外探头端口
  30. sbit RightIR=P3^6;                        //定义前方右侧红外探头端口
  31. sbit FontIR=P3^7;                         //定义前方正前方红外探头端口

  32. sbit M1A=P0^0;                            //定义左侧电机驱动A端
  33. sbit M1B=P0^1;                            //定义左侧电机驱动B端

  34. sbit M2A=P0^2;                            //定义右侧电机驱动A端
  35. sbit M2B=P0^3;                            //定义右侧电机驱动B端

  36. sbit B1=P0^4;                             //定义语音识识别传感器端口
  37. sbit SB1=P0^6;                            //定义蜂鸣器端口


  38. void tingzhi()
  39. {
  40.    M1A=0;                                   //将M1电机A端初始化为0
  41.    M1B=0;                                   //将M1电机B端初始化为0
  42.    M2A=0;                                   //将M2电机A端初始化为0
  43.    M2B=0;

  44. }

  45. void qianjin()
  46. {
  47.    M1A=1;                                   
  48.    M1B=0;                                   
  49.    M2A=1;                                   
  50.    M2B=0;
  51. }

  52. void houtui()
  53. {
  54.    M1A=0;                                   
  55.    M1B=1;                                   
  56.    M2A=0;                                   
  57.    M2B=1;
  58. }

  59. void zuozhuan()
  60. {
  61.    M1A=0;                                   
  62.    M1B=1;                                   
  63.    M2A=1;                                   
  64.    M2B=0;
  65. }

  66. void youzhuan()
  67. {
  68.    M1A=1;                                   
  69.    M1B=0;                                   
  70.    M2A=0;                                   
  71.    M2B=1;
  72. }

  73. void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单12 us
  74. {
  75.   i=i/10;
  76.   while(--i);
  77. }   
  78. void delay_nms(unsigned int n)  //延时n ms
  79. {
  80.   n=n+1;
  81.   while(--n)  
  82.   delay_nus(900);         //延时 1ms,同时进行补偿
  83.   
  84. }  


  85. void ControlCar(unsigned char ConType)    //定义电机控制子程序
  86. {

  87.   tingzhi();
  88. switch(ConType)                          //判断用户设定电机形式
  89. {
  90.   case 1:  //前进                         //判断用户是否选择形式1
  91.   {
  92.     qianjin();
  93.     break;
  94.   }
  95.   case 2: //后退                          //判断用户是否选择形式2
  96.   {
  97.     houtui();                                //M2电机反转
  98.     break;
  99.   }
  100.   case 3: //左转                          //判断用户是否选择形式3
  101.   {
  102.     zuozhuan();                               //M2电机正转
  103.         break;
  104.   }
  105.   case 4: //右转                          //判断用户是否选择形式4
  106.   {
  107.     youzhuan();                                //M1电机正转
  108.                                           //M2电机反转
  109.         break;
  110.   }
  111.   case 8: //停止                          //判断用户是否选择形式8
  112.   {
  113.     tingzhi();
  114.         break;                                //退出当前选择
  115.   }
  116. }
  117. }
  118. void main()                               //主程序入口
  119. {
  120.   bit RunFlag=0;                          //定义小车运行标志位
  121.   //RunShow=0;                              //初始化显示状态

  122.   ControlCar(8);                          //初始化小车运行状态
  123.   while(1)                                //程序主循环
  124.   {
  125.    Start:

  126.    LeftLed=LeftIR;                        //前方左侧指示灯指示出前方左侧红外探头状态
  127.    RightLed=RightIR;                      //前方右侧指示灯指示出前方右侧红外探头状态
  128.    FontLled= FontIR;
  129.    SB1=LeftIR;
  130.    if(LeftIR == 0 && RightIR == 0)    //三个红外检测到黑线,就前进
  131.    {
  132.       ControlCar(1);                      //左侧没有信号时,开始向右转一定的角度
  133.       delay_nms (10);
  134.           goto NextRun;
  135.    }
  136.    
  137.    if(LeftIR == 0 && RightIR == 1)
  138.    {
  139.       ControlCar(3);                      //右侧没有信号时,开始向左转一定的角度
  140.       delay_nms (10);
  141.           goto NextRun;
  142.    }

  143.    if(LeftIR == 1 && RightIR == 0)
  144.    {
  145.       ControlCar(4);                      //右侧没有信号时,开始向左转一定的角度
  146.       delay_nms (10);
  147.           goto NextRun;
  148.    }


  149.    goto Start;
  150.    NextRun:
  151.    ControlCar(8);
  152.   }
  153. }

  154. //备注:此例程仅为参考程序,请根据自己的道路进行最优化调整。
复制代码

红外避障程序单片机源程序如下:
  1. /*****************ZY08-C智能循迹、遥控、避障、寻光机器人*****************
  2. //=====================================================================//
  3. //                      寻迹与直流电机驱动演示程序                     //
  4. //  本程序通过前方的红外探头来检测地面的信号,根据道路的要求,当道路为白 //
  5. // 色时,红外接收到信号,与地面检测的红外相应端口低电平,当道路为黑色时 //
  6. //,与地面检测的红外相应端口为高电平,我们就可以根据这和判断条件来进行  //
  7. //道路黑白线的寻找.                                                    //
  8. //  声明:由于红外接收头对光线要求较高,所以对于黑白两种颜色选择对比度  //
  9. //高为好,而且因为道路建立不同,需要根据实际的需要来改写相应的延迟时间 //
  10. //以适应角度的最有较转弯,道路应根据红外接收头的两个宽度来制定,如果道 //
  11. //路较小,或较大者,请调整以适应小车的正确运行.                        //
  12. //  备注:这里的程序以走白线为主,当用户需要选择走黑线时,请根据例程作出//
  13. //实际修改。并改写相应的延迟时间函数,以进行转弯角度在的最优化调整.    //

  14. *  平台:ZY08-C智能循迹、遥控、避障、寻光机器人 + Keil U4 + STC89C52
  15. *  程序名称:ZY08-C红外避障程序
  16. *  公司:湖南智宇科教设备有限公司
  17. *  编写:智宇公司研发一部
  18. *  交流:智能车QQ:1018973181
  19. *  晶振:11.0592MHZ
  20. *  售后技术说明:免费开源,不支持客户自己修改程序分析与改正,可以提供我公司程序说明
  21. *  免费结缘:5星好评赠送18个资料包,追加评价后再加送20G资料,网上网盘下载
  22. *  视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
  23. ******************************************************************/ //
  24. //  程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用.   //
  25. //=====================================================================//
  26. #include <REGX52.H> //包含51单片机相关的头文件

  27. sbit LeftLed=P2^0;                        //定义前方左侧指示灯端口
  28. sbit RightLed=P0^7;                       //定义前方右侧指示灯端口
  29. sbit FontLled=P1^7;

  30. sbit LeftIR=P3^5;                         //定义前方左侧红外探头端口
  31. sbit RightIR=P3^6;                        //定义前方右侧红外探头端口
  32. sbit FontIR=P3^7;                         //定义前方正前方红外探头端口

  33. sbit M1A=P0^0;                            //定义左侧电机驱动A端
  34. sbit M1B=P0^1;                            //定义左侧电机驱动B端

  35. sbit M2A=P0^2;                            //定义右侧电机驱动A端
  36. sbit M2B=P0^3;                            //定义右侧电机驱动B端

  37. sbit B1=P0^4;                             //定义语音识识别传感器端口
  38. sbit SB1=P0^6;                            //定义蜂鸣器端口


  39. void tingzhi()
  40. {
  41.    M1A=0;                                   //将M1电机A端初始化为0
  42.    M1B=0;                                   //将M1电机B端初始化为0
  43.    M2A=0;                                   //将M2电机A端初始化为0
  44.    M2B=0;

  45. }

  46. void qianjin()
  47. {
  48.    M1A=1;                                   
  49.    M1B=0;                                   
  50.    M2A=1;                                   
  51.    M2B=0;
  52. }

  53. void houtui()
  54. {
  55.    M1A=0;                                   
  56.    M1B=1;                                   
  57.    M2A=0;                                   
  58.    M2B=1;
  59. }

  60. void zuozhuan()
  61. {


  62.    M1A=1;                                   
  63.    M1B=0;                                   
  64.    M2A=0;                                   
  65.    M2B=1;
  66. }

  67. void youzhuan()
  68. {
  69.    M1A=0;                                   
  70.    M1B=1;                                   
  71.    M2A=1;                                   
  72.    M2B=0;
  73. }

  74. void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单12 us
  75. {
  76.   i=i/10;
  77.   while(--i);
  78. }   
  79. void delay_nms(unsigned int n)  //延时n ms
  80. {
  81.   n=n+1;
  82.   while(--n)  
  83.   delay_nus(900);         //延时 1ms,同时进行补偿
  84.   
  85. }  


  86. void ControlCar(unsigned char ConType)    //定义电机控制子程序
  87. {

  88.   tingzhi();
  89. switch(ConType)                          //判断用户设定电机形式
  90. {
  91.   case 1:  //前进                         //判断用户是否选择形式1
  92.   {
  93.     qianjin();
  94.     break;
  95.   }
  96.   case 2: //后退                          //判断用户是否选择形式2
  97.   {
  98.     houtui();                                //M2电机反转
  99.     break;
  100.   }
  101.   case 3: //左转                          //判断用户是否选择形式3
  102.   {
  103.     zuozhuan();                               //M2电机正转
  104.         break;
  105.   }
  106.   case 4: //右转                          //判断用户是否选择形式4
  107.   {
  108.     youzhuan();                                //M1电机正转
  109.                                           //M2电机反转
  110.         break;
  111.   }
  112.   case 8: //停止                          //判断用户是否选择形式8
  113.   {
  114.     tingzhi();
  115.         break;                                //退出当前选择
  116.   }
  117. }
  118. }
  119. void main()                               //主程序入口
  120. {
  121.   bit RunFlag=0;                          //定义小车运行标志位
  122.   //RunShow=0;                              //初始化显示状态

  123.   ControlCar(8);                          //初始化小车运行状态
  124.   while(1)                                //程序主循环
  125.   {
  126.    Start:

  127.    LeftLed=LeftIR;                        //前方左侧指示灯指示出前方左侧红外探头状态
  128.    RightLed=RightIR;                      //前方右侧指示灯指示出前方右侧红外探头状态
  129.    FontLled= FontIR;
  130.    SB1=FontIR;

  131.    if(FontIR == 0)                          //如果前面避障传感器检测到障碍物
  132.    {
  133.       ControlCar(8);                       //停止
  134.       delay_nms (300);                                           //停止300MS   防止电机反相电压冲击  导致系统复位
  135.           ControlCar(2);                                           //后退  
  136.           delay_nms (1000);                                           //后退1500MS  
  137.           ControlCar(3);                                           //
  138.           delay_nms (1800);       
  139.           goto NextRun;
  140.    }
  141.    
  142.    if(FontIR == 1 )
  143.    {
  144.       ControlCar(1);                      //右侧没有信号时,开始向左转一定的角度
  145.       delay_nms (10);
  146.           goto NextRun;
  147.    }


  148.    goto Start;
  149.    NextRun:
  150.    ControlCar(1);
  151.   }
  152. }

  153. //备注:此例程仅为参考程序,请根据自己的道路进行最优化调整。
复制代码

所有资料51hei提供下载:
两路循迹 避障传感器免费开源资料.rar (1.31 MB, 下载次数: 69)

评分

参与人数 2黑币 +55 收起 理由
15067539831 + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:294223 发表于 2018-3-27 21:41 | 显示全部楼层
真棒,学习了
回复

使用道具 举报

ID:146874 发表于 2018-5-8 09:58 | 显示全部楼层
谢谢楼主分享,值得学习的资料

评分

参与人数 1黑币 +3 收起 理由
15067539831 + 3

查看全部评分

回复

使用道具 举报

ID:341867 发表于 2018-6-1 00:40 来自手机 | 显示全部楼层
楼主大佬啊

评分

参与人数 1黑币 +3 收起 理由
15067539831 + 3

查看全部评分

回复

使用道具 举报

ID:370895 发表于 2018-7-13 15:04 | 显示全部楼层
谢谢楼主分享,值得学习的资料

评分

参与人数 1黑币 +5 收起 理由
1980613020 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:114330 发表于 2023-6-1 21:56 | 显示全部楼层
可以可以,资料非常实在,谢谢
回复

使用道具 举报

ID:543255 发表于 2023-6-27 07:42 | 显示全部楼层
bleach 发表于 2018-5-8 09:58
谢谢楼主分享,值得学习的资料

楼主有没有这个完整的原理图?
回复

使用道具 举报

ID:1102600 发表于 2023-12-4 22:05 | 显示全部楼层
谢谢楼主分享,值得学习的资料
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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