设为首页收藏本站

[教程] DIY海盗船机器人系列教程 第2话——红外开关避障功能

Jane 发表于 2015-9-22 17:58:58 | 显示全部楼层 [复制链接]
7 4836
DIY海盗船系列 第2话 --- 红外开关避障功能

在完成基础功能后,我们对机器人来个升级,给它增加避障功能。避障功能,是机器人最基础的功能之一,也是机器人体现自主意识的第一步。避障机器人能够识别前方的障碍物,并避开前方障碍物。这里,我们选用到的是红外数字避障传感器,这是一款相当容易上手的传感器,非常适合初学者使用。该传感器可帮助机器人看到前方的物体。

硬件材料:
  • 3-80cm红外数字避障传感器  × 3
Z59)@R_B_B@2Q{7MP9JLR.png
  • 红外接近开关支架 × 3
红外开关避障213.png




组装步骤:
找到硬件材料后,就可以开始组装了,组装不难,更着操作就行。

STEP 1: 摆放材料
先找到固定红外开关传感器的3个支架,及需要使用的M3×6MM的螺丝和螺母若干。
红外开关避障305.png
STEP 2: 固定红外支架
这里只需将3个红外开关传感器的支架用螺丝拧在上层板上即可。需要注意的一点是,三个支架之间不要间隔太近。否则在检测的时候会造成接收错误信号。
红外开关避障392.png
STEP 3: 安装红外传感器
先将一个固定环装到传感器上,将传感器从红外支架里往外穿过,并用另一个固定环将其固定住。同样方法安装另外两个。
红外开关避障466.png
红外开关避障469.png


硬件连接:

传感器安装完成后,先不要急着把上层板接上去,需要将传感器与Romeo BLE控制器连接。左边这张图显示的是三个传感器ABC在小车上对应的位置,分别对应数字口的10,9,8。,连接时只需留意线序是否正确即可。 安装完成后,固定上层板。
黄色 - 信号线,红色 – VCC, 绿色 – GND。
}i$POE(6B[XOOVY))FZ{2.png

红外开关避障626.png

传感器调试:

红外接近开关是一种集发射与接收于一体的光电开关传感器。如果有信号,也就是前方有障碍物,传感器后侧指示灯亮的亮灭,检测距离可随传感器后侧的电位器进行调节,可调范围3-80cm。
下载代码前,需要对三个传感器的做调整,先插上USB线,给板子供电。下图白色圈出的位置可见有个一字螺丝,这个就是可用来调整检测距离。拿个小盒子(模拟障碍物),放在传感器探头前,找到传感器的探测点,一旦找到传感器上的指示灯会亮起。此时,可以拧转螺丝,调到一个合适的距离,推荐在15~20cm左右。
同样方法调整另外两个红外传感器,通常建议左右两侧的检测距离略大于中间的检测距离。
红外开关避障912.png

输入代码:
由于代码较长,所以这里就不全部显示出来,你可在软件包中找到Avoidance_IRSwitch.ino的代码,下载进去后即可。

红外开关避障985.png

下载完成后,你就可以看到小车的避障效果了。当然,如果你觉得检测距离还不是很满意,也可以做一些微调。直到能正常工作。玩过之后,我们就来简单看下避障原理以及学习下代码,便于你能更好的改造你的机器人!


避障原理:
通过下面a,b,c,d来简单看下如何通过三个传感器来实现避障。在前方没有障碍物的时候,小车前行(图a),一旦检测到前方有障碍物,先让小车后退(图b),然后执行左转(图c),当然这里你也可以右转。如果小车前方一直存在障碍物,小车将会一直执行后退左转,直到前方没有障碍物,小车保持前进。

H5C2Y1I3J~O%{3LS(F)5HLW.png

前面分析的这个场景是小车正前方有障碍物。思考下,如果小车左前方有障碍,或者小车右前方有障碍物,可让小车如何执行?清楚原理之后,我们来看下代码。
当然,这样的避障方式不是唯一的,你也可以有更好的避障方式,可由你自己设定,如果你的逻辑非常紧密,完全可以写出更出色的代码,毫无疑问的可以从你的代码中表现出来。何不试试用自己的思维来写一段控制代码。看完代码回顾,你就能游刃有余的改代码了。


代码回顾:

基础功能重复部分就不说了,只说下避障部分的。
  1. int RightValue;    //Right line tractor sensor on Pin 8
  2. int MiddleValue;   //Middle line tractor sensor on Pin 9
  3. int LeftValue;     //Left line tractor sensor on Pin 10

  4. //reading 3 pins values of Line Tracking Sensor
  5. RightValue=digitalRead(8);  
  6. MiddleValue=digitalRead(9);
  7. LeftValue=digitalRead(10);<span style="color: rgb(56, 86, 35); font-family: 'Courier New'; font-size: 10.5pt; line-height: 1.5; text-indent: 21pt; background-color: rgb(255, 255, 255);"> </span>
复制代码
用三个变量RightValue,MiddleValue,LeftValue分别记录3个传感器读到的值,digitalRead(pin)函数就是用来读取数字口的值,不明白的可以查看下语法手册
红外数字避障传感器数字量传感器,当探头前方有障碍时输出低电平,无障碍物时输出高电平。
下面这段代码描述的就是避障原理中所说的那张情况 –- 正前方有障碍。三个传感器同时都检测到障碍物了,也就是输出值都为LOW时,小车先执行后退,再执行左转,前进。
  1. if(LeftValue==LOW && MiddleValue==LOW && RightValue==LOW ) {   
  2.     Robot.Speed (-200,-200);         //back off
  3.     delay(800);
  4.     Robot.Speed (-200,200);          //turn left
  5.     delay(400);
  6.     Robot.Speed (100,100);           //move forward
  7.   }
复制代码
  如果只有左侧传感器检测到障碍物,那么小车执行,后退,左转。
  1. if(LeftValue == LOW) {    //obstacle on the left side
  2.     Robot.Speed (-200,-200);    //back off
  3.     delay(400);
  4.     Robot.Speed (200,-200);    //turn right
  5.     delay(250);
  6.     Robot.Speed (100,100);    //move forward
  7.   }
复制代码
同样,如果只有右侧传感器检测到障碍物,那么小车执行,后退,右转。
  1. if(RightValue == LOW ){       //obstacle on the right side
  2.     Robot.Speed (-200,-200);     //back off
  3.     delay(400);
  4.     Robot.Speed (-200,200);     //turn left
  5.     delay(250);
  6.     Robot.Speed (100,100);      //move forward
  7. }
复制代码

最后,如果前面没有障碍物的话,小车正常前进。
  1. if(LeftValue==HIGH && MiddleValue==HIGH && RightValue==HIGH ) {   
  2.     Robot.Speed (150,150);           //move forward
  3. }
复制代码

代码中还有这么一段。
  1. if( MiddleValue == LOW){     //obstacle in middle
  2.     Robot.Speed (-150,-150);     //back off
  3.     delay(400);
  4.     Robot.Speed (-200,200);      //turn left
  5.     delay(300);
  6.     Robot.Speed (100,100);    //move forward
  7. }
复制代码

同样是前方有障碍物,和我们一开始说的三个传感器同时检测到的区别在于,这种情况下,前方障碍物相对远一点,小车后退的速度慢一点。
  1. Robot.Speed (-150,-150);     //back off
复制代码

这里,我们就用到通过Speed函数来调整速度了。根据代码的说明,能否自己尝试变换一下小车的速度,行动方向等等。


大改造:

代码就讲到这里,我们这里做的是一个避障机器人。其实,同样的传感器,改造一下就能成为跟踪机器人了。只是方式相反,这里是,检测到物体后避开,跟踪的话,则是检测到物体后,向物体方向靠近。想一下,给自己做个跟踪机器人。

PS:更多开源文件见附件Code啦~希望你能跟我一样做出一套自己的海盗船
Code.zip (2.62 KB, 下载次数: 263)
发表于 2015-9-22 20:07:10 | 显示全部楼层
有空把我的海盗船也装起来写个贴子,哈哈
回复 支持 反对

使用道具 举报

发表于 2015-9-22 21:08:54 | 显示全部楼层
Jane的教程写的真好,以后来当老师吧
回复 支持 反对

使用道具 举报

发表于 2015-9-24 11:18:19 | 显示全部楼层
丄帝De咗臂 发表于 2015-9-22 20:07
有空把我的海盗船也装起来写个贴子,哈哈

借我玩玩。我真没有海盗船。
回复 支持 反对

使用道具 举报

发表于 2015-9-24 13:13:35 | 显示全部楼层
hnyzcj 发表于 2015-9-24 11:18
借我玩玩。我真没有海盗船。

我已经组装起来了
回复 支持 反对

使用道具 举报

发表于 2015-9-24 16:44:26 | 显示全部楼层
hnyzcj 发表于 2015-9-22 21:08
Jane的教程写的真好,以后来当老师吧

哈哈哈,好呀~你带我吗?
回复 支持 反对

使用道具 举报

发表于 2015-12-30 16:10:26 | 显示全部楼层
jane老大爷写帖子,,观摩观摩
回复 支持 反对

使用道具 举报

发表于 2016-9-13 17:00:32 | 显示全部楼层
代码是不是有问题啊!点开是一个Htm文件
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

  • 管理员
  • 4352
  • 103
  • 活跃会员

    活跃会员

  • 版主限定

    版主限定

  • 特邀作者

    特邀作者

  • 牛X认证

    牛X认证

  • 小蘑菇勋章

    小蘑菇勋章

  • 蘑菇人勋章

    蘑菇人勋章

  • 教师荣誉徽章

    教师荣誉徽章

  • 蘑菇老人勋章

    蘑菇老人勋章

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表