灭火机器人论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

-----------------------------------------------------------------------------------------------------------------加密号:
----------------------------------------------------------------------------------------------------------------- 加密号:
赛区统一编号:HLJ-A-196 HGC-A-004
学校名称:黑龙江工程学院
队长姓名:
队员姓名:
指导教师姓名:
2012年8月
摘要
本系统使用8位MCU单片机为控制单元,配合寻迹绕开障碍物,使用火源传感器对火源进行寻找,反馈信号给MCU进行调整,寻火系统形成一个闭环系统,驱动风扇进行灭火。

完成题目基本任务的(1)(2))(3)(4)。

本系统考虑了小车重心、低功耗,稳定性能并且较经济的思路进行设计。

本题目小车能到消防场地任意地点进行灭火。

以蜡烛模拟火源随机分布在场地中,机器人小车自主进行寻火,灭火,反库,用时尽量少。

关键词:超声波测距;智能消防小车;火源传感器
一、设计任务:
1. 基本要求
(1)在场地中随机放置一只蜡烛。

消防车从车库启动,计时开始,消防车同时发出出库声音提示。

消防车从车库出口驶出车库,自动行走到距离火源10cm以内区域,发出火警声音提示,停车3秒钟。

(2)消防车执行灭火工作,灭火完毕后,发出火灭声音提示。

(3)消防车经由车库出口自动返回到车库,停稳后,发出返库声音提示,计时结束。

(4)上述过程用时尽可能少。

2. 发挥部分
(1)在场地中随机放置三只蜡烛。

消防车从车库启动,计时开始,消防车同时发出出库声音提示。

消防车从车库出口驶出车库。

(2)消防车能够找到一个火源,并自动行走到距离火源10cm以内区域,发出火警声音提示,停车3秒钟。

然后消防车执行灭火工作,灭火完毕后,发出火灭声音提示。

(3)再寻找下一个火源,重复过程(2),直到三个火源都被扑灭。

(4)扑灭三个火源后,消防车经由车库出口自动返回到车库,停稳后,发出返库声音提示,计时结束。

(5)上述过程用时尽可能少。

(6)其他。

3.创新设计
1.小车整体结构构架好,自主设计,小车采用两层结构,分放不同模块,每个接线都贴签,进行调试修改容易。

2.自制灭火风扇,并采用三极管放大电路供电,最大限度加快电机转动速度。

3.以7805芯片为核心稳压设计,使用L298N为核心的电机驱动设计,确保系统的稳定性。

4.从出库到寻到火源期间一直在寻找火源,出库转弯后,在第5竖线,第3横线交口处原地旋转360度寻找火源,如果找到,终止旋转,没找到便搜索障碍物后方火源。

确保除车库及障碍物以外场地内任意地点寻到火源。

5.寻迹、寻火采用闭环系统,保证寻火的稳定性。

二、方案比较与论证:
2.1总体设计方案
总体方案为:整个电路分为电源模块、单片机控制模块、电机驱动模块、寻迹传感器模块、火源传感器模块、超声波模块、风扇模块主要共七个模块。

利用对TCRT5000对路面信号进行探测,利用火源传感器检测火源信号,经过处理后,将其信号传给单片机控制模块进行处理分析,输出相应信号给驱动电机模块驱动电机转动来控制小车的整体运动。

系统方案框图如图2-1所示。

图2-1系统方案框图
2.1.1小车的方案设计与论证
方案1:自己制作电动小车(包括车体),组装合适的电机及驱动板,自制探测器,利用开发板做控制驱动小车。

但自己制作的小车,平衡不能保证,车的性能不好,重量不均。

小车的一体电路设计,比较难良好地实现。

方案2:购买专用用带有万向轮的小车。

曾经用过该类型小车,万向轮方向存在不确定性。

方案3:购买专用履带小车,具有组装完整的车架车轮,和完整的电机装配以及电机驱动板。

用自制模块或购买完整传感器模块,用自制单片机最小系统板控制小车运动。

专用电动车装配紧凑,运行稳定,承重高,底盘低重心低。

安装电路板方便且规整,美观。

