智能灭火小车论文.docx
- 文档编号:29902412
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:28
- 大小:2.26MB
智能灭火小车论文.docx
《智能灭火小车论文.docx》由会员分享,可在线阅读,更多相关《智能灭火小车论文.docx(28页珍藏版)》请在冰豆网上搜索。
智能灭火小车论文
队名:
flying
成员:
谭龙江
熊俊斐
袁瑞应
指导老师:
***
朱卫红
田凤
2012年5月12日
摘要
本次设计CPU采用Atmel公司的AVR系列单片机中的At89S52。
完成的是学校组织的第四届电子设计大赛。
完成的作品基本功能要求在规定的场地中尽快寻找到火源,然后在尽可能短的时间内作出灭火动作。
本作品使用AVR产生PWM波,控制小车的直流电动机,利用火焰探测器找到火源,利用超声波探测距离,使得小车能够到达蜡烛相应的位置停止,驱动电风扇从而吹灭蜡烛。
关键词:
At89S52智能小车火焰探测器超声波探测器电风扇
智能灭火小车
一、设计目的与设计要求
此次比赛的场地如下图1所示,图中的H区为小车的起始地区
域,蜡烛在图中正方形的区域内,
如图,小车从车库出发,自动寻找放置在正中间的蜡烛,并用小车上的电风扇吹灭蜡烛。
扩展:
1、吹灭放置在任意位置的蜡烛
2、吹灭放置在任意位置的多根蜡烛
1.1原理分析
电路主要由无线接收电路、单片机控制电路和电机驱动电路组成。
为了降低学生实际操作的难度,方便调试,无线高频电路采用了现成的315MHz超再生接收模块,而对编、解码电路,则采用的是市面上遥控电路中较为常用的2262/2272,关于这对电路的详细资料,可看一下本公司网站的相关介绍。
单片机控制电路主要将接收到的无线电控制信号进行识别,然后控制电机电路执行相应的动作。
无线电控制信号由2272进行解码,从10--13脚四个数据位送出,单片机根据这四位数据组合,进行控制信号的识别。
2272电路的17脚为解码有效输出端,与单片机的7脚相连,当遥控信号被正确解码后,这个脚就输出高电平,当遥控信号撤消后,此脚便输出低电平,在进行单片机程序设计时,可根据这个电压变化来判断是否收到有效的无线控制信号。
电机驱动电路则通过控制输入电机两端的电压极性以达到控制电机转向的目的,通过单片机四个输出引脚输出不同的低电平值,可以实现对两个电压转向的控制。
但是有一点需要编程时注意,对同一个电机的两个控制脚,千万不能同时输出低电平,这样电机会被短路,容易损坏三极管。
1.2软件分析
由于无线电信号的解码采用了专用集成电路来处理,使得制作者对单片机软件的编制变得比较简单,主要编程逻辑为:
判断是否收到无线信号→读取四位数据→根据不同的数据,执行不同的动作。
基
1.3制作与调试
电子元器件安装只要按线路板上所标,都可以正确安装,制作中一般常容易出错的就是读色环电阻错误,造成电阻安装错误,安装好后的元件面如图:
图2小车硬件
二、方案设计与论证
根据设计的目的与要求,经过讨论我们一致选定左手法则,即小车一直延左旋转,直到火焰探测器探测到蜡烛,再利用超声波探测器检测小车到火源的距离。
因此设计的小车要求能够及时调节前进的方向,顺利找到火源。
2.1直流调速系统
鉴于价格和功能的考虑,我们选择了直流电机,通过PWM控制小车的速度以及方向。
电机驱动部分有以下两种方案:
方案一:
使用MOSFET构成H桥式驱动电路,利用PWM波形来控制小车的速度,再用单片机两个I/O口控制电机旋转方向,此电路驱动功率比较大,小车的转速比较快。
方案二:
使用直流电机驱动芯片L298N来驱动小车的电机。
L298N作为集成芯片,一块芯片能够输出两路PWM波形,控制两个电机,相对于由MOSFET构成的H桥式驱动电路来说具有电路焊接简单,焊接完成后易出差错的缺点。
二者价格上差别不大,所以我们优先选择了方案一。
图3H桥驱动电路
2.2超声波探测器电路的设计
为了能够使小车快速地找到火源所在的房间,就要求避障系统比较灵敏,遇到障碍物迅速躲避,对于避障电路有以下三种方案:
方案一:
使用红外开关管ST168来避障
方案二:
使用光电开关E3F3-DS5ON1
方案三:
使用超声波探测距离电路模块
由于ST168的探测距离太近,而小车的速度不能太慢,ST168那一系列的红外开关管不能够满足要求。
方案二中的光电开关,探测距离只能够达到1m,而超声波电路探测距离能够达到2m,而且抗干扰能力比较强,因此方案三成为了最佳选择。
图4超声波模块
2.3灭火部分设计
最后小车找到火源,用什么方法来灭火,最直接的方法是用风扇,而这也是最有可能实现的办法。
定下的方案是用单片机控制风扇,当小车距蜡烛10cm的位置停止时,驱动风扇开始旋转灭火。
火灭之后,风扇再停止。
2.4电源部分设计
电源部分,可以使用几节5号电池串联,长时间供电,为电机和风扇供电,产生5V的直流电压,为电路中的各个芯片提供工作电压。
三、硬件电路设计
3.1AT89S52单片机资源分配
此次设计主要使用了At89S52芯片的I/O口用于检测外部传感器的信,TC1用来产生两路PWM波,引脚使用情况如下表:
图5单片机资源分配
3.2电机驱动电路
驱动小车的电机,电路图如下:
3.3电源部分
图6电源
3.4火焰传感器电路
可以检测火焰或者波长在760纳米~1100纳米范围内的光源探测角度60度左右,对火焰光谱特别灵敏灵敏度可调,性能稳定工作电压5V,数字量模拟量双输出。
灭火小车必备部件
输出相应的信号。
光电开关有三根引出线,棕色
接电源正极,兰色接电源负极,黑色为信号输出端,送给单片机,使单片机作出相应
的判断,从而控制小车作出正确的动作。
可以检测火焰或者波长在760纳米~1100纳米范围内的光源
探测角度60度左右,对火焰光谱特别灵敏
灵敏度可调,性能稳定
工作电压5V,数字量模拟量双输出。
救火机器人必备部件
注意:
火焰传感器只是对火焰最敏感,对普通光也是有反应的
采用模拟量输出方式和AD转换处理,可以获得更高的精度
注意:
传感器与火焰要保持一定距离,以免高温损坏传感器
端口说明:
DO为数字量输出,AO为模拟量输出。
设有固定螺栓孔,方便安装
3.5火焰探测器分布
这次设计使用了三个火焰探测器,其分布如下图所示:
图7传感器分布
传感器这样分布之后,只要前面或者前面和左边同时没检测到火焰时,小车立即左转,而当小车检测到火焰时小车向火焰方向寻跑,如此,小车可以比较顺利地跑到蜡烛相应位置。
3.6风扇控制电路
面风扇的控制使用三极管和接地电阻来实现,当检测到三根白线以后,单片机的PD0口送出高电平,使得电风扇的一路开关闭合,风扇开始旋转,电路图如下。
图8风扇控制电路图
上图中1,2两引脚接风扇的两端,当检测到了三条白线时,PD0输出高电平,三极管导通,此时电磁继电器的开关打到另外的端口,风扇开始旋转。
四、软件设计
图9软件流程图
图10测距流程图
五、总电路图如下:
图11总电路图
六、调试与结果分析
小车第一次在寻找蜡烛时,由于电池电量不足没能成功,后来使用的是若干节干电池串联组成的电池组构成的电源,为整个电路供电。
但是小车的电机承受尖峰电流的能力太弱,所以烧坏了一块单片机,只能降低PWM占空比,然后再进行调试。
在正式火焰探测时,车底盘上的传感器灵敏度太高,刚刚从出发点出发就显示检测到火焰,开始进行灭火动作,后来经过调节传感器灵敏度,经过调整后小车能够完成基本功能。
同时单片机能够控制小车当下执行的操作。
七、总结
这次比赛从3月下旬开始正式筹划,从买元件,模型再到焊接电路,组装小车,中间出现了诸多让人意料不到的事情,最开始的第一个模型车体太小,装上风扇以后重心不好平衡,硬件电路基本没有问题,但是小车的电机总是出现一些这样或那样的问题,最终第一辆小车的两个电机差速过大,很不好调节两轮的PWM占空比,从而使小车转过固定的角度,或者使小车走直线,无奈之下只好再寻一辆车模。
真正的硬件焊接时间并没有几天,大部分时间都花在了小车调试及编程软件上面,小车的控制总是出现问题,所以这也让我们有了一个教训,下次再做智能小车时,编程软件一定要选好。
通过这次智能小车的制作,我们将AVR系列单片机的资源以及一些基本功能掌握地比较牢固,另外在模块化编程方面也有了上些心得体会,有了一定的收获。
参考文献
1.童诗白主编.模拟电子技术基础(第三版).北京:
高教出版社,2001
2.刘冰茹主编·现代电子技术实践课程指导·北京:
机械工业出版社·2003
3.王玉凤主编·电路设计与仿真·北京:
清华大学出版社·2005
4.谢自美主编·电子线路设计.实验.测试(第三版)·武汉:
华中科技大学出版社·2000
5.罗杰·电子线路设计实验·北京:
电子工业出版社·2008
6.杨刚·电子系统设计与实践·北京:
电子工业出版社·2004
7.于卫·模拟电子技术实验及综合实训教程·武汉:
华中科技大学出版社·2008
8.陈兆仁·电子技术基础实验研究与设计·北京:
电子工业出版社·2000
单片机原理及C51开发技术
主程序
#include
#include
sbittrig=P3^6;
sbitecho=P3^7;
unsignedinttime=0;
unsignedinttimer=0;
unsignedintt=0;
unsignedcharposit=0;
unsignedlongS=0;
bitflag=0;
unsignedcharconstdiscode[]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0xff/*-*/};
unsignedcharconstpositon[3]={0xf7,0xef,0xdf};
unsignedchardisbuff[4]={0,0,0,0,};
sbitL1=P3^0;
sbitL2=P3^1;
sbitL3=P3^2;
sbitfan=P3^3;//风扇
sbitPWM1=P0^0;
sbitPWM2=P0^1;
sbitPWM3=P0^2;
sbitPWM4=P0^3;
sbitzuod=P0^4;//左转指示灯
sbityoud=P0^5;//右转指示灯
/****************************延时1MS*************************/
voiddelay1ms(intms)
{
unsignedinti,j;
for(i=0;i for(j=0;j<100;j++); } voidgo1(void) { PWM1=0; PWM2=1; PWM3=1; PWM4=0; zuod=1; youd=1; } //小车前进// voidgo(void) { PWM1=0; PWM2=1; PWM3=1; PWM4=0; zuod=1; youd=1; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100); } //小车停止// voidstop(void) { PWM1=1; PWM2=1; PWM3=1; PWM4=1; zuod=1; youd=1; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100);} //小车左转/// voidleft(void) { PWM1=1; PWM2=0; PWM3=1; PWM4=0; zuod=0; youd=1; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100); } //小车右转// voidright(void) { PWM1=0; PWM2=1; PWM3=0; PWM4=1; zuod=1; youd=0; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100); } //小车大左转// voiddleft(void) { PWM1=0; PWM2=0; PWM3=1; PWM4=0; zuod=0; youd=1; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100); } //小车大右转// voiddright(void) { PWM1=0; PWM2=1; PWM3=0; PWM4=0; zuod=1; youd=0; delay1ms(100); PWM1=1; PWM2=1; PWM3=1; PWM4=1; delay1ms(100); } /********************************************************/ voidDisplay(void)//扫描数码管 { if(posit==0) {P1=(discode[disbuff[posit]])&0x7f;} else {P1=discode[disbuff[posit]];} P2=positon[posit]; if(++posit>=3) posit=0; } /********************************************************/ voidConut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100;//算出来是CM if((S>=700)||flag==1)//超出测量范围显示“-” { flag=0; disbuff[0]=10;//“-” disbuff[1]=10;//“-” disbuff[2]=10;//“-” } else { disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10%10; } } /********************************************************/ voidzd0()interrupt1//T0中断用来计数器溢出,超过测距范围 { flag=1;//中断溢出标志 } /********************************************************/ voidzd3()interrupt3//T1中断用来扫描数码管和计800MS启动模块 { TH1=0xf8; TL1=0x30; Display(); timer++; if(timer>=20) { timer=0; trig=1;//800MS启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=0; } } /*********************************************************/ voidmain(void) { TMOD=0x11;//设T0为方式1,GATE=1; TH0=0; TL0=0; TH1=0xf8;//2MS定时 TL1=0x30; ET0=1;//允许T0中断 ET1=1;//允许T1中断 TR1=1;//开启定时器 EA=1;//开启总中断 go1(); delay1ms(2000); left(); delay1ms(200); while (1) { loop: while(! echo);//当RX为零时等待 TR0=1;//开启计数 while(echo);//当RX为1计数并等待 TR0=0;//关闭计数 Conut();//计算 if(S>24) { if(L2==0) { go(); } if(L1==0) { right(); } if(L3==0) {left(); } if((L1=1)&&(L2=1)&&(L3=1)) {left(); } } else { if(L2==0) {stop(); fan=0; while((! L2)&&(t<2000)) {stop(); fan=0; t++; } t=0; fan=1; dleft(); delay1ms(200); gotoloop;} if(L1==0) { dright(); gotoloop; } if(L3==0) { dleft(); gotoloop; } if((L1=1)&&(L2=1)&&(L3=1)) { dleft(); gotoloop; } } } } 附件 元件清单 元件名称 数量 AT89S52单片机 1 排阻(10k) 1 晶整(24MHz) 1 超声波模块 1 火焰探测器模块 3 蓄电池(1﹒5v) 4 风扇 1 电解电容 5 瓷片电容(104p) 2 发光二级管 3 电阻(10k) 2 电阻(2k) 2 电阻(5﹒1k) 5﹒1 排线 若干 开关 2 USB接口 1 三级管(8050) 1 插针 若干 自制电感 2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 灭火 小车 论文