(k-2)寄存器中是
6.3 机器人寻找火源
6.3.1 机器人寻找火源功能的硬件实现
要实现机器人寻找到火源,我们需要至少两个火源传感器。当然,
如果使用两个火焰传感器分别安装在机器人的两端位置,如图***那 么我们就可以找到火源的位置。当然了,就像是巡线机器人那样,红 外传感器的数量越多,达到的精确度也就越高,如果我们安装的火焰 传感器的数量越过,相比来说,我们就更容易定位火源的具体位置。
火焰传感器输出的数据是模拟的电压值,要想用单片机或者是其 他的处理器处理这个数据,我们首先需要做的就是将获取的这个数据 转换成数字量。在这里我们使用的模数转换芯片是 ADC0809。
ADC0809 是采样分辨率为 8 位的、以逐次逼近原理进行模数转换的 器件。此芯片可以分时处理 8 路模拟量输入信号,使用模拟信号切换,
在某一时刻,模拟开关只能与一路模拟量通道接通,对该通道进行 A
/D 转换。
对于 ADC0809 与单片机的连接,我们采用下图的方式:
ADC0809 的 IN0~IN7 为模拟量的输入端,可以输入 8 路信号,
#include<reg52.h>
#define uchar unsigned char sbit ST=P1^0;
sbit EOC=P1^1;
sbit OE=P1^2;
sbit CLK=P1^3;
sbit ADDCS=P1^4;
sbit BDDCS=P1^5;
sbit CDDCS=P1^6;
uchar AD_DATA[2];
void DelayMs(int Ms) {
void delay(uchar i) {
uchar j;
while(i--)
{
void t0(void) interrupt 1 using 0 {
ADDCS=0;
BDDCS=0;
CDDCS=0; //选择通道 IN0 delay(10);
ST=1; //启动 AD 转换 delay(10);
ST=0;
while(0==EOC) ;
OE=1;
AD_DATA[0]=P2;
OE=0;
ST=0;
ADDCS=1;
BDDCS=0;
CDDCS=0; //选择通道 IN1 delay(10);
ST=1; //启动 AD 转换 delay(10);
ST=0;
while(0==EOC) ;
while(1) { AD();
} }
程序说明:
1)在程序中设定数组 AD_DATA[2]来存储转换的数字量值。
2)ADDCS、BDDCS 和 CDDCS 这三个参数用来选择 IN0~IN7 通道,共有 8 中组合,分别对于 8 个通道。
以向火源移动了。机器人向火源移动的基本思想是:当两侧的火焰传 感器检测到的数据相差很小,而且测量的结果也很小的时候机器人向 前运动;当两侧的传感器检测到的数据相差比较大时,机器人相应的 转向测量值大的一侧。两侧传感器检测到的数值越大说明机器人越接 近火源。
根据上面的说明,我们可以很容易的使用 if(„)else(„)语 句写出程序:
/***************************************/
if(dataleft>dataright) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
else if(dataleft<dataright) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
P3_5=0;P3_7=0;
DelayMs(25);
P3_5=1;P3_7=1;
if(dataleft>dataright+10) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
else if(dataleft+10<dataright) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
/*****************************************/
程序中的参数值当然也可以使其他的数值,可以根据实际的情况 作相应的改变。当然了,我们可以对程序作进一步的修改,使机器人 能够适应不同的环境和光的强度。
我们可以根据光强度的大小,实时的改变参数的数值。我们可以 设定一个变量 ave=(dataleft+dataright)/a,a 的参数可以是 2、3、4 等 数据。
/***************************************/
if(dataleft>dataright+ave) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
else if(dataleft+ave<dataright) {
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
P3_0=0;P3_2=0;
P3_1=1;P3_3=1;
P3_5=0;P3_7=0;
DelayMs(25);
P3_5=1;P3_7=1;
DelayMs(25);
}
/*****************************************/
经过对程序的优化,机器人就可以比较容易和顺利的寻找到火源 的位置。
最后需要说明的是:我们也可以对火焰传感器的位置和安装的方 法进行相应的调整。可以在机器人的两端分别安装两个传感器,两个 传感器并排放置,中间夹一纸板。这样在机器人离火源的位置偏差太 大的时候,两个并排着的传感器必定会有一个因为纸板的原因接受不 到信号。只有当机器人面向火焰的时候,两个传感器冲着火焰,这样 才可以都能接收到信号。
关于灭火机器人,也有一项专门的赛事,这里也做一个简单的介 绍。
机器人灭火比赛是让机器人在一间平面结构房子模型里运动,尽 快找到并熄灭蜡烛以模拟现实家庭中机器人处理火警的过程。机器人 需要主动寻找蜡烛火焰,它可以运用类似水、空气、CO2 等方法或物 质,或者使用机械方式,但是禁止使用任何危险的或可能破坏竞赛场 地的方法或物质。比如,不能通过燃放爆竹产生冲击来使蜡烛熄灭,
也不能通过碰倒蜡烛而使蜡烛熄灭。蜡烛在燃烧时不允许被撞倒。如 果机器人在进行灭火动作的过程中碰撞蜡烛,机器人运行成绩仍然有 效。如果蜡烛被撞倒,按未完成灭火任务处理。
在小学组竞赛中,蜡烛将随机放在四个房间中,不采用回家模式。
初中组竞赛必须采用回家模式,最长时间是 4 分钟,熄灭蜡烛后开始
计时,超过限定时间仍未完成回家任务的机器人,该轮比赛将被裁判 终止,回家时间按照 4 分钟记录。而在高中组竞赛中,机器人完成灭 火任务之后,须完成搜救模式和回家模式。搜救对象放在火源房间中。
在房间中靠墙壁,有一个内侧直径为 15cm 半圆形的 2.5cm 宽的白线,
搜救对象是一个位于圆心位置的白色竖立的胶卷盒。搜救时间从熄灭 蜡烛开始计时,直到机器人拾取了搜救对象,并且离开蜡烛和搜救对 象所在的房间时为止,最长时间为 3 分钟。如果机器人 3 分钟内没有 完成搜救任务,比赛将被裁判终止,成绩按照 3 分钟记录,同时按照 4 分钟来计算回家成绩。在“回家”途中如果搜救对象没有被携带或 中途丢失,回家模式失败。