单片机教程网

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

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

[复制链接]
跳转到指定楼层
#
ID:296823发表于 2018-3-25 17:27|只看该作者|只看大图回帖奖励
新手分享的资料


电路原理图:



循迹 寻黑线程序单片机源程序如下:
  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)



评分

黑币 +55
收起理由
+ 5
共享资料的黑币奖励!
+ 50
共享资料的黑币奖励!

查看全部评分

7#
ID:1102600发表于 2023-12-4 22:05|只看该作者
谢谢楼主分享,值得学习的资料
6#
ID:543255发表于 2023-6-27 07:42|只看该作者
bleach 发表于 2018-5-8 09:58
谢谢楼主分享,值得学习的资料

楼主有没有这个完整的原理图?
5#
ID:114330发表于 2023-6-1 21:56|只看该作者
可以可以,资料非常实在,谢谢
地板
ID:370895发表于 2018-7-13 15:04|只看该作者
谢谢楼主分享,值得学习的资料

评分

黑币 +5
收起理由
+ 5
很给力!

查看全部评分

板凳
ID:341867发表于 2018-6-1 00:40来自手机|只看该作者
楼主大佬啊

评分

黑币 +3
收起理由
+ 3

查看全部评分

沙发
ID:146874发表于 2018-5-8 09:58|只看该作者
谢谢楼主分享,值得学习的资料

评分

黑币 +3
收起理由
+ 3

查看全部评分

楼主
ID:294223发表于 2018-3-27 21:41|只看该作者
真棒,学习了

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

Powered by 单片机教程网