小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 24398|回复: 12

【一代经典驱动板】全功能程序之巡线遁迹模式代码解析

[复制链接]
发表于 2014-10-28 19:57:41 | 显示全部楼层 |阅读模式
一、功能原理:
在车头安装2个垂直向下的红外避障模块,作为探测黑线的传感器,当传感器返回的电平为0时,表明是正常地面,当返回的电平是1时,表明是黑线,从而根据两个探测器的状态,判断当前车体的车头状态相对于黑线是何种位置,再进行方向纠正,每一轮死循环都会纠正一次,直到满足车头与黑线平行且探测器未被触发为止。
20130508101032_310.jpg
二、硬件连接
在车头安装2个垂直向下的红外避障模块,模块发射头距离地面约2cm,调整红外避障模块的灵敏度,使之正好在对着黑线的时候,传感器尾部的指示灯熄灭,对着正常地面时亮起。
全功能车传感器分布说明.png
(小车车尾朝向用户)我们把机器人左侧的红外传感器接到驱动板的P20接口,右侧的接到P23接口。

三、软件编写
用keil C V4打开下位机程序工程,找到config.h配置文件,在配置文件中添加巡线传感器的IO管脚配置:

  1. /* 避障管脚配置 */
  2. sbit Input_Detect_LEFT=P2^0;          //右侧探头
  3. sbit Input_Detect_RIGHT=P2^3;         //左侧探头
复制代码
然后打开motor.c文件,在文件中加入巡线的代码,首先是定义一个变量,用来保存机器人的运动状态,以便在偏离航线后,没有回到正确方向之前,机器人始终做方向修正动作。
  1. uchar  Robots_Run_Status;
复制代码
然后加入一个巡线逻辑函数,实现巡线的逻辑:
  1. //巡线模式
  2. void FollowLine(void)
  3. {
  4.                    switch(Robots_Run_Status)
  5.                  {
  6.                         case 0x01:MOTOR_GO_RIGHT;     break;   
  7.                         case 0x02:MOTOR_GO_LEFT;     break;           
  8.                         case 0x03:MOTOR_GO_FORWARD;  break;           
  9.                         case 0x04:MOTOR_GO_STOP;  break;        
  10.                  }

  11.                            if((Input_Detect_LEFT == 0)&& (Input_Detect_RIGHT == 0))//两边探测器都返回低电平,表明左右两侧的红外传感器均探测到了地面,机器人直行。
  12.                         {
  13.                                   Robots_Run_Status=0x03;//直行
  14.                         }
  15.                         
  16.                         if((Input_Detect_LEFT == 1)&& (Input_Detect_RIGHT == 0))//左侧传感器返回了高电平,表明左侧传感器探测到了黑色线,相对于黑线,机器人整体方向偏右了,需要向左侧修正。
  17.                         {
  18.                                  Robots_Run_Status=0x02;//左转
  19.                         }
  20.                
  21.                         if((Input_Detect_LEFT == 0)&& (Input_Detect_RIGHT == 1))//右侧传感器返回了高电平,表明右侧传感器探测到了黑色线,相对于黑线,机器人整体方向偏左了,需要向右侧修正。
  22.                         {
  23.                                  Robots_Run_Status=0x01;//右转
  24.                         }
  25.                         
  26.                         if((Input_Detect_LEFT == 1)&& (Input_Detect_RIGHT == 1))//左右都同时检测到黑线,说明有一条横着的黑线,机器人到巡线的终点,停止运行。
  27.                         {
  28.                                  Robots_Run_Status=0x04;//停止
  29.                         }
  30. }
复制代码
调用写好的巡线函数:
在主函数main.c中,找到while(1)死循环,加入刚刚编写的巡线函数
  1. while(1)
  2.         {
  3.                     FollowLine();//执行巡线
  4.         }
复制代码
这个是比较初级的巡线方式,满足一般条件的黑线没有问题,如果需要保险点,可以多加几个红外避障模块,这样进行多重判断会更精确。



回复

使用道具 举报

发表于 2014-10-29 08:12:04 | 显示全部楼层
学习了,老大,给力………………
回复 支持 反对

使用道具 举报

发表于 2014-10-29 11:27:58 | 显示全部楼层
还有一个交叉线的判断
回复 支持 反对

使用道具 举报

发表于 2014-12-16 21:55:57 | 显示全部楼层
刚买了开发板,学习中
回复 支持 反对

使用道具 举报

发表于 2015-1-14 13:13:45 | 显示全部楼层
一直在等着准备买,但是卖的人不在线,好伤心
回复 支持 反对

使用道具 举报

发表于 2015-2-9 08:55:13 | 显示全部楼层
学习了,老大,给力………………
回复 支持 反对

使用道具 举报

发表于 2015-4-16 13:14:57 | 显示全部楼层
学习代码 啊啊
回复 支持 反对

使用道具 举报

发表于 2015-4-22 20:05:37 | 显示全部楼层
写的很不错,很好~
回复 支持 反对

使用道具 举报

发表于 2015-4-24 08:12:18 | 显示全部楼层
谢谢楼主,这个资料很,不过你的图形化编辑软件做好了没,能给开开眼吗?
回复 支持 反对

使用道具 举报

发表于 2015-8-10 13:10:05 | 显示全部楼层
这是。arduino 吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-22 19:09 , Processed in 1.117449 second(s), 27 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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