我们不用在考虑电机装配和电机驱动的设计。

综合考虑,我们选定方案3作为我们的第一步方案。

2.1.2电源模块
本系统中,需要用到的电源有单片机最小系统5V,L298N芯片的电源5V,超声波电源5V和电机的电源7-20V。

所以电源的提供必须准确和稳定可靠。

方案1:用三块蓄电池给超声波和小车供电,和单片机及其它模块供电,用蓄电池需要买充电器,整体需要高的价钱,为降低成本,不选该方案。

方案2:由于超声波模块输入输出是方波模拟量,其他模块对其干扰特别大,用四节干电池为超声波供电,用八节干电池为电机单独供电,免去了分压,而且模块间干扰小,八节干电池通过AM1117,进行降压到5V,能够保证单片机和其它模块的持续供电,电量充足。

通过方案分析对比,考虑降低成本,选择方案2。

2.1.3单片机控制模块
方案1:采用ARM芯片,运行速度快,功能强大。

团队ARM技术水平初级,控制不好。

方案2:采用STC89C52作为主控制芯片,该芯片有足够存储空间,可以方便的在线下载程序,反复烧写达十万次,方便。

该芯片使用简单灵活性高且价廉。

降低成本。

技术广泛,成熟。

2.1.4电机驱动模块
方案1:采用步进电机作为该系统的驱动电机步进电机的输出力矩较低,随转速的升高而下降,在较高转速时会急剧下降,其转速较低,不适合小车等有一定速度的系统。

方案2:采用直流电机作为该系统的驱动电机直流电机的控制方法比较简单,只需给电机的两个控制线加上合适的电压即可使电机转动起来,电压越高电机转速则越高。

改变正负极可方便的改变电机转动的方向,方便改变小车的运行状态。

综合考虑,本设计采用了方案2。

2.1.5寻迹传感器模块
方案1:采用光敏电阻和二极管配合,受外界干扰比较大,对地面平整要求较高。

方案2:采用红外对管,由于只分辨黑白,红外光电对管利用白色反光,黑色吸光原理,并且红外光直线性强,稳定性高,速度快,电路简单成本低,方便操作。

综合分析,我们采用方案2.。

2.1.6火源传感器模块
方案1:采用热敏电阻,和光敏电阻作为传感器,在一定范围内空气温度变化非常小,热敏电阻几乎不发生变化,光敏电阻受外界干扰比较大,抗干扰能力极差,误差偏大,不能准确测定火源位置。

方案2:采用红外接受二极管,红外接收二极管将外界红外光的变化转变为电流的变化,利用LM324进行电压比较,后输出数字开关量。

红外火焰传感器可以用来探测火源或其他一些波长在760nm~1100nm范围内热源,谈成为角度达60度,红外光波长在940nm近时,其灵敏度最大。

比较两种方案,方案2,受外界干扰小,容易探测到火源,因此我们选用方案2。

2.1.7超声波模块
方案 1:红外避障,对障碍物要求近距离。

方案2:用超声波传感器进行避障。

超声波传感器的原理是:超声波由压电陶瓷超声波传感器发出后,遇到障碍物便反射回来,再被超声波传感器接收。

然后将这信号放大后送入单片机。

超声波传感器在避障的设计中被广泛应用。

超声波传感器需要40KHz的方波信号来工作,超声波传感器对工作频率要求较高,偏差在1%内,所以用单片机作方波发生器方便有效。

2.1.8风扇模块
方案1:采用电机驱动模块来驱动会使得结构复杂,故障率高,维修不方便。

方案2:直接利用三极管驱动直流电机。

将电机放在三极管的射极,然后再基极加上一个限流电阻即可驱动电机正常工作,方案电路简单,容易实现,减少器件使用,降低故障率。

同时驱动效率大,稳定性好。

如果想放大更多,可以采用多个三极管并联供电的方式。

综合考虑,选用方案2。

2.2最终方案确定
经过反复论证,确定方案如下:
1.车体是购买专用履带电动车。

2.采用3+4+8节干电池供电。

3.采用STC89C52单片机为控制器。

4.用红外探测传感器作为寻迹传感器。

5.用火源传感器来寻火源。

6.采用三极管放大电路驱动风扇模块。

三、硬件设计分析与计算
3.1系统技术路线及功能简介
本系统利用单片机STC89C52单片机作为系统的主控模块,采用反射式红外传感器识别黑线轨迹,用红外火源传感器检测火源,超声波传感器测量规定区域,由单片机对传感器识别到的信号加以分析和判断,通过对直流电机的控制来实现自动寻迹并灭火,系统工作技术路线图如图3-1所示:
图3-1 系统工作技术路线图
3.2电源模块
用为保证单片机正常工作,所以用4节干电池为系统供电。

再用三端稳压管转换为电机和单片机需要的电压,单片机需要5V的电压,所以使用7805为其供电。

电动机使用8V的
电压,6个干电池串联直接为其供电。

超声波5V,3个干电池直接为其供电。

3.3红外寻迹传感器
该智能灭火小车在路过黑线的路面上时,由于黑线和路面对光线的反射系数不同,可以根据接收到反射红外线的强弱来判断黑线。

在该模块中利用了简单、应用也比较普遍的检测方法------红外探测法。

经过多次测试、比较,发现把TCRT5000传感器安装在距离检测物表面6~8mm时,检测效果最好,因为5mm以下是它的检测盲区,而大于10mm则很容易受另外的光电管的干扰。

红外寻迹传感器原理图如图3-2所示:
图3-2 红外寻迹传感器原理图
图中可调电位器阻值来调节比较器的门限电压,可方便的调节传感器的灵敏度。

用此电路作为传感器检测与调理电路。

3.4 L298N电机驱动
JP1为逻辑输入端,为IN1\IN2\IN3\IN4,其中IN1、IN2控制电机M1:IN3、IN4控制电机M2。

UIA-UID为TLP521-4光隔离,保护因电机启动停止瞬间产生的尖峰脉冲对主控制器的影响。

RN1、RN2为上下拉电阻.D1-D8为续流二极管IN4007。

驱动电路如图3-3所示:
图3-3 电机驱动电路
3.5红外火源传感器
远红外火源传感器能够探测到波长在700nm~1100nm范围内的红外光,探测角度为60,其中红外光波长在900nm附近时,其灵敏度达到最大。

原理如3-4所示:
图3-4 红外火源传感器模块原理图
3.6风扇模块
灭火风扇的驱动电压为+7V,为了增强驱动能力,我们用三极管8550做驱动电路用来加大驱动电流。

在IN处接单片机的IO口,通过IO口输出高低电平来控制灭火风扇的启动和停止。

灭火风扇驱动电路如图3-5所示:
图3-5 灭火风扇驱动电路
四、软件设计
在进行微机控制系统设计时,我们根据单片机的具体情况使用Keil C51软件,采用主流
图4-1消防小车系统总体流程图
设计语言C语言对单片机进行编程实现各项功能。

C语言功能丰富,表达能力强,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,应用十分广泛。

消防小车系统总体流程图如4-1所示:
五、测试方案与测试结果:
首先我们按模块测试超声波测距模块,10cm以内为盲区,盲区测量显示数据:
火源传感器模块对蜡烛火焰测量范围:
六、结论、心得体会
6.1结论
在小组成员的共同努力下,通过大量测试调试表明,小车能够较好的完成题目要求的基本要求。

我们在完成基本任务的基础上想更好的方案。

尽可能的减小时间。

消防小车从硬件到软件都以达到预期的目的。

由于时间关系对于更好的方案有待讨论。

6.2小组心得体会
通过这次全国大学生电子设计大赛,我们从中收获了很多宝贵的知识,提高了团队协作能力,增强了团队意识。

对于做控制类小车题目的我们来说,需要很强的动手能力,我们在做车的过程中受益匪浅。

更让我们了解大赛的整个过程和在比赛中应注意的问题,以及避免问题的方法,和对于应急事件的处理。

这对于我们毕业进入社会有着很大的帮助。

经历了比赛期间,也锻炼了我们的意志力与坚定信心的能力,让我们在压力下,一步一步接近成功。

欢乐与汗水伴随着我们成长。

电子大赛是有意义的,我们应该继续发扬大赛的精神,鼓励大学生电子设计,提高大学生的创新意识。

感谢大赛组织者,和有关大赛的工作人员,祝愿电子大赛越办越好,更上一层楼,每一年都是一个突破。

附录一:总原理图
附录二:基本元器件清单
附录三:总程序
#include <reg52.h> //包括一个52标准内核的头文件
#include <intrins.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
char flarg=0;//flarg变量标志位,bug火焰规定寻迹标志位
uint
i=0,m=0,j=0,n=0,k=0,l=0,aa=0,aaa=0,ii=0,iii=0,t=0,h=0,r=0,w=0,ww=0,www=0,tt=0,kk=0,hh=0;/ /aa,ii,蜂鸣器子程序变量
sbit P02=P0^2;//左边火焰传感器
sbit P03=P0^3;//右边火焰传感器
sbit P04=P0^4;//中间火焰传感器
sbit P10=P1^0; // 超声波发射
sbit P12=P1^2;//控制左电机
sbit P13=P1^3;//控制左电机
sbit P14=P1^4;//控制右电机
sbit P15=P1^5;//控制右电机
sbit P16=P1^6; //电机使能EA
sbit P17=P1^7; //电机使能EB
sbit P20=P2^0;//寻迹中
sbit P21=P2^1;//寻迹右前
sbit P22=P2^2;//寻迹右
sbit s40hHz=P1^0;
sbit P31=P3^1;
sbit voice=P3^0;
uint s,t; //s为测量距离(单位:mm), t为测量时间(单位:us)
uchar d[4]; //显示缓存
uchar temperature; //当前温度值,单位为摄氏度
uchar sign_failure; //测量失败标志
uchar sign_complete; //测量完成标志
//-------------延时程序---------------//
void delay(uint a)
{ uint x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
//--------------电机驱动程序运行-----------//
void fun1() //直走
{ P12=0;P13=1;P14=0;P15=1;}
void fun2() //后退
{ P12=1;P13=0;P14=1;P15=0;}
void fun3() //右走
{ P12=0;P13=1;P14=1;P15=1;}
void fun4() //左走
{ P12=1;P13=1;P14=0;P15=1;}
void fun5() //停车
{ P12=1;P13=1;P14=1;P15=1;}
void fun6()
{ P12=1;P13=0;P14=0;P15=1;} //原地右转
//-------------蜂鸣器出库,查火源,火灭,进库----aa,ii-----------// void chukuxiang()
{while(aa==0)
{ for(ii=0;ii<100;ii++)
{ voice=!voice;delay(20);}
aa=1;
}
}
void huoyuanxiang()
{ while(aaa==0)
{for(iii=0;iii<100;iii++)
{voice=!voice;delay(30);}
aaa=1;
}
}
void huomiexiang()
{while(aa==0)
{for(ii=0;ii<100;ii++)
{voice=!voice;delay(80);}
aa=1;
}
}
void jinkuxiang()
{while(aa==0)
{for(ii=0;ii<100;ii++)
{voice=!voice;delay(100);}
aa=1;
}
}
=====================
void send_wave()
{ uchar z;
for(z=0;z<8;z++) //40kHz
{s40hHz=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
s40hHz=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();_nop_();
}
}
//=========================================
void measure() //超声波测距子函数
{ sign_failure=0; //测量开始,清测量失败标志
sign_complete=0; //测量开始, 清测量完成标志
TH2=0;TL2=1;
TR2=1; //计时开始
send_wave();
while(sign_complete==0) //等待测量完成
{ display(1);
if(sign_failure) //若T2溢出也未能检测到回波(65.536ms×314m/s=20.5m),测量失败{
TR2=0;
s=0;
return ;
}
}
TR2=0;
s=t*0.157; // s=314000*(t*0.000001)/2;
}
//=========================================
void chaoshengbo()
{uchar d=0;
T2CON=0x09; //T2工作在捕获状态
EA=1; //开总中断
ET2=1; //使能定时器2中断
s =0;
while(d==0)
{ measure();
display(80);
if(s<=160){fun5(); huoyuanxiang();delay(2000);P31=0;delay(10000);}
P31=1;d=1;
}
}
//--------------------火焰子程序----------------------------//
void xunhuoyan()//有火焰为1;
{ uchar o;
if((P02==0&&P04==0&&P03==1)||(P02==0&&P04==1&&P03==1)){for(o=0;o<31;o++) {delay(10);fun3();}}
if((P02==1&&P03==0&&P04==0)||(P02==1&&P03==0&&P04==1)){for(o=0;o<31;o++) {delay(10);fun4();} }
if(P02==1&&P03==1&&P04==1){for(o=0;o<31;o++)
{delay(10);fun1();w=1;r=1;ww=1;www=1;chaoshengbo();fun2();}}
}
//---------------------出库三个线左转九十度---i,m,n,w,c,----------//
void chuku()
{char c=0;
while(w==0)
{if(P20==0){flarg=1;delay(20);}
if((P20==1)&&(flarg==1)){i++;flarg=0;}
xunhuoyan();
if(i==1){ chukuxiang();}
if(i==2)
{while(c==0)
{fun1();
if(P21==1){flarg=1;delay(20);}
if(P21==0 && flarg==1){m++;flarg=0;}
if(m>=8){c=1;}
}
while(w==0)
{fun4();
xunhuoyan();
if(P21==1){flarg=1;delay(20);}
if(P21==0 && flarg==1){n++;flarg=0;}
if(n>=12){w=1; }
}
}
else fun1();
}
i=3;
}
//--------------------出库二直走四个线左转90度---r,j,l---------// void chukutwo()
{
while(r==0)
{if(P20==0){flarg=1;delay(20);}
if( P20==1 && flarg==1){j++;flarg=0;}
xunhuoyan();
if(j==3)
{while(r==0)
{fun4();
xunhuoyan();
if(P21==0){flarg=1;delay(20);}
if(P21==1 && flarg==1)
{l++;flarg=0;}
if(l>=12){r=1;}
}
}
else fun1();
}
j=4;
}
//----------------直走两条线原地旋转三百六十度--t,h,k,ww,cc---------------//
void chukuthree()
{char cc=0;
while(ww==0)
{if(P22==0){flarg=1;delay(20);}
if(P22==1 && flarg==1){t++;flarg=0;}
xunhuoyan();
if(t==2)
{while(cc==0)
{fun1();
if(P21==1){flarg=1;delay(20);}
if( P21==0 && flarg==1)
{h++;flarg=0;}
if(h>=8){cc=1;}
}
while(ww==0)
{fun6();
xunhuoyan();
if(P21==1){flarg=1;delay(20);}
if( P21==0 && flarg==1)
{k++;flarg=0;}
if(k>=23){ww=1; }
}
}
else fun1();
}
t=2;
}
//-------------------------------------360度后左转90直走-----f,www,tt,hh,kk---------//
void chukufour()
{char f=0;
while(www==0)
{if(P20==0){flarg=1;delay(20);}
if((P20==1)&&(flarg==1)){tt++;flarg=0;}
xunhuoyan();
if(tt==1)
{while(f==0)
{fun1();
if(P21==1){flarg=1;delay(20);}
if(P21==0 && flarg==1){hh++;flarg=0;}
if(hh>=8){f=1;}
}
while(www==0)
{fun4();
if(P21==1){flarg=1;delay(20);}
if(P21==0 && flarg==1){kk++;flarg=0;}
if(kk>=12){www=1; }
}
}
else fun1();}
xunhuoyan();
fun1();
tt=1;}
//-----------------全程主函数---------------------//
void init()
{P14=1;P15=1;}
void main()
{init();
delay(2000);
while(1)
{chuku();
chukutwo();
chukuthree();
chukufour();
huiku();}
}
void T2_ISR (void) interrupt 5 using 1
{if(TF2)
{TF2=0;
sign_failure=1; //置测量失败标志}
else
{ EXF2=0;
t=RCAP2H*256+RCAP2L ;
sign_complete=1; //测量结束, 置测量完成标志}
}。

相关文档
最新文档